打印

uCOS-II V2.92移植到Cortex-M4上面

[复制链接]
7096|15
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
      想把uCOS-II V2.92移植到Cortex-M4上面,令我惊奇的是,M3的程序直接拿到M4上面就可以用,我用的是KeilMDK V4.23,硬件是STM32的stm32f4discovery开发套件。需要注意的只有一点,不要选择使用FPU,就没有问题了,如果选的话老是进入硬件异常中断。把官方的移植在飞思卡尔K60上的
移植程序,和我的移植程序都贴上来。

QQ截图20120209114507.GIF (24.86 KB )

QQ截图20120209114507.GIF
沙发
Eric2013|  楼主 | 2012-2-9 13:17 | 只看该作者
附件怎么没有添加上呀 想要的留 邮箱吧

使用特权

评论回复
板凳
i55| | 2012-2-9 13:25 | 只看该作者
去官网下K60的port,直接就能在STM32F4上面跑。

使用特权

评论回复
地板
Eric2013|  楼主 | 2012-2-9 13:38 | 只看该作者
3# i55
能帮我解决下这个帖子里面的问题不 谢谢你了
https://bbs.21ic.com/frame.php?frameon=yes&referer=http%3A//bbs.21ic.com/icnewest.html

使用特权

评论回复
5
wangzhihai1986| | 2012-8-15 17:19 | 只看该作者
可是开FPU就不行了,关键不同就是这。

使用特权

评论回复
6
gxgclg| | 2012-8-15 17:54 | 只看该作者
附件怎么没有添加上呀 想要的留 邮箱吧
Eric2013 发表于 2012-2-9 13:17

方法估计没对,再传的试试,下载会方便很多

使用特权

评论回复
7
秋天落叶| | 2012-8-15 18:04 | 只看该作者
LZ能把程序共享出来就更好了

使用特权

评论回复
8
bwsz.1| | 2013-6-6 11:11 | 只看该作者
这个 stone xiong 帖子的回复里有说 解决开FPU进硬件出错中断 哈哈 我试过了 可以用 由于不能贴地址 我直接贴代码了 呵呵 就改这3个地方
  OSPendSV
    CPSID   I                                                   ; Prevent interruption during context switch
    MRS     R0, PSP                                             ; PSP is process stack pointer
    CBZ     R0, OSPendSV_nosave                                 ; Skip register save the first time


    SUB     R0, R0, #0x20                                       ; Save remaining regs r4-11 on process stack
    STM     R0, {R4-R11}
    SUB     R0, R0, #0X40
    VSTM    R0, {D8-D15}

    LDR     R1, =OSTCBCur                                       ; OSTCBCur->OSTCBStkPtr = SP;
    LDR     R1, [R1]
    STR     R0, [R1]                                            ; R0 is SP of process being switched out

                                                                ; At this point, entire context of process has been saved
OSPendSV_nosave
    PUSH    {R14}                                               ; Save LR exc_return value
    LDR     R0, =OSTaskSwHook                                   ; OSTaskSwHook();
    BLX     R0
    POP     {R14}

    LDR     R0, =OSPrioCur                                      ; OSPrioCur = OSPrioHighRdy;
    LDR     R1, =OSPrioHighRdy
    LDRB    R2, [R1]
    STRB    R2, [R0]

    LDR     R0, =OSTCBCur                                       ; OSTCBCur  = OSTCBHighRdy;
    LDR     R1, =OSTCBHighRdy
    LDR     R2, [R1]
    STR     R2, [R0]

    LDR     R0, [R2]                                            ; R0 is new process SP; SP = OSTCBHighRdy->OSTCBStkPtr;

    VLDM    R0,  {D8-D15}
    ADD     R0,  R0, #0X40
    LDM     R0,  {R4-R11}
    ADD     R0,  R0, #0X20

    BIC.W   LR, LR, #0x10                                       ; Set exception return uses floating-point state

    MSR     PSP, R0                                             ; Load PSP with new process SP
    ORR     LR, LR, #0x04                                       ; Ensure exception return uses process stack
    CPSIE   I
    BX      LR                                                  ; Exception return will restore remaining context



OS_STK *OSTaskStkInit (void (*task)(void *p_arg), void *p_arg, OS_STK *ptos, INT16U opt)
{
    OS_STK *stk;
    unsigned int i;


    (void)opt;                                   /* 'opt' is not used, prevent warning                 */
    stk       = ptos;                            /* Load stack pointer                                 */

    *(stk) = (INT32U)0xCCUL;
    *(--stk) = (INT32U)0xDDUL;

    for(i = 16u; i != 0; i--)
    {
      *(--stk) = (INT32U)0xAAAAAAAAUL;
    }
  /* Registers stacked as if auto-saved on exception    */
    *(--stk)  = (INT32U)0x01000000uL;            /* xPSR                                               */
    *(--stk)  = (INT32U)task;                    /* Entry Point PC                                     */
    *(--stk)  = (INT32U)0xFFFFFFFEL;             /* R14 (LR)  (init value will  */
                                                 /* cause fault if ever used)   */
    *(--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  */

    for (i = 16u; i != 0; i--)          /* Initialize general-purpose Floating point registers  */
    {
      *--stk = (INT32U)0xBBBBBBBBuL;      /* S16-S31                        */
    }

    return (stk);
}

使用特权

评论回复
9
ONLY_MCU| | 2013-10-9 16:37 | 只看该作者
bwsz.1 发表于 2013-6-6 11:11
这个 stone xiong 帖子的回复里有说 解决开FPU进硬件出错中断 哈哈 我试过了 可以用 由于不能贴地址 我直 ...

请问你是在什么编译器以及什么版本下编译的,我在MDK4.7下编译的不行,还是进硬件异常中断。

使用特权

评论回复
10
trumpxp| | 2013-10-9 16:47 | 只看该作者
有可能是中断异常响应导致的  楼主   不是很了解这一块   只是自己的猜测而已  

使用特权

评论回复
11
trumpxp| | 2013-10-9 16:48 | 只看该作者
静下心来  仔细查一查代码   感觉  应该不是很难   

使用特权

评论回复
12
ONLY_MCU| | 2013-10-10 08:53 | 只看该作者
trumpxp 发表于 2013-10-9 16:48
静下心来  仔细查一查代码   感觉  应该不是很难

这方面的移植很多例子,但是都设置了,都移植了,就是不行。我在LPC4088和LPC4350下面测试,LPC4088竟然不用修改直接就能运行。而LPC4350修改了也不行。在别的帖子得知,MDK4.54版本编译的可以运行,4.60 4.70的都不行。我昨晚有重新装了一遍MDK4.54,结果仿真LPC4350的时候软件就死机了。目前还没有解决这些问题。

使用特权

评论回复
13
呱呱年| | 2018-8-11 23:08 | 只看该作者
求楼主代码1529515175@qq.com,万分感谢楼主,是直接移植到k60上的么,楼主用的是bc31编译的吗谢谢楼主大佬

使用特权

评论回复
14
gejigeji521| | 2018-8-12 10:39 | 只看该作者
一般我都是裸奔。

使用特权

评论回复
15
gejigeji521| | 2018-8-12 10:40 | 只看该作者
穿一层系统外壳,低功耗就没法实现了。

使用特权

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

本版积分规则

115

主题

639

帖子

34

粉丝