ucosii的特点.pptVIP

  1. 1、本文档共60页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
ucosii的特点

* 任务切换 将被挂起的任务寄存器入栈 将较高优先级任务的寄存器出栈 ?C/OS-II的任务管理 * 任务级的任务切换OS_TASK_SW() 通过系统调用指令完成 保护当前任务的现场 恢复新任务的现场 执行中断返回指令 开始执行新的任务 ?C/OS-II的任务管理 * 调用OS_TASK_SW()前的数据结构 低优先级任务 OS_TCB OSTCBCur (1) 存贮器低地址 存贮器高地址 堆栈方向 SP R1 R2 R3 R4 PC PSW 存贮器低地址 存贮器高地址 高优先级任务 OS_TCB OSTCBHighRdy (3) (2) CPU (4) (5) ?C/OS-II的任务管理 * 保存当前CPU寄存器的值 低优先级任务 OS_TCB OSTCBCur PSW PC R1 R2 R3 R4 存贮器低地址 存贮器高地址 堆栈方向 SP R1 R2 R3 R4 PC PSW 存贮器低地址 存贮器高地址 高优先级任务 OS_TCB OSTCBHighRdy (3) (2) CPU (4) (5) (1) (3) ?C/OS-II的任务管理 * 重新装入要运行的任务 低优先级任务 OS_TCB OSTCBCur PSW PC R1 R2 R3 R4 存贮器低地址 存贮器高地址 堆栈方向 SP R1 R2 R3 R4 PC PSW PSW PC R1 R2 R3 R4 存贮器低地址 存贮器高地址 高优先级任务 OS_TCB OSTCBHighRdy OSTCBCur (1) (2) CPU (4) (4) (1) (3) (3) (4) ?C/OS-II的任务管理 * 任务切换OS_TASK_SW()的代码 Void OSCtxSw(void) { 将R1,R2,R3及R4推入当前堆栈; OSTCBCur?OSTCBStkPtr = SP; OSTCBCur = OSTCBHighRdy; SP = OSTCBHighRdy ?OSTCBSTKPtr; 将R4,R3,R2及R1从新堆栈中弹出; 执行中断返回指令; } ?C/OS-II的任务管理 * 内存管理 在ANSI C中可以用malloc()和free()两个函数动态地分配内存和释放内存。在嵌入式实时操作系统中,容易产生内存碎片。 μC/OS-II中,操作系统把连续的大块内存按分区来管理。每个分区中包含有整数个大小相同的内存块。 在一个系统中可以有多个内存分区。这样,用户的应用程序就可以从不同的内存分区中得到不同大小的内存块。但是,特定的内存块在释放时必须重新放回它以前所属于的内存分区。 ?C/OS-II的内存管理 * 内存分区示意图 ?C/OS-II的内存管理 * 内存控制块 为了便于内存的管理,在μC/OS-II中使用内存控制块(memory control blocks)的数据结构来跟踪每一个内存分区,系统中的每个内存分区都有它自己的内存控制块。 typedef struct { void *OSMemAddr; /*分区起始地址*/ void *OSMemFreeList; /*下一个空闲内存块*/ INT32U OSMemBlkSize; /*内存块的大小*/ INT32U OSMemNBlks; /*内存块数量*/ INT32U OSMemNFree; /*空闲内存块数量 */ } OS_MEM; ?C/OS-II的内存管理 * 内存管理初始化 如果要在μC/OS-II中使用内存管理,需要在OS_CFG.H文件中将开关量OS_MEM_EN设置为1。这样μC/OS-II 在启动时就会对内存管理器进行初始化 (OSMemInit() )。 ?C/OS-II的内存管理 * 建立一个内存分区,OSMemCreate() 在使用一个内存分区之前,必须使用OSMemCreate()先建立该内存分区。该函数共有4个参数:内存分区的起始地址、分区内的内存块总块数、每个内存块的字节数和一个指向错误信息代码的指针。 每个内存分区必须含有至少两个内存块,每个内存块至少为一个指针的大小 。 OS_MEM *CommTxBuf; INT8U CommTxPart[100][32]; CommTxBuf = OSMemCreate(CommTxPart, 100, 32, err); ?C/OS-II的内存管理 * 分配一个内存块,OSMemGet() 调用OSMemGet()函数从已经建立的内存分区中申请一个内存块。该函数的唯一参数是指向特定内存分区的指针,该指针在建立内存分区时,由OSMemCreate()函数返回。 注意的

文档评论(0)

118books + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档