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