- 1、本文档共5页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
μC /OS II 在STM32 上移植笔记
杨四郎 QQ1041682343
1 关于如何学习STM32
基本学习资料 (可在网上搜索下载): 《STM32 参考手册》中文版V10.0 ,
《Cortex—M3 权威指南》中文版 (宋岩 译)。
要想学习操作系统在硬件上的移植先得把相关硬件学习好吧。关于 STM32
的裸机开发一般有两种方法:一是直接调用ST 提供的库函数的方法,这种方法
对于新手来说也许好用,做些简单实验很方便,但是无法深入理解STM32 硬件
结构及其配置,特别对于代码量大的情况一旦出错很难查找,代码冗余量比较大。
二是直接操作寄存器的方法,这种方法类似于51 单片机的做法,典型的代表是
刘军编著的 《例说 STM32》(北京航空航天大学出版社),这种方法是按需配置
相关寄存器,有种知其所以然的感觉,开发者心里相对踏实。
诚然,深入研究库函数的话也可以用得炉火纯青。用哪种方法按照自己喜好
和学习习惯而定。当然两种都会用更好了。
2 关于如何移植
基本学习资料:清华邵贝贝 《嵌入式实时操作系统μc/os II (第二版)》(北京
航空航天大学出版社),任哲 《嵌入式实时操作系统μc/os II 原理及应用 (第二
版)》(北京航空航天大学出版社),任哲的书讲得相对简便,可以快速上手,建
议初学者可以看这本,遇到问题再查邵贝贝老师那本书。
百度搜素 “μCOS- ii 在STM32 上的移植详解”(或者向我索取),出现的第
一条记录就是。我自己不再写出移植过程,而是推荐这篇文章是因为我觉得这篇
文章讲解得比较详细,一般人按照上面的移植步骤基本问题不大。在这里我就提
一下,按照上面的步骤初学者还可能犯的错误。一,该篇文章讲的是μCOSII
V2.86 版本,你现在从官网上 (/downloadcenter/要注册一下才
能下载)下载的版本已经是V3.xx 了,小有区别,注意一下就不会出错。二,在
“移植详解3 ”里面,os_cpu.h 中会看到“typedef unsigned int INT32U ”这一句,
不要以为在51 单片机里面unsigned int 是16 位的就以为这里有错。其实一个数
据类型是多少位主要取决于编译器。在 32 位的单片机或处理器中,编译器把
unsigned int 编译成32 位。三,在这篇文章的 “移植详解4 ”里面把 “os_cfg.h”
里面很多地方改成“#define xxxxxx 0 ”的形式是把一些功能去掉,建议初学者不
要做此步骤,因为你去掉之后有些地方用到了你编译就不通过,你很难找到错误
的原因。当然比较熟悉了,就应该用这种做法,去掉用不到的功能,减小内核大
小。
3 实例说明要注意的问题
/***直接操作寄存器的方法,正点原子MiNi STM32 开发板**/
#include sys.h
#include usart.h
#include delay.h
#include led.h
#include key.h
#include includes.h
//设置任务堆栈大小
#define LED_STK_SIZE 64
#define LED1_STK_SIZE 64
//设置任务优先级
#define LED_TASK_Prio 9
#define LED1_TASK_Prio 5
//任务堆栈
OS_STK TASK_LED1_STK[LED_STK_SIZE];
OS_STK TASK_LED_STK[LED_STK_SIZE];
//任务申明
void TaskLed(void *pdata);
void TaskLed1(void *pdata);
//系统时钟配置函数
void SysTick_Configuration(void);
int main(void)
{
文档评论(0)