uC/OS-III 移植 STM32F429

OS-III 是一个RTOS系统,移植相对来说并不是特别复杂。此外官方也做了主流芯片的例程。
本篇就不对OS做过多解释,讲解如何移植:

  • 下载OS-III文件
  • 准备STM32F429库工程
  • 移植

注:移植是在STM32F429工程基础之上,详情请查看创建库工程

1.OS-III文件结构

可以在官方网站micrium ST 专栏下载对应的工程文件


简单介绍OS-III的文件结构:

  1. 配置文件:通过定义配置文件中的define参数来裁剪OS-III的功能
  2. 用户应用文件,定义和声明任务
  3. 内核服务文件,这部分代码与CPU无关,可以不做任何修改移植
  4. 底层函数库,包括基本的算术运算,字符串操作等
  5. CPU移植文件,移植需要修改这部分代码
  6. CPU配置文件,主要是CPU的一些工作模式和服务函数
  7. 其他CPU相关文件

官方下载的Micrium_STM32F429II-SK_OS3工程文件,其中包括两个文件夹:

  • Examples : 提供IAR,Keil,STUDIO不同开发环境的工程实例,其中BSP文件夹提供的是外设相关代码,OS文件夹主要是上面提到的配置文件和用户应用文件
  • Software : 其中包括uC-CPU uC-LIB uCOS-III,分别是CPU配置文件相关,底层函数库,内核服务文件。其中每个文件夹又包含IAR GNU RealView,这个是三个不同平台的编译链,我们只需要其中的RealView

总结一下,对应Software文件夹,基本丢弃IAR GNU即可使用了。但对于Examples我们选择适当的文件移植并修改,一个是BSP板极相关,一个是OS系统配置文件和用户文件。

2.OS-III文件移植

1.使用创建库工程中的Template工程为基础,将工程名字改为T-OS3,并删除User文件中的main.c文件,添加如下目录:


其中每个文件来源:

  • APP : 从Micrium_STM32F429II-SK_OS3\Micrium\Examples\ST\STM32F429II-SK\OS3下拷贝过来
  • BSP : 从Micrium_STM32F429II-SK_OS3\Micrium\Examples\ST\STM32F429II-SK\BSP下拷贝过来,但是handler.c文件是自己创建,具体原因后面会提到
  • uC-CPU : 拷贝官方源文件并删除其中的IAR GNU 文件夹
  • uC-LIB : 拷贝官方源文件并删除其中的IAR GNU 文件夹
  • uCOS-III : 拷贝官方源文件并删除其中的IAR GNU 文件夹

2.打开 T-OS3 Keil工程,删除main.c文件,同时创建如下文件目录:


通过Manage Project Items导入相应文件:


其实只需要导入.c文件就可以,但是为了将来方便查看,也同时导入了.h.asm文件。其中uCOS-III文件太多,分了两部分,不分开也可以。

3.添加.h路径:


到此,文件基本已经移植完成,但是编译无法通过,所以我们要做相应的修改。

3.OS-III文件修改

在官方提供的案例中,主要做了如下内容:

  1. 修改STM32F429的启动文件,最大的改动是从新定义了中断向量表。并将中断函数写在了用户应用层,并创建一个中断函数表,调用中断前,需要注册相应的中断函数。通过查询中断函数表处理相应的中断。具体内容请查看Micrium_STM32F429II-SK_OS3\Micrium\Examples\ST\STM32F429II-SK\BSP文件夹下得bsp_int.c
  2. 将系统的时钟频率,锁相环等设置在板极层从新定义了
  3. 提供了LED外设例程
  4. 提供了浮点处理例程
  5. 提供如何创建任务
  6. 从新配置了外设时钟,需要注册打开和关闭,查看bsp_periph.c文件

要裁剪出一个简单干净的系统,我们需要如下步骤:

