一、实验目的
掌握建立μC/OS-III实验环境的方法。
初步了解μC/OS-III任务管理函数。
初步了解μC/OS-III的结构以及与应用程序之间的关系。
二、实验内容
建立VS2012或VS2013或VS2017开发平台。
创建两个任务并交替运行,在屏幕上显示当前运行状态。
三、实验过程、结果
1.实验步骤及内容
(1)搭建VS平台;
图3.1 VS2015平台界面
Micrium_Win32_OS3的对应版本是VS2013,Micrium_Win32_Kernels的对应版本是VS2017,而我的版本是VS2015,故而都尝试了一下。
VS2015运行Micrium_Win32_Kernels时报错界面如下:
图3.2 报错界面
具体报错内容为:
1>------ 已启动生成: 项目: OS3, 配置: Debug Win32 ------
1>C:\Program Files(x86)\MSBuild\Microsoft.Cpp\v4.0\V140\Microsoft.Cpp.Platform.targets(57,5):error MSB8020: The build tools for v141 (Platform Toolset = 'v141') cannot befound. To build using the v141 build tools, please install v141 buildtools. Alternatively, you may upgrade tothe current Visual Studio tools by selecting the Project menu or right-clickthe solution, and then selecting "Retarget solution".
========== 生成: 成功 0 个,失败 1 个,最新 0 个,跳过 0 个 ==========
按照提示我进行了重新生成解决方案,并没有解决问题。于是尝试用VS2015对VS2012版本对应的包进行编译执行。
VS2015打开Micrium_Win32_OS3时显示如下界面:
图3.2 升级询问界面
因此,点击确定后对原本的VC++编译器和库进行升级即可,VS平台搭建成功。
(2)创建任务
CPU总是不断地在各个任务间切换,为了下次跳回来, CPU在跳走的同时,要保护好现场,故而需要用到堆栈。
给任务分配堆栈:
所以每当我们创建一个任务,我们都需要给这个任务分配一个堆栈。
#define APP_TASK_STK_SIZE 256u
(CPU_STK_SIZE)APP_TASK_STK_SIZE
创建任务用到OSTaskCreate()函数
OSTaskCreate((OS_TCB *)&AppStartTCB, //任务控制块指针
(CPU_CHAR *)"AppStart", //任务名称
(OS_TASK_PTR)AppStart, //任务代码指针
(void *)0, //传递给任务的参数parg
(OS_PRIO)APP_START_PRIO, //任务优先级
(CPU_STK *)&AppStartStk[0], //任务堆栈基地址
(CPU_STK_SIZE)APP_TASK_STK_SIZE / 10u, //堆栈剩余警戒线,使用90%堆栈时溢出检查
(CPU_STK_SIZE)APP_TASK_STK_SIZE, //堆栈大小
(OS_MSG_QTY)0u, //可接收的最大消息队列数
(OS_TICK)0u, //时间片轮转时间
(void *)0, //任务控制块扩展信息
(OS_OPT)(OS_OPT_TASK_STK_CHK | OS_OPT_TASK_STK_CLR), //检查堆栈以及堆栈值清零
(OS_ERR *)&err); //返回值
其中,#define APP_START_PRIO 7u
表示该任务的优先级是7,数字越小,表示任务的优先级越高。
任务创建完毕,编写AppStart。
在AppStart创建二个简单的任务:TaskA和TaskB,设置AppStart 1秒执行一次,TaskA 3秒执行一次,TaskB 5秒执行一次,并进行打印任务优先级和系统时间。
其中用OSTimeDlyHMSM()函数进行延时。
(3)编译执行,在屏幕上显示运行状态;
实验结果分析:
可以看出,Start任务优先级为7,每隔一秒钟执行一次;TaskA任务优先级为8,每隔3秒执行一次;TaskB任务优先级为9,每隔5秒运行一次。任务交替运行,符合预期结果。
|