T 库、基于 ST 学习板的示例程序、相应的说明。
看了若干资料,觉得最有价值莫过于从官网上下载的手册: AN1018 :C/OSIIandtheARMCortex‐M3Processors 特别是其中的这张图: 第 5 页 共 19 页uCOS 学习随笔 StepbyStep‐1 Project:fira‐mirosot‐robot 对照 ReadMe 文件中的目录说明: 第 6 页 共 19 页 uCOS 学习随笔 StepbyStep‐1 Project:fira‐mirosot‐robot 、 结合“程序关系图”“目录文件说明”,浏览一下相关内容,那张“程序关系图”最好能映射在脑中,对理解、构建程序极为有益! 通过浏览,在脑中形成一个 uCOS 实现的框架,此时不必了解细节。
再把示例程序在 IDE 中打开编译、运行看看,因为我没有 ST 的学习板,就以奋斗 STM32板的示例为参考。
这一步主要是为了验证 IDE 环境是否正确,因为示例的工程是正确的,如果此时有问题应出在 IDE 环境安装环节。
如果开始就建立自己的工程,出现障碍则无法判断。
这次看这些文件似乎有些感觉,不知道是不是那些似懂非懂的阅读从量变到质变了。
不过回想学计算机的经历,似乎每次学习新的东西都要有个“从混沌的积累到顿悟”的过程,或许这就是计算机知识的特征:每个概念都建立在一大堆概念之上,而且都是多因素网状关联,需要同时“拥有”才能得到“答案”。
5.2 动手实施 示例程序还是比较 , 以 “复杂” 因为它需要演示板上所有的功能。
STM3210B‐EVAL 为例,它上面有 LCD、按钮、JoyStick、M25Flash 等外设,还支持了串口调试工具 uC/Probe。
第一步我要的是一个“干净”的模板,只需要驱动一个 LED,即一个 IO 口,因为这几乎是所有系统都会设计的。
通过这个模板,我希望理解 uCOS 下的程序是如何工作的。
至于调试用的 uC/Probe,相对于这一步所具备的水平,属于“奢侈品”,暂时还无法享用,所以暂不考虑,等日后程序功能多了,编程自如了,再“锦上添花”。
第一步:构建程序目录 首先根据自己的需要构建一个目录。
第 7 页 共 19 页 uCOS 学习随笔 StepbyStep‐1 Project:fira‐mirosot‐robot 因为我希望分步实现目标,将每一步都保留,而不是做完后只剩最后一步的内容,这样别人参考就比较容易,不会像 uCOS 附带的示例程序,内容太多,难以消化。
但不希望每一步的目录中都包含 ST 和 uCOS 的库文件,这样一是文件太大,二是如果库文件要升级会很麻烦。
为此,构建了以下目录结构: COMMON 目录是基本不用修改的,其中内容来自: ..MicriumSoftwareCPUSTSTM32 STM32LIB ..MicriumSoftwareuC‐CPU uC‐CPU ..MicriumSoftwareuC‐LIB uC‐LIB .. MicriumSoftwareuCOS‐II uCOS‐II .. MicriumSoftwareuC‐Probe uC‐Probe 虽然这一步不用 uC/Probe,但日后考虑会使用,故保留。
感到遗憾的是 Micrium 程序包中所附的 ST 库是 2.0 版的,本来打算自己更换为 3.0 版,但发现有些困难,初学乍练,不敢造次,就放弃了,留待日后升级吧。
学习目录目前只有 StepByStep‐1 一个,分为三个子目录: asp —— 用于存放应用程序,就是实现功能的程序。
工程文件在这个目录中。
bsp —— 用于存放相应的硬件驱动程序,用到什么添加什么。
out —— 存放所有编译、链接产生的文件,交流时这个目录内容可以不拷贝。
这样每做一步都建立一个目录,逐步丰富内容。
第 8 页 共 19 页 uCOS 学习随笔 StepbyStep‐1 Project:fira‐mirosot‐robot asp、bsp 目录中的文件均以上述“uCOS 程序关系图”中所描述的文件为基础。
第二步:构建自己的 bsp 文件 我参考的是这个目录: .. MicriumSoftwareEvalBoardsSTSTM3210B‐EVALRVMDKBSP 它包含以下文件: 我不用 LCD,所以去掉,bsp 文件如下: 注意:除删除了三个与 LCD 显示相关的文件外,bsp.h 和 bsp.c 也作了相应修改,主要是删除了不用的外设初始化和驱动程序,只保留了必须的驱动(详见程序清单)。
bsp_int.c 和中断初始化相关,因第一步不涉及中断,故暂不处理。
Bsp_periph.c 初始化各外设的时钟,因未吃透,也暂不处理。
Init.s 是启动代码,程序复位后的入口,因第一步无特殊要求,也没有能力变出花样,不去碰它。
两个 SCAT 文件是程序装载时的定位文件,STM32 在这上面有不少花样,可以将指定程序加载到指定位置等,未来如果要实现小车远程程序下载或许会用到,此时还一知半解。
第 9 页 共 19 页 uCOS 学习随笔 StepbyStep‐1 Project:fira‐mirosot‐robot 按我的理解: STM32_Flash.scat 文件是为了编译生成 FLASH 中运行的程序用的,STM32_RAM.scat 应该是编译生成 RAM 中运行的程序用的。
刚从 51 上来,对在 RAM 中运行还不熟悉,故建立工程时用的是 FLASH 方式。
这个目录会随着外设的不断起用而丰富起来。
第三步:构建自己的应用程序 因为原来 STM3210B‐Eval 板就有 LED 显示功能,而且是 4 个,我所做的就是删除所有不用的功能,将 4 个 LED 驱动改为一个即可。
(注意:是删除,不是注释掉) 删除后的 app 相当“单纯”: 第 10 页 共 19 页 uCOS 学习随笔 StepbyStep‐1 Project:fira‐mirosot‐robot APP 目录下有如下文件: 其中 app_cfg.h 也很“单纯”: 只有一个任务,确定其优先级和所用栈尺寸即可。
includes.h 里面有许多是系统需要的头文件,还没有吃透,暂不处理。
os_cfg.h 是 uCOSII 的配置文件,日后需要裁减系统时再琢磨,第一步不去惹它,以免系统罢工。
stm32f10x_conf.h 是 STM32 的配置文件,不启用的外设就注释掉,此处不用删除,因为恢复时太麻烦。
第一步应用部分只使用了一个 IO 口:PA3,所以从应用角度只需要打开 GPIO、GPIOA,但 AFIO 似乎系统用了,去掉后系统编译出错,只能保留。
按我的理解,一些基础的功能系统应该需要,如中断、时钟、定时器等,没想到可以将SysTick 及所有 TIM 注释掉,不清楚系统是如何产生定时任务切换的,如果要深入系统,这就是一个值得探讨的点。
(具体保留了那些外设详见程序) vectors.s 中定义了 STM32 所有外设的中断向量,似乎没有必要去碰它。
至此,第一步所需要的源文件已经完成,下面要拿出来“遛遛”了。
第 11 页 共 19 页 uCOS 学习随笔 StepbyStep‐1 Project:fira‐mirosot‐robot 第四步:在 MDK 中构建工程 我所使用的是 MDK3.5 版本。
构建过程如下: 1)在 Project 菜单中选择“NewuVisionProject”,创建一个新工程,放在 app 目录下;我所创建的工程文件名是: YM4‐STM32‐Step1.Uv2 2)在 Project 菜单中选择“manage”,为工程设置工程目标名、文件组,并在每个文件组中添加对应的文件: 因为编译产生的文件是在 Flash 上运行的,所以目标名用“Flash”,我觉得这个纯粹是为了便于记忆、理解。
文件组是参考示例程序及自己的理解确定的。
确定组后,添加相应的文件,包括 C、S、asm(汇编)程序,asp、bsp 组的文件来自对应的目录。
其它都是系统文件,具体如下: STM32‐LIB 文件添加自:(注:我是根据 STM32f10x‐conf.h 确定要添加的文件的) uCOS‐StepbyStepCOMMONSTM32LIBsrc 第 12 页 共 19 页 uCOS 学习随笔 StepbyStep‐1 Project:fira‐mirosot‐robot uC‐CPU 文件添加自: uCOS‐StepbyStepCOMMONuC‐CPUARM‐Cortex‐M3RealView uC‐LIB 文件添加自:(注:因第一步未用,故没有添加文件) uCOS‐StepbyStepCOMMONuC‐LIB uCOS‐StepbyStepCOMMONuC‐LIBPortsARM‐Cortex‐M3RealView uCOSII 文件添加自: uC
上一篇:
【精品】天津理工大学软件学院UML复习
下一篇:
美国emba教育概况及其借鉴意义