ucos基于stm32上的移植.docx

上传人:b****3 文档编号:2946844 上传时间:2022-11-16 格式:DOCX 页数:11 大小:19.72KB
下载 相关 举报
ucos基于stm32上的移植.docx_第1页
第1页 / 共11页
ucos基于stm32上的移植.docx_第2页
第2页 / 共11页
ucos基于stm32上的移植.docx_第3页
第3页 / 共11页
ucos基于stm32上的移植.docx_第4页
第4页 / 共11页
ucos基于stm32上的移植.docx_第5页
第5页 / 共11页
点击查看更多>>
下载资源
资源描述

ucos基于stm32上的移植.docx

《ucos基于stm32上的移植.docx》由会员分享,可在线阅读,更多相关《ucos基于stm32上的移植.docx(11页珍藏版)》请在冰豆网上搜索。

ucos基于stm32上的移植.docx

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        

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 法律文书 > 调解书

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1