UCOS2_STM32F1移植详细过程(四)
Ⅰ、概述
上一篇文章是讲述uC/OS-II Ports下面os_cpu_a.asm、os_cpu_c.c和os_cpu.h文件底层端口代码的移植(修改)和说明,接着上一篇文章来讲述关于UCOS移植应用部分的代码。
该文主要针对uC/OS-II 上层应用(配置OS、新建任务等)来讲述。
请下载“UCOS2_STM32F1_3个简单任务”作为参考工程。
笔者将“UCOS移植详细过程”分为多篇文章来讲述,敬请关注。
关于本文的详情请往下看(微信请点击“阅读原文”查看内容链接内容)。
Ⅱ、下载
笔者将F0、F1、F3、F4移植到最新UCOS2.92上。移植好的、独立的4个工程供大家下载学习、研究。建立的任务都是一样的,只是针对芯片内核不同,Ports目录下相关的源代码有差异、标准外设库也存在差异。每一个系列针对不同型号芯片只需要适当改一下“型号”就行了。
提供下载的软件工程都是在板子上运行,保证没问题才上传至360云盘。下载提供下载的软件工程是在上一篇文章的基础上增加了os_cfg.h系统配置中文注释,包含了STM32F0、F1、F3、F4系列独立的软件工程。
UCOS2.92_STM32(F0、1、3、4)3个简单任务(增加os_cfg中文注释)
360云盘下载地址:
https://yunpan.cn/cBsmgInzX856G 访问密码
UCOS源代码工程
官网下载(需要账号):
360云盘下载(定期更新至最新):
https://yunpan.cn/cRzcf8eSacEhE 访问密码 1235
ST标准外设库
官网下载(需要账号):
360云盘下载(定期更新至最新):
https://yunpan.cn/cSaCpGejMSfr8 访问密码 60ae
参考资料:
https://yunpan.cn/cRCdSt73GwT6j 访问密码 499e
Ⅲ、工程目录结构说明
文件结构和工程目录结构对应关系如上图所示。
第一类(标准外设库):
Startup Code:启动代码
STM32F10x_StdPeriph_Driver:标准外设库库驱动
CMSIS:标准接口
第二类(µC/OS-II实时内核):
uC/OS-II Source:内核源代码(与处理器无关)
uC/OS-II Ports:OS端口底层代码(与处理器、编译平台有关)
第三类(用户应用):
Bsp:应用底层代码(初始化、驱动等)
App:应用实现代码(配置OS、应用等)
该文主要针对第三类APP进行移植描述,包括os_cfg.h、app_cfg.c、app_task.c文件等。
Ⅳ、配置os_cfg.h文件
os_cfg顾名思义,它就是系统配置的意思,它位于工程App目录结构下面,主要是系统上层配置和应用。
1.各项参数
各项参数里面针对初学者,主要有三个重要的参数,其他参数暂时可以不用深入理解。
三个重要的参数:
#define OS_LOWEST_PRIO 63u
#define OS_MAX_TASKS 10u
#define OS_TICKS_PER_SEC 100u
这三个参数需要重点理解,详情可参看中文注释。
对于HOOKS函数是我们上一篇文章讲述os_cpu_c.c里面相关的函数,这里OS_CPU_HOOKS_EN会被系统调用,将其定义为使能。
关于OS_DEBUG_EN,我们不使用系统自带的调试功能,就不使能。
2.任务堆栈大小
这里和我们自己建立的任务堆栈差不多的意思,将会在下面讲述app_cfg讲解。
3.任务管理
任务管理主要是针对uC/OS-II Source结构下os_task.c文件里面的源代码,os_task.c文件里面就包含了任务建立、删除、挂起等关于任务的一些函数接口,我们需要使用那些功能,这里就需要打开。
如创建任务:
#define OS_TASK_CREATE_EN 0u
#define OS_TASK_CREATE_EXT_EN 1u
我们使用扩展方式创建任务,也就是升级版本创建任务的函数。
4.系统其他功能
了解过UOCS系统的人可能知道,UCOS系统有多种功能,也就是可以建立多任务之间通信的功能,每一种功能对应一个源代码文件。
从上图可以看得出来,每一种功能够有使能全局的宏定义,只有使能了全局宏定义才可以使用里面的功能,里面各个模块(函数接口)也是配置了使用和不使用的的宏定义。
关于UCOS2更多功能,我会在后期整理关于UCOS系统相关的知识,也就是这里所说的其他功能,敬请关注微信等待,后期第一时间在微信发布消息。
Ⅴ、配置app_cfg.h、.c文件
app_cfg.c文件位于工程App目录结构下面,主要用于系统应用的配置。
1.任务优先级、堆栈
我们建立任务需要对任务优先级和堆栈进行一个定义,它位于app_cfg.h文件下面。
这里任务数和最小优先级数值需要和os_cfg.h文件的宏定义对应才行。
2.系统滴答
我们在前两篇文章讲述过关于系统滴答的,但讲的是屏蔽Micrium官网提供的OS_CPU_SysTick配置(位于os_cpu_c.c文件下)。
这里是兼容ST(也是M3内核标准的)的函数接口,所以就不使用Micrium官网提供的OS_CPU_SysTick配置。
3.建立任务
我们建立任务就是在系统里面分配一定的空间,给我们的应用提供一个函数接口(AppTask1、AppTask2、AppTask3)。我们一旦启动了系统(开始任务),相关的函数就会逐步执行。
Ⅶ、建立任务(app_task.c)
我们使用操作系统的最终目的还是需要执行我们的应用,我们这里简历了3个简单的应用(任务),位于app_task.c源文件下面。
应用比较简单,就是变化LED,至于OSTimeDly(50)函数,可能初学者不是很理解,其实就是延时50个滴答。
我们在os_cfg.h文件中定义#define OS_TICKS_PER_SEC 100u,也就是每秒100个滴答,OSTimeDly(50)就是延时了0.5秒的意思。
Ⅷ、文件比较工具
对于前面几篇文章,可能有些人比较关注我们移植的过程中到底修改了那些文件,这里就给大家推荐一下“文件比较工具”,网上有很多相关的工具,可以自己搜索下载。也可以到我360云盘下载:
https://yunpan.cn/cBsYfRw3Iiut3 访问密码 7155
这里我们拿Beyond Compare为例,给大家看一下效果:
Ⅸ、说明
相关的文章可以到我博客上查看,我也会定期更新,新内容第一时间在微信分享。
当你掌握UCOS在一种平台上的移植,其他平台移植原理类似,请不要局限某一平台。
以上总结仅供参考,若有不对之处,敬请谅解。
Ⅹ、最后
更多精彩文章我讲第一时间在微信公众号里面分享。
如果你喜欢我分享的内容,你又想了解更多相关内容,请关注微信公众号“EmbeddDeveloper”,新内容持续更新中,后期将会有更多精彩内容出现。
UCOS2_STM32F1移植详细过程(四)的更多相关文章
- UCOS2_STM32F1移植详细过程
源:UCOS2_STM32F1移植详细过程(三) UCOS2_STM32移植过程.系统内核.事件描述(汇总)
- UCOS2_STM32F1移植详细过程(三)
Ⅰ.概述 上一篇文章是讲述ST芯片相关的配置和OS裁剪相关的配置,接着上一篇文章来讲述关于UCOS的移植,该文主要针对uC/OS-II Ports下面os_cpu_a.asm.os_cpu_c.c和o ...
- UCOS2_STM32F1移植详细过程(二)
Ⅰ.概述 打开上一篇文章新建的工程,是提取的ST标准库里面源代码文件和UCOS工程包源代码文件.下载过的朋友可能会知道,直接编译那个工程会有大片的错误和警告,原因在于那个工程是没有经过修改源代码的工程 ...
- UCOS2_STM32F1移植详细过程(一)
Ⅰ.概述 该文写针对初学µC/OS的朋友,基于以下平台来一步一步移植µC/OS嵌入式操作系统.UCOS移植相关平台: 系统平台:µC/OS-II (最新V2.92版) 硬件平台:STM32F1 ...
- UCOS2_STM32移植详细过程(汇总)
Ⅰ.概述 笔者发现一个问题,很多初学者,甚至很多工作一两年的人,他们有一种依赖的思想,就是希望从别处获取的软件代码不做任何修改,直接可以运行或者使用.笔者想说,实践才是检验真理的关键,实践才是掌握知识 ...
- android wifi驱动移植详细过程
转自:http://bbs.imp3.net/thread-10558924-1-1.html 对于刚入手android没多久的人来说,android wifi 驱动的移植确实还是有难度的,不过参考了 ...
- STM32F0xx_EXIT中断配置详细过程
Ⅰ.概述 EXIT外部中断在使用到按键或者开关控制等应用中比较常见,低功耗中断唤醒也是很常见的一种.因此,EXIT在实际项目开发中也是比较常见的一种. STM32F0中外部中断EXIT属于中断和事件的 ...
- STM32F0xx_ADC采集电压配置详细过程
前言 关于ADC这一块的功能基本上也算是CortexM芯片的标配了.ST的每一块芯片都有这个功能,只是说因型号不同,通道数.位数等有所不同.STM8的芯片大多数都是10的,也就是说分辨率可达到:参考电 ...
- 在浏览器中简单输入一个网址,解密其后发生的一切(http请求的详细过程)
在浏览器中简单输入一个网址,解密其后发生的一切(http请求的详细过程) 原文链接:http://www.360doc.com/content/14/1117/10/16948208_42571794 ...
随机推荐
- 海外支付:遍布全球的Paypal
海外支付:遍布全球的Paypal 吴剑 2015-11-26 原创文章,转载必需注明出处:http://www.cnblogs.com/wu-jian 吴剑 http://www.cnblogs.co ...
- Android Studio 实用插件整理
首先说一下安装方法: 上图片: 首先点击Android stuido 菜单 File->Settings 进入上图界面: 区域1:你当前已经安装了的插件 区域3:在线安装 区域2:其实和区域3是 ...
- 让执行程序引用特定目录下的Dll
当写一个软件,特别是大型的软件,经常会引用一些第三方的类库,再加上一些自己的项目,如果这些Dll全都放在主目录下的话,会显得比较杂乱.我们希望将项目的类库分类成文件夹存放,这样才显得比较整洁. 解决方 ...
- VS集成Qt环境搭建
环境:VS2010 + Qt5.2 关于VS的下载.安装,这里就不再做过多阐述. 一.下载Qt5.2安装包(qt-windows-opensource)与Qt插件(Visual Studio Add- ...
- nginx 代理配置文件实例
安装NGINX前要先安装PCRE正则表达式库: ./configure --prefix=/usr/local/pcre 出现以下错误 (一般./configure即可, 笔者这里是直接./conf ...
- PL/SQL中查询某的时间段内所有执行的sql
清空缓存,重新开始统计执行的SQL alter system flush shared_pool; 查询执行过的SQL select * from v$sql where parsing_schema ...
- vba 快速定位当前EXCEL最后一栏
工作的需要,有时会对EXCEL数据进行处理,比如格式化,有数据的单元格画横线. 最初,傻傻的,直接用个循环从第1行,一直往后找,判断是否为空,真傻. Function FindLastCell() D ...
- 【Linux】Linux字体颜色
转自:http://onlyzq.blog.51cto.com/1228/546459 echo显示带颜色,需要使用参数-e格式如下:echo -e "\033[字背景颜色;文字颜色m字符串 ...
- CSS 属性设置优先级问题
1.多个选择器可能会选择同一个元素,有3个规则,从上到下重要性降低: !important的用户样式 !important的作者样式 作者样式 用户样式 浏览器定义的样式 2. CSS规范为不同类型的 ...
- 【MVC】自定义ASP.NET MVC Html辅助方法
在ASP.NET MVC中,Html辅助方法给我们程序员带来很多方便,其重要性也就不言自明.有时候,我们不想重复地写一些HTML代码,或者MS没有提供我们想要的那个HTML标签的Html辅助方法,那么 ...