ucos基于stm32上的移植.docx
《ucos基于stm32上的移植.docx》由会员分享,可在线阅读,更多相关《ucos基于stm32上的移植.docx(11页珍藏版)》请在冰豆网上搜索。
![ucos基于stm32上的移植.docx](https://file1.bdocx.com/fileroot1/2022-11/16/974a5664-14bb-45aa-b31a-821ef22cc30a/974a5664-14bb-45aa-b31a-821ef22cc30a1.gif)
ucos基于stm32上的移植
ucos-ii和ucgui基于stm32上的移植
uc/os-ii移植笔记
os_cpu.h
与编译器相关的数据类型
typedef unsigned char BOOLEAN;
typedef unsigned char INT8U; /* Unsigned 8 bit quantity */
typedef signed char INT8S; /* Signed 8 bit quantity */
typedef unsigned short INT16U; /* Unsigned 16 bit quantity */
typedef signed short INT16S; /* Signed 16 bit quantity */
typedef unsigned int INT32U; /* Unsigned 32 bit quantity */
typedef signed int INT32S; /* Signed 32 bit quantity */
typedef float FP32; /* Single precision floating point*/
typedef double FP64; /* Double precision floating point */
typedef unsigned int OS_STK; /* 堆栈类型为32位 Each stack entry is 32-bit wide */
typedef unsigned int OS_CPU_SR; /* Define size of CPU status register (PSR = 32 bits) */
与ARM 处理器相关的代码
#define OS_CRITICAL_METHOD 3 //进入临界段的方法
#if OS_CRITICAL_METHOD == 3
#define OS_ENTER_CRITICAL() {cpu_sr = OS_CPU_SR_Save();}//关中断
#define OS_EXIT_CRITICAL() {OS_CPU_SR_Restore(cpu_sr);}//开中断
#endif
#if OS_CRITICAL_METHOD == 3
OS_CPU_SR OS_CPU_SR_Save(void);
void OS_CPU_SR_Restore(OS_CPU_SR cpu_sr);
#endif
void OSCtxSw(void);
void OSIntCtxSw(void);
void OSStartHighRdy(void);
设置堆栈的增长方向
#define OS_STK_GROWTH 1 /*堆栈由高地址向低地址增长*/
OS_CPU_C.C
用C 语言编写六个操作系统相关的函数
OS_STK *OSTaskStkInit (void (*task)(void *p_arg),
void *p_arg,
OS_STK *ptos,
INT16U opt)
{
OS_STK *stk;
(void)opt; /* 'opt' is not used, prevent warning */
stk = ptos; /* Load stack pointer */
/* Registers stacked as if auto-saved on exception */
*(stk) = (INT32U)0x01000000L; /* xPSR */
*(--stk) = (INT32U)task; /* Entry Point */
*(--stk) = (INT32U)0xFFFFFFFEL; /* R14 (LR) (init value will cause fault if ever used)*/
*(--stk) = (INT32U)0x12121212L; /* R12 */
*(--stk) = (INT32U)0x03030303L; /* R3 */
*(--stk) = (INT32U)0x02020202L; /* R2 */
*(--stk) = (INT32U)0x01010101L; /* R1 */
*(--stk) = (INT32U)p_arg; /* R0 :
argument */
/* Remaining registers saved on process stack */
*(--stk) = (INT32U)0x11111111L; /* R11 */
*(--stk) = (INT32U)0x10101010L; /* R10 */
*(--stk) = (INT32U)0x09090909L; /* R9 */
*(--stk) = (INT32U)0x08080808L; /* R8 */
*(--stk) = (INT32U)0x07070707L; /* R7 */
*(--stk) = (INT32U)0x06060606L; /* R6 */
*(--stk) = (INT32U)0x05050505L; /* R5 */
*(--stk) = (INT32U)0x04040404L; /* R4 */
return (stk);
}
void OSTaskCreateHook (OS_TCB *ptcb) {ptcb=ptcb;//防止编译时出现警告 }
void OSTaskDelHook (OS_TCB *ptcb) { ptcb=ptcb;//防止编译时出现警告 }
void OSTaskSwHook (void)
void OSTaskStatHook (void)
void OSTimeTickHook (void)
后5 个函数为钩子函数,可以不加代码。
OS_CPU_A.ASM
用汇编语言编写四个与处理器相关的函数
;// 引用外部变量的声明
EXTERN OSRunning
EXTERN OSPrioCur
EXTERN OSPrioHighRdy
EXTERN OSTCBCur
EXTERN OSTCBHighRdy
EXTERN OSIntNesting
EXTERN OSTaskSwHook
EXTERN OSRdyGrp
EXTERN OSRdyTbl
EXTERN OSPrioHighRdy
;// 外部可以调用的函数
PUBLIC OS_CPU_SR_Save
PUBLIC OS_CPU_SR_Restore
PUBLIC OSStartHighRdy
PUBLIC OSCtxSw
PUBLIC OSIntCtxSw;//以上5个函数在os_cpu_c.c文件下有声明
PUBLIC PendSVC ;//此函数在stm3210x_it.c stm32f10x_it.h stm32f10x_vector.c文件下有声明
;//***********************************************************************************************
;// PendSV 所使用的几个寄存器
;//***********************************************************************************************
NVIC_INT_CTRL EQU 0xE000ED04 ;// 中断控制及状态寄存器
NVIC_SYSPRI14 EQU 0xE000ED22