RTX:RTX系统调用函数分类、声明、功能及注意事项

【事件标志管理函数】
函数名              描述 
os_evt_clr          清除至少一个事件标志。 
os_evt_get          获取事件标志,使 os_evt_wait_or 运行 
os_evt_set          设置至少一个事件标志。 
os_evt_wait_and     等待最少所有的事件标志被设置 
os_evt_wait_or      等待至少一个事件标志被设置 
isr_evt_set         设置至少一个事件标志 
注意:
1.使用事件标志管理函数可以释放和等待其他任务的的事件。 


【信箱管理函数】
函数名              描述  
os_mbx_check        可再加入信箱的消息数 
os_mbx_declare      创建信箱对象(被宏定义的) 
os_mbx_init         初始化信箱 
os_mbx_send         给信箱发送消息 
os_mbx_wait         取下一条消息,或在信箱空的情况下等待 
isr_mbx_receive     从信箱中取出下一条消息 
isr_mbx_send        给信箱发送消息 
注意:
1.信息管理函数可以实现通过信箱来进行任务间消息的发送和接收。 


【内存分配函数】
函数名              描述 
_declare_box        采用4位对齐方式创建固定大小块的内存池 
_declare_box8       采用8位对齐方式创建固定大小块的内存池 
_init_box           初始化4位对齐的内存池 
_init_box8          初始化8位对齐的内存池 
_alloc_box          (可重入)从内存池中分配一个内存块 
_calloc_box         (可重入)从内存池中分配一个内存块,并初始化其值为0 
_free_box           (可重入)回收内存块 
注意: 
1.内存分配函数通过创建内存池和使用内存池里的固定块来实现对系统内存的动态使用。 
2._init_box8, _declare_box和_declare_box8被作为宏来执行。


【互斥量管理函数】
函数名              描述 
os_mut_init         初始化互斥量 
os_mut_release      释放一个互斥量 
os_mut_wait         等待一个互斥量 
注意:
1.互斥量管理函数使用互斥量去同步各类任务的行动,以及保护共享变量。 


【信号量管理程序】
函数名              描述 
os_sem_init         初始化信号量对象 
os_sem_send         发送一个信号(标志)给信号量 
os_sem_wait         等待来自信号量的信号(标志) 
isr_sem_send        发送一个信号(标志)给信号量 
注意:
1.信号管理函数使得开发者能使用信号量实现同步各种作业的活动,以保护共享变量。 


【系统函数】
函数名              描述 
tsk_lock            禁止任务切换 
tsk_unlock          使能任务切换 
注意:
1.通过系统函数,可以控制定时器中断和任务切换。 


【任务管理函数】
函数名              描述 
os_sys_init         初始化并启动RL-RTX  
os_sys_init_prio    初始化并启动RL-RTX ,指定给开始任务优先级 
os_sys_init_user    初始化并启动RL-RTX ,指定给开始任务优先级和自定义栈。 
os_tsk_create       创建和启动一个新任务 
os_tsk_create_ex    创建、启动以及传递一个参数指针给新任务 
os_tsk_create_user  创建、启动以及指定一个自定义栈给新任务 
os_tsk_create_user_ex  创建、启动,指定一个自定义栈以及传递一个参数指针给新任务 
os_tsk_delete       停止并移除任务 
os_tsk_delete_self  停止并移除当前运行任务 
os_tsk_pass         传递控制信息给下一个相同优先级的任务 
os_tsk_prio         改变任务的优先级 
os_tsk_prio_self    改变当前运行任务的优先级 
os_tsk_self         获取当前运行任务的ID 
注意:
1.通过任务管理函数,可以启动RTX内核,创建和移除各种类型的任务,以及控制任务的运行优先级。 


【定时器管理函数】
函数名              描述 
os_dly_wait         指定时间间隔内停止调用任务 
os_itv_set          使能任务周期性唤醒 
os_itv_wait         在任务周期性唤醒时间间隔用完之前停止任务调用 
注意:
1.通过定时器管理函数,可以实现任务的停止和重启。 


