文档介绍:该【ucosiii学习笔记 】是由【2623466021】上传分享,文档一共【5】页,该文档可以免费在线阅读,需要了解更多关于【ucosiii学习笔记 】的内容,可以使用淘豆网的站内搜索功能,选择自己适合的文档,以下文字是截取该文章内的部分文字,如需要获得完整电子版,请下载此文档到您的设备,方便您编辑和打印。第1页
UCOS-III学****笔记
用户代码不允许调用任务函数,任务一旦创立只能由UCOS-III调用
每个任务都必须创立创立自己的堆栈,可以静态分配或由malloc〔〕动态分配,但类型只能为CPU_STK
任务优先级数越小越高,设置范围1~OS_CFG_PRIO_MAX-2,,系统默认的最大优先级为10,。
系统默认的一些优先级:
统计任务:11
OS_CFG_TICK_TASK_PRIO:10
分配堆栈大小时:1K=256
OSTaskCreate〔〕里面有些指针没有意义。
推荐在调用OSStart〔〕函数之前只创立一个任务,因为此时UCOS-III可以统计CPU的使用率
每个任务都是一个无限循环,通过调用延时函数OSTimeDly〔〕或OSTimeDlyHMSM〔〕等待一个事件而被挂起。
任务不像C函数,没有return的。
只运行一次的任务完毕时必须调用OSTaskDel〔〕删除自己。
任务在等待事件时不会占用CPU
一旦堆栈被动态分配就不能再回收,对于不需要删除的任务,建议动态分配堆栈
uC/OS-III允许用户在调用OSStart()之前创立任意个任务,但当用到统计任务统计CPU的使用率时,调用OSStart()之前只允许创立1个任务,给这个任务一个相当高的优先级。统计任务本身也有优先级OS_CFG_STAT_TASK_PRIO,。,此优先级排倒数第二,第一是空闲任务。
任务要获得共享资源使用权就必须先获得互斥信号量〔mutex〕,使用完后要释放
mutex。
消息队列是任务及任务间的通信,未承受到消息队列的任务会被暂时挂起,处于等待承受的状态。
OSTimeDly〔〕,任务调用这个函数后就会被挂起直到期满。
多任务管理程序
第2页
主任务
主任务中创立多个子任务
第3页
第4页
统计任务
这局部可以参考UCOS-ii的
进入OSStatTaskCPUUsageInit函数后会屡次调用其他函数,最后进入OS_StatTaskInit函数,此函数会创立统计任务〔鼠标一直往下拉到底就会看到任务创立,如下列图〕,任务优先级默认为最大值-2.
进入任务函数,在任务函数中会主动计算结果,并提供用户接口,
内存管理
()和free(),因为这样会导致内存碎片。
()动态的分配内存空间,但不要释放这些内存空间。{就是说定义不需要释放的空间时可以使用malloc(),这样能使所定义的空间的利用率接近为100%}
〔限制于处理器的RAM〕。
-III中及内存分区相关的函数都是以OSMem???()为前缀。
。
()只能在任务级被调用,OSMemGet()和OSMemPut()可以在ISR中使用,因为这两个函数不会被阻塞且能快速地被执行。
#defines定义的宏常量代替。
创立内存分区和内存块
方法一:
方法二:
从内存分区申请内存块
应用代码通过调用OSMemGet()可以从内存分区中申请内存块。
释放内存块到内存分区
当用户对内存块的使用完毕后,必须将该内存块归还给对应的内分区。
第5页
调用OSMemPut()实现这个功能。
如何动态地分配内存
任务在内存分区被分配完时可以等待内存块。uC/OS-III不支持任务等待内存分区,但是可以通过一个信号量用于内存分区中内存块的分配。如图:
〔1〕获得一个内存块时,先调用OSSemPend()获得一个信号量,
然后再调用OSMemGet()获得一个内存块。
〔2〕释放一个内存块时,先调用OSMemPut()释放这个内存块,
然后再调用OSSemPost()释放这个信号量。
上面的操作必须以这个顺序执行。
附录:UCOS-IIIAPI函数
任务管理
就绪列表
挂起队列
时间管理
信号量
消息队列
内存管理