准备
1.F429工程模板(我用的是我平时的)
2.ucosiii源码,官网下载的
一,创建
根据个人习惯创建四个文件夹
APP:
CPU:
LIB:
PORTS:
好了,然后添加到工程。
二,时钟问题
首先修改工程的启动文件“ startup_stm32f10x_hd.s”。其中将 PendSV_Handler 和 SysTick_Handler 分 别 改 为OS_CPU_PendSVHandler 和 OS_CPU_SysTickHandler,共两处,因为 uCOS 官方已经给我们处理好对应的中断函数,就无需我们自己处理与系统相关的中断了,同时我们还需要将stm32f10x_it.c 文件中的 PendSV_Handler 和 SysTick_Handler 函数注释掉。
以上是野火的处理方式,我是:
os_cpu_a.s里所有的OS_CPU_PendSVHandler改成PendSV_Handler。
中断服务函数里要加
OSIntEnter();
OSTimeTick();
OSIntExit();
如:
//软件定时器和UCOS的系统定时用的都是SysTick,不知道会不会冲突,回头试一下
void SysTick_IRQHandle(void)
{
OSIntEnter();
SysTickCnt += SYS_TICK_TIME; //这个是我自己原始函数的定时器,不用管
OSTimeTick();
OSIntExit();
}
三,配置
3.1 FPU(浮点运算单元)
M4/M7 内核带有 FPU(浮点运算单元)的处理器,如果想要使用 FPU,要在启动文件中添加以下代码,处理器必须处于特权模式才能读取和写入 CPACR。
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
os_cfg.h 钩子函数开关,按需裁剪。
os_cfg_app.h 系统应用配置的头文件,系统默认的任务配置,如任务的优先级、堆栈大小等基本信息
四,到这就可以用了
没什么报错。。。都是些小问题,建了两个任务后能用了。。