找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2337|回复: 1
打印 上一主题 下一主题
收起左侧

μC/OS-III实验环境建立

[复制链接]
跳转到指定楼层
楼主
ID:407679 发表于 2018-10-10 18:35 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
一、实验目的
掌握建立μ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秒运行一次。任务交替运行,符合预期结果。



分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:1 发表于 2018-10-11 00:16 | 只看该作者
补图即可获得100+黑币
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表