本科嵌入式ARM第6章μCOSII程序设计基础(免费阅读).ppt

本科嵌入式ARM第6章μCOSII程序设计基础(免费阅读).ppt

  1. 1、本文档共139页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
消息队列| μC/OS-II程序设计基础 多任务接收数据 为了说明如何使用消息队列来实现多任务接收数据,我们设计一个系统,按键一按下, LED按照指定节奏闪耀,蜂鸣器按照指定节奏鸣响。假设TaskLED为高优先级的任务,三个任务的处理流程如下。 消息队列| μC/OS-II程序设计基础 任务间同步 TaskKEY任务主要代码如下。 void TaskKEY (void *pdata) { …… for (i = 0; i QSIZE; i++) { dly[i] = i*20; } while (1) { while ((IO0PIN KEY1) != 0) { OSTimeDly(1); } for (i = 0; i QSIZE; i++) { OSQPostOpt (q, dly[i], OS_POST_OPT_BROADCAST); } while ((IO0PIN KEY1) == 0) { OSTimeDly(1); } } } 延时1个节拍,用于任务切换 延时1个节拍,用于任务切换 等待按健按下 等待按健释放 以广播形式发送消息,所有等待此队列的任务均获得消息 初始化代码 存储延时参数,每次加20 消息队列| μC/OS-II程序设计基础 任务间同步 LED任务的代码如下。 void TaskLED (void *pdata) { …… q = OSQCreate(msg, QSIZE); while (1) { pd = (INT16U *) OSQPend (q, 0, err); IO0CLR = LED1; OSTimeDly(*pd / 2 ); IO0SET = LED1; OSTimeDly(*pd / 2 ); } } 初始化工作 点亮LED 熄灭LED 等待接收消息指针 创建消息队列,长度为QSIZE 以消息内容作为参数延时 以消息内容作为参数延时 消息队列| μC/OS-II程序设计基础 任务间同步 Beep任务主要代码如下。 void TaskBeep (void *pdata) { …… while (1) { pd = (INT16U *) OSQPend (q, 0, err); IO0CLR = BEEP ; OSTimeDly(*pd * 3 / 4 ); IO0SET = BEEP ; OSTimeDly(*pd / 4 ); } } 初始化工作 开启蜂鸣器 关闭蜂鸣器 等待接收消息指针 以消息内容作为参数延时 以消息内容作为参数延时 μC/OS-II程序设计基础 动态内存管理 简介 数据通信 函数列表 1 2 3 动态内存管理| μC/OS-II程序设计基础 简介 ANSI C中,可以使用malloc()和free()两个函数来动态分配内存,在嵌入式系统中,它们一般也是可用的,但并不适合。如图为被两个函数分配过的内存区。 产生碎片,造成连续内存不够大,导致有内存也不能分配,程序执行失败; 分配和释放的内存块大小不同,所以执行时间不确定; 内存一般是不可重入的。 动态内存管理| μC/OS-II程序设计基础 简介 为了避免上面的3个问题,μC/OS-II自己设计了一套动态内存分配系统。μC/OS-II的动态内存分配是以块为单位分配的,一次只能分配一个块,块的大小可以由用户来定义。 系统可以管理多个堆(用于动态内存管理的空间),各个堆中的块的大小可以定义得不一样,但同一个堆中的块大小是相同的。 1个字节 2个字节 4个字节 堆1 堆2 堆3 μC/OS-II的动态内存管理是数据队列的绝佳伴侣,配合使用异常方便 。 动态内存管理| μC/OS-II程序设计基础 函数列表 OSMemCreate函数 函数名称 OSMemCreate 所属文件 OS_MEM.C 函数原型 OS_MEM *OSMemCreate( void *addr, INT32U nblks ,INT32U blksize, INT8U *err) 功能描述 建立并初始化一块内存区:一块内存区包含指定数目的大小确定的内存块,程序可以包

文档评论(0)

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

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

1亿VIP精品文档

相关文档