全文预览已结束
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
S.D.Lu的uC/OS II 入门学习笔记(2):多任务初学者的疑惑对于一个单片机学习者,如果从未接触过嵌入式操作系统,就会觉得它是非常复杂而神秘的。从我个人的经历说起,之前写的所有程序都是在单片机上“裸奔”的。开始学习OS之前,对OS存在几个疑惑:1. 一个CPU如何同时执行多个任务?答:CPU不能同时执行多个任务,甚至不能同时执行两个任务。每一个时刻,CPU只能执行一个任务。2. CPU如何运行多个任务呢?答:CPU是通过分时复用的方法运行多个任务的。也就是把时间切分成一个一个的时间片段,一个时间片段运行一个任务,然后下一个时间片段运行另一个任务。应注意的是,一个时间片段并不一定能完整的运行一个任务,一个任务可能需要若干个时间片段才能从头到尾将代码运行一遍。3. 这些任务是相互独立的吗?如果不是独立的,它们之间又有什么联系?答:这些任务可以是相互独立的,也可以是相互联系的。举两个简单的例子。(1):假设有两个任务,一个是用P1.0口控制LED闪烁,3次/秒;另一个是用P1.1口控制LED闪烁,2次/秒。那么这两个任务就是相互独立的。(2): 假设有两个任务,一个是测量外部输入的方波信号的频率;另一个是控制一个LCD显示模块,显示该方波信号的频率值。那么这两个任务就是有联系的,它们有公共的资源,即(数据)频率值。当然,这里的例子并不准确,因为这些任务太简单了,完全可以用一个任务来完成,根本不需要OS。这里只是用于说明,两个任务之间存在联系的情况。如果出现多个任务访问同一资源时,比如两个任务都可以对一个变量进行赋值,就会发生冲突。如何解决这些冲突呢?这就是需要OS来进行管理。这只是OS的工作之一,其最重要的工作是进行任务之间的切换。本篇实验将在上一篇的基础上进行,将运行两个任务,每个任务控制一个LED的亮灭。例2-1先修改程序,编译运行。main文件不用修改。增加一个任务Task_LED2()。1.修改app_cfg.h文件增加新增任务Task_LED2的一些设置项定义。这两个设置项将在创建任务的时候使用。2.修改app.h文件在app.h文件声明Task_LED2。3.修改app.c文件a).定义Task_LED2的任务堆栈每个任务必须有任务堆栈,任务堆栈的作用将在后面介绍。b).在app.c中编写Task_LED2任务函数体。c).在Task_LED任务中创建Task_LED2。4.修改led.h文件在led.h中对LED2()进行宏定义。我的板子LED2在PD2上,接法和上一篇的LED1相似。所以宏定义如下:5.修改led.c文件。增加PD口的初始化代码。通过上面的修改,我们在C/OS II中增加了一个任务。编译,下载到板子上运行,两个LED不停的闪烁,一个每秒闪烁1次,另一个每秒闪烁2.5次。本篇实验中虽然有两个任务,但是它们是独立的,它们之间没有公共资源,没有进行任何通信。下面按照修改文件的顺序进行介绍相关细节。步骤1中,定义了任务的优先级别。优先级别是C/OS II进行任务调度的依据,C/OS II总是运行当前就行任务中优先级别最高的任务。优先级数值越小,优先级别越高。步骤1中还定义了任务堆栈的大小。C/OS II中任务的堆栈大小具体多大为宜,目前我未查到相关资料,暂且不讨论。步骤3中定义了任务堆栈。C/OS II进行任务调度时,会从一个任务跳转到另一个任务,任务堆栈就是用于存储跳转断点的。步骤3中,在任务1中创建任务2,这在C/OS II中非常常见。在启动C/OS II之前,往往只创建一个任务,即启动任务,其他任务在启动任务中创建。有些任务会在其他任务中创建。观察两个任务的函数体可知,他们的共同点是,都有一个while(1)死循环。既然都是死循环,那么单片机是如何在这两个任务中跳转的呢?这就是C/OS II操作系统的工作了。OSTimeDlyHMSM()是C/OS II提供的延时函数,但是该函数和我们“裸奔”程序中的延时函数有实质上的区别。在“裸奔”程序中,延时函数一般是通过消耗CPU的时间来实现的。而OSTimeDlyHMSM()在任务中调用的时候,事实上只执行一次,将定时时间设定好之后,延时的任务就交个C/OS II系统了。该函数延时的最小单位是一个系统“心跳”时钟周期。OSTaskCreate()函数的原型如下:第一个参数是一个指向任务的指针,即是一个函数指针。第二个参数是传递给任务的参数,是一个指针,如果要创建的任务有输入参数,可以通过该指针传递。第三个参数在指向任务堆栈栈顶的指针。任务堆栈是一个OS_STK类型的数组,所以该参数是指向OS_STK数据的指针。第四个参数用于指定要创建任务的优先级别。要注意,C/OS II中每个任务的优先级别是唯一的,不能创建相同优先级的任务。对照我们创建的任务Task_LED2的代码:第一个参数是任务任务的名称,即函数名。由于我们的任务没有参数,所以第二个参数为一个空指针。第三个参数传递的是一个地址,该地址是Task_LED2任务堆栈的最后一个元素的地址。(为什么是传递最后一个的地址,而不是第一个的地址呢?这跟处理器的堆栈增长方式有关,要理解这个就要看书了。在此先不细究。)简单的说,在任务创建函数中传递该地址之后,就将该数组与要创建的Task_LED2关联在一起了。第四个
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年广告创意策划专员招聘面试题库及参考答案
- 2025年锁定技术专员招聘面试参考题库及答案
- 2025年地下工程师招聘面试参考题库及答案
- 2025年移动应用开发专员招聘面试题库及参考答案
- 2025年屋宇科技专员招聘面试题库及参考答案
- 2025年情报分析师人员招聘面试参考题库及答案
- 2025年体验官招聘面试题库及参考答案
- 2025年战略规划专员人员招聘面试题库及参考答案
- 2025年资料员招聘面试题库及参考答案
- 2025年折旧会计专员招聘面试题库及参考答案
- 《我国周边安全环境》课件
- 餐饮管理公司简介范文
- GB/T 45078-2024国家公园入口社区建设指南
- 【MOOC】数字逻辑电路-南京理工大学 中国大学慕课MOOC答案
- 福建省福州第四中学2024-2025学年高二上学期期中生物试题
- 《美容皮肤治疗技术》课程标准
- 国开(贵州)2024年秋《地域文化(专)》形考任务1-2答案
- 房地产项目营销策划与执行方案
- 《第1节 化学反应的方向》说课课件
- 香港装饰装修工程实施合同范本(2024版)
- 股份协议书股份协议书模板(2024版)
评论
0/150
提交评论