首页 ucos移植

ucos移植

举报
开通vip

ucos移植ucos移植 μC/OS移植 1、实验目的 (1)掌握QuickARM专用工程模板的使用。 (2)掌握在μC/OS-II操作系统下编写用户程序的方法。 (3)熟悉LPC2000系列ARM7处理器的GPIO控制。 2、实验设备 硬件:PC机 SmartSOPC教学实验开发平台 QuickARM核心板 软件:ADS1.2集成开发环境 μC/OS-II操作系统(2.52) 3、实验内容 学习移植μC/OS-II操作系统到ARM7处理器的方法,然后编写一个简单的多任务应用程序,实验中编写了3个任务...

ucos移植
ucos移植 μC/OS移植 1、实验目的 (1)掌握QuickARM专用 工程 路基工程安全技术交底工程项目施工成本控制工程量增项单年度零星工程技术标正投影法基本原理 模板的使用。 (2)掌握在μC/OS-II操作系统下编写用户程序的方法。 (3)熟悉LPC2000系列ARM7处理器的GPIO控制。 2、实验设备 硬件:PC机 SmartSOPC教学实验开发平台 QuickARM核心板 软件:ADS1.2集成开发环境 μC/OS-II操作系统(2.52) 3、实验 内容 财务内部控制制度的内容财务内部控制制度的内容人员招聘与配置的内容项目成本控制的内容消防安全演练内容 学习移植μC/OS-II操作系统到ARM7处理器的方法,然后编写一个简单的多任务应用程序,实验中编写了3个任务: 任务1:控制QuickARM核心板上的LED1~LED4。 任务2:检测QuickARM核心板上的按键KEY1~KEY3。 任务3:控制SmartSOPC底板上的LED1~LED8。 实验现象: QuickRAM板上的LED4一直点亮,按下KEY1~KEY3中的一个按键,点亮QuickARM板上对应的LED1~LED3。底板上的LED1~LED8做流水灯显示。 4、实验预习要求 (1)仔细阅读参考文献【1】5.7节的LPC2000引脚连接模块和5.9节的GPIO。 (2)仔细阅读2.12节中LED电路部分。 (3)仔细阅读QuickARM板上的LED1~LEA8。 (4)仔细月的参考文献【5】,了解μC/OS--II的组成、移植的相关文件内容以及消息邮箱的使用。 QuickARM)模板建(5)仔细阅读使用ARM Executable Image for UCOSII(for 立工程的步骤。 5、实验原理 在任务1和任务2之间使用邮箱进行通信,当任务2检测到按键消息后,就将按键的值通过邮箱发送到任务1,任务1接收到邮箱信息后,判断键值,并点亮对应的LED1~LED3,程序流程如图5.5和图5.6所示。任务3的优先级是最低的,控制主板上的LED1~LED8作流水灯演示实验。 6、实验步骤 (1)连接EasyJTAG仿真器和QuickARM核心板,然后安装EasyJTAG仿真器的驱动程序(若已经安装过,此步省略)。 (2)为ADS1.2添加QuickARM专用工程模板——ARM Exccutable Image for UCOS?(for Quick ARM)(若已经增加过,此步省略)。 (3)建立一个实验目录——Demo Program,然后将μC/OS-?2.52源代码、移植代码(移植代码在产品配套光盘中可以找到),其目录名为ARM、PC服务代码Arm_Pc,LPC2000在μC/OS-?下的底层驱动(Driver)和外围器件的操作软件包(Software Package)复制到实验目录Demo Program下。μC/OS-?的源代码可以从参考文献的附带光盘上获得。(若已经增加过,此步省略)。 (4)启动ADS1.2,使ARM Exccutable Image for UCOS?(for Quick ARM)工程模板建立一个工程GPIO,工程存储在Demo Program目录下,此时,Demo Program含有:arm;Arm_Pc;Driver;Software Package;SOURCE;GPIO共六个文件夹。 (5)在ADS的项目窗口添加GPIO的文件组,然后把Driver\GPIO\目录下的GPIO.h和GPIO.c文件添加到该文件组。 (6)打开工程窗口user组中的main.c文件,编写实验程序并保存文件。 (7)编译连接工程。 (8)选择Project->Debug,启动AXD进行JTAQ仿真测试。 (9)跳线P2.16~P2.23分别短接LED0~KED7。全速运行程序,程序将会在main.c的主函数中停止(因为main函数起始处默认设置有断点)。 (10)全速运行程序,观察主板上LED0~KED7的显示:按下QuickARM核心板上的按键KEY1~KEY3,然后观察板上的LED0~LED3。 7. 实验参考程序 GPIO实验的参考程序见程序清单5.7、程序清单5.8、程序清单5.9和程序清单5.10。 程序清单5.7 GPIO实验参考程序——main函数 #include "config.h" #include "stdlib.h" #include "GPIO.h" #define TaskStkLengh 128 //定义用户任务0的堆栈长度 #define Boad_KEY1 (1 << 28) //P0.28控制KEY1 #define Boad_KEY2 (1 << 27) //P0.27控制KEY2 #define Boad_KEY3 (1 << 25) //P0.25控制KEY3 #define Boad_LED1 (1 << 22) //P1.22控制LED1 #define Boad_LED2 (1 << 23) //P1.23控制LED2 #define Boad_LED3 (1 << 24) //P1.24控制LED3 #define Boad_LED4 (1 << 25) //P1.25控制LED4 #define LED0 (1 << 16) //P2.16控制LED0 #define LED1 (1 << 17) //P2.17控制LED1 #define LED2 (1 << 18) //P2.18控制LED2 #define LED3 (1 << 19) //P2.19控制LED3 #define LED4 (1 << 20) //P2.20控制LED4 #define LED5 (1 << 21) //P2.21控制LED5 #define LED6 (1 << 22) //P2.22控制LED6 #define LED7 (1 << 23) //P2.23控制LED7 #define LED (0xff << 16) OS_STK Task0Stk [TaskStkLengh]; //Define the Task0 stack 定义用户任务0的堆栈 OS_STK Task1Stk [TaskStkLengh]; //任务1的堆栈 OS_STK Task2Stk [TaskStkLengh]; //任务2的堆栈 OS_EVENT *Mbox; //任务Task0与Task1之间通信的邮箱 const uint32 LED_TBL[] = { 0x00,0xff, //全部熄灭 0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80,//依 次逐个点亮 0x01,0x03,0x07,0x0f,0x1f,0x3f,0x7f,0xff, //依次逐个叠加 0xff,0x7f,0x3f,0x1f,0x0f,0x07,0x03,0x01, //依次逐个递减 0x81,0x42,0x24,0x18,0x18,0x24,0x42,0x81,//两 个靠拢后分开 0x81,0xc3,0xe7,0xff,0xff,0xe7,0xc3,0x81 //从两边叠加后递减 }; void Task0(void *pdata); //Task0 任务0,控制LED的显示 void Task1(void *pdata); //Task1 任务1,检测按键 void Task2(void *pdata); //Task2 任务2,流水灯显示 /******************************************************************** ********** ** 函数名称:main() ** 函数功能:按下QuickARM板上的KEY1,KEY3,点亮QuickARM板上的LED1, LED3。同时,主板上显示流水灯。 ** 说明: 跳线P2.16,P2.23分别短接LED0,KED7。 ********************************************************************* *********/ int main (void) { OSInit (); Mbox = OSMboxCreate((void *)0); // 建立一个邮箱,用来传递按键信息 OSTaskCreate (Task0,(void *)0, &Task0Stk[TaskStkLengh - 1], 2); OSStart (); return 0; } 程序清单5.8 GPIO实验参考程序——控制板上LED显示任务 /******************************************************************** ********** ** 任务名称:Task0 ** 任务功能:接收任务Task1发来的邮箱信息,并控制QuickARM板上的LED 显示。 ********************************************************************* *********/ void Task0(void *pdata) { uint8 *MboxPoint; uint8 Err; pdata = pdata; TargetInit (); OSTaskCreate (Task1,(void *)0, &Task1Stk[TaskStkLengh - 1], 3); // 建立任务Task1 OSTaskCreate (Task2,(void *)0, &Task2Stk[TaskStkLengh - 1], 4); // 建立任务 Task2 P0_GPIOInit(Boad_KEY1|Boad_KEY2|Boad_KEY3,0); //按键KEY1~KEY3设置为输入模式 P1_GPIOInit(Boad_LED1|Boad_LED2|Boad_LED3|Boad_LED4,1); //LED1~LED4设置为GPIO输出模式 P1_GPIOClr(Boad_LED4); //点亮LED4 while (1) { P1_GPIOSet(Boad_LED1|Boad_LED2|Boad_LED3); MboxPoint = OSMboxPend(Mbox,0,&Err); //接收邮箱信息 switch(*MboxPoint) { case '1': //点亮LED1 P1_GPIOClr(Boad_LED1); break; case '2': //点亮LED2 P1_GPIOClr(Boad_LED2); break; case '3': //点亮LED3 P1_GPIOClr(Boad_LED3); break; default: break; } OSTimeDly(10); } } 程序清单5.9 GPIO实验参考程序——检测按键任务 /******************************************************************** ********** ** 任务名称:Task1 ** 任务功能:检测按键KEY1,KEY3,并给任务Task0发送邮箱信息。 ********************************************************************* *********/ void Task1 (void *pdata) { uint8 KeyValue; uint8 Err; pdata = pdata; while (1) { if((Read_P0() & Boad_KEY1) == 0) { // 按键KEY1按下 KeyValue = '1'; Err = OSMboxPost(Mbox,&KeyValue); } if((Read_P0() & Boad_KEY2) == 0) { // 按键KEY2按下 KeyValue = '2'; Err = OSMboxPost(Mbox,&KeyValue); } if((Read_P0() & Boad_KEY3) == 0) { // 按键KEY3按下 KeyValue = '3'; Err = OSMboxPost(Mbox,&KeyValue); } OSTimeDly(10); } } 程序清单5.10 GPIO实验参考程序——主板上流水灯显示任务 /******************************************************************** ********** ** 任务名称:Task1 ** 任务功能:检测按键KEY1,KEY3,并给任务Task0发送邮箱信息。 ********************************************************************* *********/ void Task1 (void *pdata) { uint8 KeyValue; uint8 Err; pdata = pdata; while (1) { if((Read_P0() & Boad_KEY1) == 0) { // 按键KEY1按下 KeyValue = '1'; Err = OSMboxPost(Mbox,&KeyValue); } if((Read_P0() & Boad_KEY2) == 0) { // 按键KEY2按下 KeyValue = '2'; Err = OSMboxPost(Mbox,&KeyValue); } if((Read_P0() & Boad_KEY3) == 0) { // 按键KEY3按下 KeyValue = '3'; Err = OSMboxPost(Mbox,&KeyValue); } OSTimeDly(10); } } 8. 日积月累 (1)μC/OS-?任务的编写与前后台程序有何差别, 中断堆栈区也就是利用原有的MSP430中的系统堆栈区。在前后台的 设计 领导形象设计圆作业设计ao工艺污水处理厂设计附属工程施工组织设计清扫机器人结构设计 形式中,中断中的压栈和出栈的操作都是在系统的堆栈区完成的。 (2)如何设置任务的优先等级, 一个任务通常是一个无限的循环,由于任务的执行是操作系统内核调度的,因此务是绝不会返回的,其返回参数必须定义成void。在μC/OS-?中,当一个运行着的任务使一个比它优先级高的任务进入了就绪态,当前任务的CPU使用权就会被抢占,高优先级任务会立刻得到CPU的控制权(在系统允许调度和任务切换的前提下)。μC/OS-?可以管理多达64个任务,但目前版本的μC/OS-?有两个任务已经被系统占用了(即空闲任务和统计任务)。必须给每个任务赋以不同的优先级,任务的优先级号就是任务编号(ID),优先级可以从0到OS_LOWEST_PR10-2。优先级号越低,任务的优先级越高。μC/OS-?总是运行进入就绪态的优先级最高的任务。
本文档为【ucos移植】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_737483
暂无简介~
格式:doc
大小:45KB
软件:Word
页数:0
分类:企业经营
上传时间:2017-10-15
浏览量:8