uCOS-III学习笔记.doc

  1. 1、本文档共15页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
uCOS-III学习笔记

UCOS-III学习笔记 一.知识要点 用户代码不允许调用任务函数,任务一旦创建只能由UCOS-III调用 每个任务都必须创建创建自己的堆栈,可以静态分配或由malloc()动态分配,但类型只能为CPU_STK 任务优先级数越小越高,设置范围1~OS_CFG_PRIO_MAX-2,OS_CFG_PRIO_MAX在OS_CFG.h中定义,系统默认的最大优先级为10,统计任务的优先级在os_CFG_app.h中定义。 系统默认的一些优先级: 统计任务: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,在os_CFG_app.h中定义。,此优先级排倒数第二,第一是空闲任务。 任务要获得共享资源使用权就必须先获得互斥信号量(mutex),使用完后要释放 mutex。 消息队列是任务与任务间的通信,未接受到消息队列的任务会被暂时挂起,处于等待接受的状态。 OSTimeDly(),任务调用这个函数后就会被挂起直到期满。 二.单任务应用程序 多任务管理程序 统计任务 这部分可以参考UCOS-ii的 /article/1974b289a1ebd7f4b0f77469.html 进入OSStatTaskCPUUsageInit函数后会多次调用其他函数,最后进入OS_StatTaskInit函数,此函数会创建统计任务(鼠标一直往下拉到底就会看到任务创建,如下图),任务优先级默认为最大值-2. 进入任务函数,在任务函数中会主动计算结果,并提供用户接口, 内存管理 1.uC/OS-III 可以获得连续的内存块 2.不要在嵌入式系统中使用 malloc() 和 free() ,因为这样会导致内存碎片。 3.可以用 malloc() 动态的分配内存空间,但不要释放这些内存空间 。{ 就是说定义不需要释放的空间时可以使用 malloc() , 这样能使所定义的空间的利用率接近为 100%} 4.用户可以创建任意个内存分区(限制于处理器的 RAM ) 。 5.uC/OS-III 中与内存分区相关的函数都是以 OSMem???() 为前缀。 6.通过设置 OS_CFG.H 中的 OS_CFG_MEM_EN 为 1 开启内存管理服务。 7.OSMemCreate() 只能在任务级被调用, OSMemGet() 和 OSMemPut() 可以在 ISR 中使用, 因为这两个函数不会被阻塞且能快速地被执行 。 8.内存块的大小最好用 #defines 定义的宏常量代替。 创建内存分区和内存块 方法一: 方法二: 从内存分区申请内存块 应用代码通过调用 OSMemGet() 可以从内存分区中申请内存块。 释放内存块到内存分区 当用户对内存块的使用完毕后,必须将该内存块归还给对应的内分区。 调用 OSMemPut() 实现这个功能。 如何动态地分配内存 任务在内存分区被分配完时可以等待内存块 。 uC/OS-III 不支持任务等待内存分区 , 但是可以通过一个信号量用于内存分区中内存块的分配。如图: ( 1 ) 获得一个内存块时 , 先调用 OSSemPend() 获得一个信号量 , 然后再调用 OSMemGet() 获得一个内存块。 ( 2 ) 释放一个内存块时 , 先调用 OSMemPut() 释放这个内存块 , 然后再调用 OSSemPost() 释放这个信号量。 上面的操作必须以这个顺序执行。 附录:UCOS-III API函数 任务管理 就绪列表 挂起队列 时间管理 信号量 消息队列 内存管理 主任务 主任务中创建多个子任务

文档评论(0)

shuwkb + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档