3.4 修改os_cpu_a.asm
将原来的 RSEG CODE:CODE:NOROOT(2)
改成:
AREA |.text|, CODE, READONLY, ALIGN=2 ;AREA |.text| 选择段 |.text|。
;CODE表示代码段,READONLY表示只读(缺省)
;ALIGN=2表示4字节对齐。若ALIGN=n,这2^n对齐
THUMB ;Thumb 代码
REQUIRE8 ;指定当前文件要求堆栈八字节对齐
PRESERVE8 ;令指定当前文件保持堆栈八字节对齐
3.5 修改os_dbg.c
由于编译器不同,使用keil时,需要把
#define OS_COMPILER_OPT __root
改成:
#define OS_COMPILER_OPT //__root
3.6 修改启动文件startup_stm32f10x_hd.s
由于我们是使用STM32自带的启动文件,所以需要在这里面设置OS_CPU的嘀嗒定时器中断向量,
因此把PendSV_Handler全部换成OS_CPU_PendSVHandler,一共就三处需要更换的;
步骤4 编写通用的必要文件
4.1 编写includes.h
新建头文件,添加在user文件夹里,然后写入以下代码,所以用户的外设驱动头文件都应该被包含在这里面
#ifndef __INCLUDES_H
#define __INCLUDES_H
#include "stm32f10x.h"
#include "stm32f10x_rcc.h"
#include "uCOS_II.h"
#include "BSP.h" //与开发板相关的函数
#include "app.h"
#include "led.h"
#endif
4.2 编写外设驱动文件 BSP.c 及头文件BSP.h
BSP.c 至少应该包含两个函数
(1) void BSP_Init(void)
{
SystemInit(); /*stystem config as 72MHz*/
LED_GPIO_Config(); /*LED GPIO configuration */
}
(2) void SysTick_init(void)
{
SysTick_Config(SystemCoreClock/OS_TICKS_PER_SEC);
/*初始化并使能SysTick定时器*/
}
头文件BSP.h
#ifndef __BSP_H
#define __BSP_H
void SysTick_init(void);
void BSP_Init(void);
#endif
4.3 修改stm32f10x_it.c
(1)添加头文件:#include "includes.h";
(2)注释掉原来的头文件://#include "stm32f10x_it.h"
(3)在定时中断服务函数里加入以下代码:
void SysTick_Handler(void)
{
OSIntEnter();
OSTimeTick();
OSIntExit();
}
4.4 编写app_cfg.h 来设置任务优先级和堆栈大小
#ifndef __APP_CFG_H__
#define __APP_CFG_H__
/***************设置任务优先级******************/
#define STARTUP_TASK_PRIO 4
/**********设置栈大小(单位为OS_STK)************/
#define STARTUP_TASK_STK_SIZE 80
#endif
4.5 编写app.c 和app.h 创建用户任务
4.6 编写main.c 主函数
#include "includes.h"
static OS_STK startup_task_stk[STARTUP_TASK_STK_SIZE]; //定义栈
int main(void)
{
BSP_Init();
OSInit();
OSTaskCreate(Task_LED,(void*)0,
&startup_task_stk[STARTUP_TASK_STK_SIZE-1],STARTUP_TASK_PRIO);
OSStart();
return 0;
}
更详细的基于STM32的UC/OS移植,请看附件的野火教程。
345002072_353389109 2013-1-23 11:58
用户377235 2013-1-23 08:11
用户1672521 2013-1-9 13:39
345002072_353389109 2013-1-6 21:37
用户403664 2013-1-5 14:35