2654|0

420

帖子

0

TA的资源

纯净的硅(初级)

楼主
 

RAW task 篇 [复制链接]

这篇文档会主要选择些API讲解,读者可以对着代码仔细理解。
1 RAW_U16 raw_task_create(RAW_TASK_OBJ  *task_obj, RAW_U8  *task_name,  RAW_VOID   *task_arg,
                             RAW_U8  task_prio,  RAW_U16  time_slice,  PORT_STACK  *task_stack_base,
                             RAW_U16 stack_size, RAW_TASK_ENTRY task_entry, RAW_U8 auto_start)

以上是任务创建函数的原型,有几个地方需要注意下。

1 参数time_slice 是时间片轮以tick 为单位, 如果是0的话会赋予TIME_SLICE_DEFAULT(50)可以配置。

2 task_stack_base 是PORT_STACK 类型的, stack_size 是栈空间类型的数量,不是具体多少字节,这个很重要,比如arm 上的栈大小stack_size 设置为200的话,那么具体栈空间的字节大小为200*4 =800.

3 auto_start 为 1的话任务进入就绪队列,0 的话状态改为suspend 状态,以后需要其他任务调用raw_task_resume 去恢复运行。

4 这个函数会调用移植函数port_stack_init 移植的时候一定要注意栈顶大小不能溢出!!!!






2 RAW_U16 raw_task_stack_check(RAW_TASK_OBJ  *task_obj, RAW_U16 *free_stack)

这个函数主要用于检测任务的栈空间还有多少空闲栈元素,注意不是空闲字节,举个例子在arm cpu 上*free_stack =100  的话说明还有400个字节空闲可用。









3 RAW_U16  raw_enable_sche(RAW_U8  need_schedule)

这个函数的特点是抢占当中如果有唤醒了更高优先级任务的话,会发生调度。


4 RAW_U16  raw_sleep(RAW_U32  dly)

这个函数的特点是参数可以为0, 这个时候当前任务就放到同一级的就绪队列最后去



5 RAW_U16  raw_task_suspend(RAW_TASK_OBJ *task_ptr)
这个函数不支持suspend 嵌套,对一个suspend 的任务再次suspend 的话,就返回RAW_SUSPENDED_AGAIN。



6 RAW_U16 raw_task_wait_abort(RAW_TASK_OBJ *task_ptr)

这个函数相当的强大,可以中止一切block 住的任务,和睡眠的函数。



7 RAW_VOID raw_iter_block_task(LIST *object_head, RAW_VOID  (*debug_function)(RAW_TASK_OBJ *), RAW_U8 opt)

这是一个很有意思的debug 函数, 能够遍历block 住的任务,遍历的时候可以调用相应的debug_function 函数把任务的具体参数全部打印出来。
Opt =1 的意思是遍历的时候全部唤醒所有block 住的任务,opt=0 则不影响。


8 RAW_U32 raw_get_system_global_space()

这是一个debug 函数会返回raw os系统所有的用到的数据空间包括data 段和BSS段的空间。


9 RAW_U16 raw_task_priority_change (RAW_TASK_OBJ *task_ptr, RAW_U8 new_priority, RAW_U8 *old_priority)

这个函数的特点是你不能改变idle 任务的优先级,你也不能把自己的任务优先级改到和idle 的一样,同时你也不能改变自己任务的优先级到原样。


10 RAW_U16 raw_task_delete(RAW_TASK_OBJ *task_ptr)
这个函数的特点是被删除的任务会从block 状态还有timeout 中移除,而且这个任务的状态会改为RAW_DELETED。

11  RAW_VOID  raw_idle_task (void *p_arg)
Idle 任务的设计是很有意思的,如果RAW_TASK_STACK_CHECK被启用的话,它会永远的重复的去检测栈空间的大小,如果任务的栈空间小于原先的10%系统马上会报错,并通过RAW_ASSERT 告诉你具体是哪个任务的栈空间小了,程序员需要去加任务的栈空间了。
点赞 关注

回复
举报
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表