打印
[Kinetis]

【Kinetis实验】+ UCOS系统移植__基础LED闪烁(上传源代码)

[复制链接]
3328|11
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
qq4988|  楼主 | 2014-9-10 08:41 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 qq4988 于 2014-9-17 16:03 编辑

昨天晚上移植了UCOS II系统到开发板上,实现小灯的闪烁,

在FSL K20DX128VLL7\GPIO++++例程的基础上完成的

【Kinetis实验】+ UCOS系统移植——LED闪烁

把工程文件放上
MK20UCOS例程.rar (776.28 KB)

移植过程整理:

uC/OS-II
The Real-Time Kernel
移植最重要的几个地方:

os_cpu_c.c
/******************/
void OSTestSysTickInit(uint8_t SysClk)
{
          SysTick->CTRL=0xFFFFFFFF;        
     SysTick->LOAD=SysClk*1000*(1000/OS_TICKS_PER_SEC);
     SysTick->VAL =0x00;           //清空计数器
     SysTick->CTRL=0xFFFFFFFF;                  //开始倒数  
}
/*********************************/
OS_STK *OSTaskStkInit函数

*(stk)    = (INT32U)0x01000000uL;            /* xPSR                                               */
    *(--stk)  = (INT32U)task;                    /* Entry Point                                        */
    *(--stk)  = (INT32U)OS_TaskReturn;           /* R14 (LR)                                           */
    *(--stk)  = (INT32U)0x12121212uL;            /* R12                                                */
    *(--stk)  = (INT32U)0x03030303uL;            /* R3                                                 */
    *(--stk)  = (INT32U)0x02020202uL;            /* R2                                                 */
    *(--stk)  = (INT32U)0x01010101uL;            /* R1                                                 */
    *(--stk)  = (INT32U)p_arg;                   /* R0 : argument                                      */

                                                 /* Remaining registers saved on process stack         */
    *(--stk)  = (INT32U)0x11111111uL;            /* R11                                                */
    *(--stk)  = (INT32U)0x10101010uL;            /* R10                                                */
    *(--stk)  = (INT32U)0x09090909uL;            /* R9                                                 */
    *(--stk)  = (INT32U)0x08080808uL;            /* R8                                                 */
    *(--stk)  = (INT32U)0x07070707uL;            /* R7                                                 */
    *(--stk)  = (INT32U)0x06060606uL;            /* R6                                                 */
    *(--stk)  = (INT32U)0x05050505uL;            /* R5                                                 */
    *(--stk)  = (INT32U)0x04040404uL;            /* R4                                                 */



os_cpu_a.asm
/**************************************************/
;********************************************************************************************************
;                                          PUBLIC FUNCTIONS
;********************************************************************************************************

    EXTERN  OSRunning                                           ; External references
    EXTERN  OSPrioCur
    EXTERN  OSPrioHighRdy
    EXTERN  OSTCBCur
    EXTERN  OSTCBHighRdy
    EXTERN  OSIntExit
    EXTERN  OSTaskSwHook
    EXTERN  OS_CPU_ExceptStkBase

    EXPORT  OS_CPU_SR_Save                                      ; Functions declared in this file
    EXPORT  OS_CPU_SR_Restore
    EXPORT  OSStartHighRdy   
    EXPORT  OSCtxSw
    EXPORT  OSIntCtxSw
    EXPORT  PendSV_Handler


/************************************************/
OSStartHighRdy
    LDR     R0, =NVIC_SYSPRI14                                  ; Set the PendSV exception priority
    LDR     R1, =NVIC_PENDSV_PRI
    STRB    R1, [R0]

    MOVS    R0, #0                                              ; Set the PSP to 0 for initial context switch call
    MSR     PSP, R0

    LDR     R0, =OS_CPU_ExceptStkBase                           ; Initialize the MSP to the OS_CPU_ExceptStkBase
    LDR     R1, [R0]
    MSR     MSP, R1   

    LDR     R0, =OSRunning                                      ; OSRunning = TRUE
    MOVS    R1, #1
    STRB    R1, [R0]

    LDR     R0, =NVIC_INT_CTRL                                  ; Trigger the PendSV exception (causes context switch)
    LDR     R1, =NVIC_PENDSVSET
    STR     R1, [R0]

    CPSIE   I                                                   ; Enable interrupts at processor level

OSStartHang
    B       OSStartHang                                         ; Should never get here              


/********************************************************************/

OSCtxSw
    LDR     R0, =NVIC_INT_CTRL                                  ; Trigger the PendSV exception (causes context switch)
    LDR     R1, =NVIC_PENDSVSET
    STR     R1, [R0]
    BX      LR






                                                                          
































相关帖子

沙发
lanseshuijing| | 2014-9-10 08:44 | 只看该作者
继续努力

使用特权

评论回复
板凳
ar_m_cu| | 2014-9-10 09:34 | 只看该作者
终于看到有人在KK20上移植ucosii了

使用特权

评论回复
地板
capoet| | 2014-9-10 09:47 | 只看该作者
兄弟啊 分享一下啊  光看效果 不解馋啊

使用特权

评论回复
5
偏爱番茄酱| | 2014-9-10 09:53 | 只看该作者

使用特权

评论回复
6
偏爱番茄酱| | 2014-9-10 09:55 | 只看该作者
更详细,更全面,大赛讨论群 322230423

使用特权

评论回复
7
qq4988|  楼主 | 2014-9-10 10:06 | 只看该作者
偏爱番茄酱 发表于 2014-9-10 09:55
更详细,更全面,大赛讨论群 322230423

可以加入  飞思卡尔单片机研发 373181369  一起讨论

使用特权

评论回复
8
偏爱番茄酱| | 2014-9-10 10:42 | 只看该作者
好的

使用特权

评论回复
9
qq4988|  楼主 | 2014-9-15 14:16 | 只看该作者
本帖最后由 qq4988 于 2014-9-16 15:59 编辑

把代码文件传上

使用特权

评论回复
10
qq4988|  楼主 | 2014-9-16 15:59 | 只看该作者
代码文件,可以参考,最基础的移植代码

使用特权

评论回复
11
小小暖暖2| | 2014-9-19 11:02 | 只看该作者
有源码,谢谢楼主分享啊

使用特权

评论回复
12
茫茫大士| | 2014-9-19 18:11 | 只看该作者
开源可贵

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

56

主题

781

帖子

5

粉丝