把ucos移植到stm32后写的一个简单程序。编译时出错。已经包含了头文件stm32f10x_lib.h
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了把ucos移植到stm32后写的一个简单程序。编译时出错。已经包含了头文件stm32f10x_lib.h相关的知识,希望对你有一定的参考价值。
Build target 'uCOS286_STM32'
compiling stm32f10x_rcc.c...
compiling stm32f10x_flash.c...
compiling stm32f10x_gpio.c...
compiling stm32f10x_nvic.c...
compiling stm32f10x_systick.c...
compiling stm32f10x_wwdg.c...
compiling OS_CORE.c...
compiling OS_DBG_R.c...
compiling OS_FLAG.c...
compiling OS_MBOX.c...
compiling OS_MEM.c...
compiling OS_MUTEX.c...
compiling OS_Q.c...
compiling OS_SEM.c...
compiling OS_TASK.c...
compiling OS_TIME.c...
compiling OS_TMR.c...
compiling MAIN.c...
USER\MAIN.c(37): warning: #223-D: function"RCC_Configuration" declared implicitly
USER\MAIN.c: RCC_Configuration(); //配置系统时钟
USER\MAIN.c: ^
USER\MAIN.c(38): warning: #223-D: function"NVIC_Configuration" declared implicitly
USER\MAIN.c: NVIC_Configuration(); //配置中断
USER\MAIN.c: ^
USER\MAIN.c(41): error: #20: identifier"GPIO_InitStructure" is undefined
USER\MAIN.c: GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7;
USER\MAIN.c: ^
USER\MAIN.c: USER\MAIN.c: 2 warnings, 1error
compiling stm32f10x_it.c...
compiling stm32f10x_target.c...
compiling OS_CPU_C.c...
assembling OS_CPU_A.s...
assembling STM32F10x.s...
assembling cortexm3_macro.s...
compiling STM32_LCD1602.c...
Target not created
UCOS2_STM32F1移植详细过程
Ⅰ、概述
打开上一篇文章新建的工程,是提取的ST标准库里面源代码文件和UCOS工程包源代码文件。下载过的朋友可能会知道,直接编译那个工程会有大片的错误和警告,原因在于那个工程是没有经过修改源代码的工程,接下来就是讲述一步一步修改源代码的过程(也就是所谓的移植过程)。
该文接着上一篇文章来讲述“UCOS移植详细过程”,上一篇文章是讲述准备工作、文件提取并整理、新建UCOS工程等工作。该文讲述UCOS移植过程中修改源代码(底层代码、系统配置等)工作。
笔者将“UCOS移植详细过程”分为多篇文章来讲述,敬请关注。
关于本文的详情请往下看(微信请点击“阅读原文”查看内容链接内容)。
本着免费分享的原则,方便大家手机学习知识,定期在微信平台分享技术知识。如果你觉得分享的内容对你有用,又想了解更多相关的文章,请用微信搜索“EmbeddDeveloper” 或者扫描下面二维码、关注,将有更多精彩内容等着你。
Ⅱ、ST芯片配置
配置ST型号的方法有两种:使用标准库源代码配置和工程配置
1.源代码配置
打开工程 -> 打开源代码“stm32f10x.h”文件。
使用F103大容量的芯片:取消第68行STM32F10X_MD的注释,这里需要和我们的启动代码匹配startup_stm32f10x_hd.s。
使用标准外设库:取消第105行USE_STDPERIPH_DRIVER的注释,使用标准外设库,我们使用stm32f10x_conf.h文件来配置使用到的外设库。
2.工程配置
打开工程 -> Project -> Options for Target -> C/C++,在该选项预定义里面添加STM32F10X_MD,USE_STDPERIPH_DRIVER这两个宏定义即可。
注意:两种方法用一种即可。效果图如下:
Ⅲ、配置系统滴答时钟
系统的运行离不开系统滴答,就像我前面说过的:系统滴答的作用,就是驱动整个系统工作的心脏,如果没有了它,就等于人没有了心跳。
1.初始化滴答
我们使用ST的滴答SysTick来配置作为操作系统的滴答时钟,芯片SysTick是属于内核(Cortex-M3)的一部分,所以,在初始化的时候是调用CM3里面的源代码(SysTick_Config函数)。
这里说明一下,只要使用Cortex-M3内核的芯片都有这个功能,可以说SysTick是专门为系统而设计的。
系统滴答配置如上图,位于app_cfg.c源文件下面。
2.滴答中断配置
中断函数需要调用系统相关的函数,也就是系统进行滴答相关的函数,这里是规定这么调用的。
Ⅳ、裁剪系统(配置os_cfg.h)
对于我们常说的系统可裁剪,其实就是对系统某些功能打开和关闭,使用到的功能才打开,不使用的功能就关闭(即使能和失能),这个文件就集中在os_cfg.h文件里面。
这里先说一下重要的几个选项:
1.最低优先级OS_LOWEST_PRIO
这个与我们配置任务优先级有关系,最低优先级任务配置的最大值。我们所说的任务优先级关系是:优先级越小,数值越大; 相反,优先级越大,数值越小。
位于os_cfg.h文件第39行:
#define OS_LOWEST_PRIO 63
2.系统每秒滴答数OS_TICKS_PER_SEC
这个宏定义的意思就是说,系统每秒钟滴答多少次,它与系统延时(OSTimeDly)关系比较重要,我们的例子中OS_TICKS_PER_SEC等于100,调用OSTimeDly(100);相当于的延时100个滴答,即延时1秒的意思。
位于os_cfg.h文件第51行:
#define OS_TICKS_PER_SEC 100
3.任务堆栈大小OS_TASK_xxx_STK_SIZE
这个几个宏定义在使用相应功能的时候有用,如果RAM资源有限,这个任务堆栈的大小最好根据任务来评估一下,资源有限时不要太大,当然也不能小于程序正常运行。
位于os_cfg.h文件第55 - 57行:
#define OS_TASK_TMR_STK_SIZE 128
#define OS_TASK_STAT_STK_SIZE 128
#define OS_TASK_IDLE_STK_SIZE 128
4.其他
还有很多与系统其他资源相关的配置,正常的情况下是需要的时候才开启,不用尽量关闭。一是节约资源,二是减少编译时间。后期我会将中文注释在后面。
Ⅴ、下载
我将移植完成,建立了3个简单任务的例程放在360云盘供大家下载与参考:
https://yunpan.cn/cRIpR5bwHMCCY 访问密码 3885
UCOS2基于STM32F107的软件工程包(官网原版):
Micrium官网下载地址(需要账号):
https://www.micrium.com/download/micrium_stm32f107_ucos-ii
我360云盘下载地址:
https://yunpan.cn/cRzcf8eSacEhE 访问密码 1235
标准外设库:
ST官网下载地址(需要账号):
我360云盘下载地址(定期更新):
https://yunpan.cn/cSaCpGejMSfr8 访问密码 60ae
Ⅵ、说明
相关的文章可以到我博客上查看,我也会定期更新,新内容第一时间在微信分享。
当你掌握UCOS在一种平台上的移植,其他平台移植原理类似,请不要局限某一平台。
以上总结仅供参考,若有不对之处,敬请谅解。
Ⅶ、最后
关注微信,回复“更多内容”,将获得更多内容(如:UCOS实例等,不断更新中......)。
如果你喜欢我分享的内容,你又想了解更多相关内容,请关注文章开头的微信公众号,新内容持续更新中,后期将会有更多精彩内容出现。
以上是关于把ucos移植到stm32后写的一个简单程序。编译时出错。已经包含了头文件stm32f10x_lib.h的主要内容,如果未能解决你的问题,请参考以下文章