完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
这篇文档会主要选择些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 告诉你具体是哪个任务的栈空间小了,程序员需要去加任务的栈空间了。 |
|
|
|
只有小组成员才能发言,加入小组>>
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-27 08:41 , Processed in 0.454221 second(s), Total 39, Slave 32 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号