【用户定时器管理函数】
函数名              描述 
os_tmr_create       调用函数 os_tmr_call 启动一个减1定时器。 
os_tmr_kill         中止一个用户定义计时器。 
os_tmr_call         当用户定义计时器时间用完时调用用户自己编写的函数。 
注意:
1.当运行用户编写的函数时,通过用户定时器管理程序可以加以控制。


<< 注意事项 >>
在使用RTX内核时候,当遇到运行的问题,以下一些注意事项可能会有帮助:


$ 函数的使用
>> 函数名以os_开始的函数可被进程调用,但是不能被中断服务子程序调用;


>> 函数名以isr_开始的函数可被IRQ中断服务子程序调用,但是不能被进程调用;


>> 在FIQ中断函数中不能调用isr_函数;


>> 在中断函数中不能调用tsk_lock()和 tsk_unlock() 函数;


>> 在RTX内核开始运行前不能使能任何中断。


$ IRQ中断的使用
在使用RTX核时,对IRQ中断的使用无限制。RTX核仅使用一个定时器产生的周期性的时间片来激活任务调度器。


>> IRQ中断会被RTX核禁止很短的一段时间(最长几个微妙);


>> RTX核使用软件中断保护临界代码不被中断;


>> 0-7号软件中断被RTL-RTX核使用,不能被用户程序使用;


>> RTX使用系统自带的SWI处理器(自动地从函数库中链接),用户在工程中不能创建自己的SWI处理器。移除用户自建的SWI处理器以解决数据中止。


>> 若在应用程序中出现一些零星问题,可以检查在启动代码中配置的IRQ栈的大小。IRQ栈的使用依赖中断函数的复杂性。


$ FIQ中断的使用
  快速中断是不能被RTX核使用的,但是可以在应用程序中自由的使用FIQ中断。


>> RTX核不禁止FIQ中断的使用。 
>> 在FIQ中断处理函数中不能调用任何RTX核的系统函数。 


$ 系统的启动代码
  RTX核为每一个进程设置独立的栈,栈的大小在配置文件配置。但在RTX核通过os_sys_init()函数启动以前,系统使用的是在启动文件STARTUP.S中为用户模式配置的栈。当RTX核启动并运行以后,用户模式的栈将不会再被使用,也就是浪费存储空间,因此建议在启动文件中将栈的容量尽量设置为最小。


  在启动代码STARTUP.S中为RTX核配置的最小栈容量为:


    管理模式下为32字节(0x00000020); 
    中断模式下为64字节(0x00000040); 
    用户模式下为80字节(0x00000050);


  当调用 SWI 函数时系统使用的是管理模式栈。如果使用复杂的__swi函数,必须增加栈的容量。


  中断模式栈使用在时间片中断时,这个中断激活os_clock_demon()任务调度器,它拥有自己的栈且运行在用户模式。如果在用户程序中使用中断,必须增加这个栈的大小。开始时256字节大小的栈是一个不错的选择,但如果中断模式的栈溢出后,应用程序运行异常甚至崩溃。


  用户模式栈在RTX核启动以前使用。建议在通过os_sys_init()函数创造和开始的第一个进程中初始化用户应用程序。
  在调用os_sys_init()函数以前,可以配置端口引脚、使能AD转换器等。函数init_IO必须很小且不能使用很多的局部变量,以避免用户模式栈会溢出。


void main (void) {
   /* Here a simple IO may be initialized. */
   init_IO ();
   os_sys_init (task1);
   for (;;);
}


建议在第一个进程中做复杂的初始化工作。因此在这进程中,栈可比通常其他用户模式栈的容量大。


void task1 (void) __task {
   /* Here the interrupts and more complex IO may be initialized. */
   Init_CAN ();
   ...
}
  • 2
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

姜源Jerry

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值