第六章函数参考以下部分描述RTX51Tiny的系统函数。函数依字母顺序排列,分为以下部分:概要(Summary)简述程序作用,列出包含的文件,包括它的声明和原型,语法举例,和参数描述。描述(Description)程序的详细描述,如何使用。返回值程序返回值说明。参阅(seealso)相关程序。例子如何正确使用该函数的程序例子中断。附注:以os_开头的函数可以由任务调用,但不能由中断服务程序调用。以isr_开头的函数可以由中断服务程序调用,但不能由任务调用。1、irs_send_signal概要:#includertx51tny.hcharisr_send_signal(unsignedchartask_id);/*信号发往的任务*/描述:isr_send_signal函数给任务task_id发送一个信号。如果指定的任务正在等待一个信号,则该函数使该任务就绪,但不启动它,信号存储在任务的信号标志中。附注:该函数是RTX51Tiny实时操作系统的一部分,仅包含于PK51中。该函数仅被中断函数调用。返回值成功调用后返回0,如果指定任务不存在,则返回-1。参阅os_clear_signal,os_send_signal,os_wait例子#includertx51tny.hvoidtst_isr_send_signal(void)interrupt2{isr_send_signal(8);/*给任务8发信号*/}2、irs_set_ready概要#includertx51tny.hcharisr_set_ready{unsignedchartask_id};/*使就绪的任务*/描述将由task_id指定的任务置为就绪态。附注该函数是RTX51Tiny的一部分,包含在PK51中。该函数仅用于中断函数。返回值无例子#includertx51tny.hvoidtst_isr_set_ready(void)interrupt2{isr_set_ready(1);/*置位任务1的就绪标志*/}3、os_clear_signal概要#includertx51tny.hcharos_clesr_signal(unsignedcahrtask_id);/*清除信号的任务*/描述清除由task_id指定的任务信号标志。附注:该函数是RTX51Tiny的一部分,包含在PK51中。返回值信号成功清除后返回0,指定的任务不存在时返回-1。参阅isr_send_signal,os_send_signal,os_wait例子#includertx51tny.hvoidtst_os_clsar_siganl(void)_task_8{…os_clear_signal(5);/*清除任务5的信号标志*/…}4、os_create_task概要#includertx51tny.hcharos_create_task(unsignedchartask_id);/*要启动的任务ID*/描述启动任务task_id,该任务被标记为就绪,并在下一个时间点开始执行。附注:该函数是包含在PK51中的RTX51Tiny的组成部分。返回值任务成功启动后返回0,如果任务不能启动或任务已在运行,或没有以task_id定义的任务,返回-1。参阅os_delete_task例子#includertx51tny.h#includestdio.h/*用于printf*/voidnew_task(void)_task_2{…}voidtst_os_create_task(void)_task_0{…if(os_create_task(2)){printf(“couldn’tstarttask2n”);}…}5、os_delete_task概要#includertx51tny.hcharos_delete_task(unsignedchartask_id);/*要删除的任务*/描述函数将以task_id指定的任务停止,并从任务列表中将其删除。附注该函数是包含在PK51中的RTX51Tiny的组成部分。返回值任务成功停止并删除后返回0。指定任务不存在或未启动时返回-1。附注如果任务删除自己,将立即发生任务切换。参阅os_create_task例子#includertx51tny.h#includestdio.hvoidtst_os_delete_task(void)_task_0{…if(os_delete_task(2)){printf(“couldn’tstoptask2n”);}…}6、os_reset_interval概要#includertx51tny.hvoidos_reset_interval(unsignedcharticks);/*滴答数*/描述用于纠正由于os_wait函数同时等待K_IVL和K_SIG事件而产生的时间问题,在这种情况下,如果一个信号事件(K_SIG)引起os_wait退出,时间间隔定时器并不调整,这样,会导致后续的os_wait调用(等待一个时间间隔)延迟的不是预期的时间周期。允许你将时间间隔定时器复位,这样,后续对os_wait的调用就会按预期的操作进行。附注:该函数是包含在PK51中的RTX51Tiny的组成部分。返回值无例子#includertx51tny.hvoidtask_func(void)_task_4{…switch(os_wait2(KSIG|K_IVL,100)){caseTMO_EVENT:/*发生了超时,不需要Os_reset_interval*/break;caseSIG_EVCENT:/*收到信号,需要Os_reset_interval*/os_reset_interval(100);/*依信号执行的其它操作*/break;}…}7、os_running_task_id概要#includertx51tny.hcharos_running_task_id(void);描述函数确认当前正在执行的任务的任务ID。附注:该函数是包含在PK51中的RTX51Tiny的组成部分。返回值返回当前正在执行的任务的任务号,该值为0~15之间的一个数。例子#includertx51tny.hvoidtst_os_running_task(void)_task_3{unsignedchartid;tid=os_running_task_id();/*tid=3*/}8、os_send_signal概要#includertx51tny.hcharos_send_signal(chartask_id);/*信号发往的任务*/描述函数向任务task_id发送一个信号。如果指定的任务已经在等待一个信号,则该函数使任务准备执行但不启动它。信号存储在任务的信号标志中。附注该函数是包含在PK51中的RTX51Tiny的组成部分。返回值成功调用后返回0,指定任务不存在时返回-1。参阅isr_send_signal,os_clear_signal,os_wait#includertx51tny.hvoidsignal_func(void)_task_2{…os_send_signal(8);/*向8号任务发信号*/…}voidtst_os_send_signal(void)_task_8{…os_send_signal(2);/*向2号任务发信号*/…}9、os_set_ready概要#includertx51tny.hcharos_set_ready(unsignedchartask_id);/*使就绪的任务*/描述将以task_id指定的任务置为就绪状态。附注:该函数是包含在PK51中的RTX51Tiny的组成部分。返回值无例子#includertx51tny.hvoidready_func(void)_task_2{…os_set_ready(1);/*置位任务1的就绪标志*/…}10、os_switch_task概要#includertx51tny.hcharos_switch_task(void);描述该函数允许一个任务停止执行,并运行另一个任务。如果调用os_switch_task的任务是唯一的就绪任务,它将立即恢复运行。附注:该函数是包含在PK51中的RTX51Tiny的组成部分。返回值无例子#includertx51tny.h#includestdiovoidlong_job(void)_task_1{floatf1,f2;f1=0.0;while(1){f2=log(f1);f1+=0.0001;os_switch_task();/*运行其它任务*/}}11、os_wait概要#includertx51tny.hcharos_wait(unsignedcharevent_sel,/*要等待的事件*/unsignedcharticks,/*要等待的滴答数*/unsignedintdammy);/*无用参数*/描述该函数挂起当前任务,并等待一个或几个事件,如时间间隔,超时,或从其它任务和中断发来的信号。参数event_set指定要等待的事件,可以是下表中常数的一些组合。事件描述K_IVL等待滴答值为单位的时间间隔K_SIG等待一个信号K_TMO等待一个以滴答值为单位的超时事件可以用竖线符(“|”)进行逻辑或。例如,K_TMO1K_SIG指定任务等待一个超时或者一个信号。ticks参数指定要等待的时间间隔事件(K_IVL)或超时事件(K_TMO)的定时器滴答数。参数是为了提供与兼容性而设置的,在中并不使用。附注该函数是包含在PK中的RTX51Tiny的组成部分。请参阅事件一节获得关于K_IVL,K_SIG,K_TMO的更多信息。返回值当有一个指定的事件发生时,任务进入就绪态。任务恢复执行时,下表列出的由返回的常数指出使任务重新启动的事件。可能的返回值有:返回值描述RDY_EVENT表示任务的就绪标志是被或函数置位的。SIG_EVENT收到一个信号TMO_EVENT超时完成,或时间间隔到NOT_OK参数的值无效参阅isr_send_signal,isr_set_ready,os_clear_signal,os_reset_interval,os_send_signal,os_set_ready,os_wait1,os_wait2例子#includertx51tny.h#includestdio.hvoidtst_os_wait(void)_task_9{while(1){charevent;event=os_wait(K_SIG|K_TMO,50.0);switch(event){default:/*从不发生,该情况*/break;caseTMO_EVENT;/*超时*/break;/*50次滴答超时*/caseSIG_EVENT;/*收到信号*/break;}}}12、os_wait1概要#includertx51tny.hcharos_wait1(unsignedcharevent_sel);/*要等待的事件*/描述该函数挂起当前的任务等待一个事件发生。os_wait1是os_wait的一个子集,它不支持os_wait提供的全部事件。参数event_sel指定要等待的事件,该函数只能是K_SIG。附注:该函数是包含于PK51中的RTX51Tiny的组成部分。参见事件一节获得K_IVL,K_SIG和K_TMO的更多信息。返回值当指定的事件发生,任务进入就绪态。任务恢复运行时,os_wait1返回的值表明启动任务的事件,返回值见下面的常数列表:返回值RDY_EVENT任务的就绪标志位是被os_set_ready或isr_set_ready置位的SIG_EVENT收到一个信号NOT_OKEvent_sel参数的值无效例子见os_wait13、os_wait2概要#includertx51tny.hcharos_wait2(