1.抛弃官方提供的启动文件,使用STM32提供的启动文件,修改启动文件startup_stm32f429_439xx.s中的PendSV_HandlerSysTick_Handler,变为OS_CPU_PendSVHandlerOS_CPU_SysTickHandler:



2.删除系统的时钟频率,锁相环等设置,即删除工程文件bsp.c文件中BSP_Init()函数内容:

3.删除和LED相关的内容,即删除bsp.c文件中以BSP_LED_XX()开头的所有函数和声明。
4.添加浮点处理,在startup_stm32f429_439xx.s中添加如下代码:

IF {FPU} != "SoftVFP"
                                ; Enable Floating Point Support at reset for FPU
LDR.W   R0, =0xE000ED88         ; Load address of CPACR register
LDR     R1, [R0]                ; Read value at CPACR
ORR     R1,  R1, #(0xF <<20)    ; Set bits 20-23 to enable CP10 and CP11 coprocessors
                                ; Write back the modified CPACR value
STR     R1, [R0]                ; Wait for store to complete
DSB
                
                                ; Disable automatic FP register content
                                ; Disable lazy context switch
LDR.W   R0, =0xE000EF34         ; Load address to FPCCR register
LDR     R1, [R0]
AND     R1,  R1, #(0x3FFFFFFF)  ; Clear the LSPEN and ASPEN bits
STR     R1, [R0]
ISB                             ; Reset pipeline now the FPU is enabled
ENDIF


5.删除例程任务,将app.c文件内容修改如下,其他内容全部删除:


6.删除官方中断,外设等内容,将bsp.h保留一下内容,其他全部删除:

7.编译一下应该没有错误。如果有错误,找出相应的错误即可。移植过程中也可以编译,但是提示的错误会很多。所有需要很强的心理素质,才能处理好,哈哈哈。

8.添加中断处理函数,其实中断处理函数在startup_stm32f429_439xx.s中定义过了,我们只需要重定义就可以了,修改handler.c文件,添加了中断重定向模板:

9.最后给系统添加时间片轮回功能,因为我们在app.c文件中添加了如下代码:

#if OS_CFG_SCHED_ROUND_ROBIN_EN > 0u          /* Enable the Round-Robin scheduling */
    OSSchedRoundRobinCfg((CPU_BOOLEAN   )DEF_ENABLED,
                         (OS_TICK       )0,
                         (OS_ERR       *)&err );
#endif

所有在os_cfg.h中将OS_CFG_SCHED_ROUND_ROBIN_EN设置为1即可:


os_cfg.h文件主要是配置OS-III的功能,起到剪裁作用。

文件下载

T-OS3文件下载(基于库版本 v1.7.1,OS v3.04.04)

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,793评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,567评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,342评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,825评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,814评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,680评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,033评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,687评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,175评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,668评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,775评论 1 332
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,419评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,020评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,978评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,206评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,092评论 2 351
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,510评论 2 343

推荐阅读更多精彩内容

  • 实验环境为Window10 + Keil 5.18,代码中使用标准库。 实验准备 本次实验硬件上需要七段数码管LG...
    lmzqwer2阅读 2,163评论 6 7
  • 1:InputChannel提供函数创建底层的Pipe对象 2: 1)客户端需要新建窗口 2)new ViewRo...
    自由人是工程师阅读 5,246评论 0 18
  • 第一章 Nginx简介 Nginx是什么 没有听过Nginx?那么一定听过它的“同行”Apache吧!Ngi...
    JokerW阅读 32,636评论 24 1,002
  • 腊八小寒今日全, 已入三九未觉寒。 雪花飘落贴地化, 雾霾聚散似浓烟。 诗人有梦无灵感, 骚客多愁盼冬眠。 待到春...
    云逐山阅读 294评论 0 1
  • 如果我也邮寄一封信到查令十字街84号,那么Mr. Thomas又会帮我转交给谁呢 ?
    搜泼码阅读 175评论 0 0