硬汉嵌入式论坛

 找回密码
 立即注册
查看: 5144|回复: 11
收起左侧

[STM32H7] Micrium为STM32H7制作好的最新版 uC/OS-II V2.92.14和 uC/OS-III V3.06.02例程升级版V1.1

[复制链接]

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115728
QQ
发表于 2018-4-27 02:01:30 | 显示全部楼层 |阅读模式
例程下载: Micrium_STM32H743ZI-Nucleo_Blinky.zip (2.15 MB, 下载次数: 162)

支持TrueSTUDIO和IAR.


BLINKY EXAMPLE FOR THE ST STM32H743ZI Nucleo-144, REVISION B

This example project demonstrates how to create a kernel task which blinks an LED.

MICRIUM PRODUCT VERSIONS
- uC/OS-II  v2.92.14
- uC/OS-III v3.06.02
- uC/CPU    v1.31.02
- uC/LIB    v1.38.02

IDE/COMPILER VERSIONS
- IAR/EWARM      v8.22.2
- TrueSTUDIO/GNU v9.0.0

HARDWARE SETUP
- Connect USB Micro-B cable to CN1 to provide power.

WORKSPACE LOCATIONS
- ST/STM32H743_Nucleo/Blinky/<OS2|OS3>/IAR/Blinky.eww
- ST/STM32H743_Nucleo/Blinky/<OS2|OS3>/TrueSTUDIO/

USAGE INSTRUCTIONS
IAR
- Open the workspace in IAR.
- Press F7 to build the project and Ctrl+D to start the debug session.
- Once the debug session has started, press F5 to run the example.
- The project creates a task which blinks an LED every 1 second.
- Now modify the call to OSTimeDlyHMSM() in StartupTask() to increase or decrease the frequency at which the LED blinks.
- Build and run again to see the change.

TrueSTUDIO
- Import the workspace in TrueSTUDIO and make sure the "Copy projects into workspace" Options box is UNCHECKED.
- Press 'CTRL + B' to build the project and create a Debug session by selecting the Blinky workspace and pressing F11.
- Once the debug session has started, press F8 to run/resume the example.
- The project creates a task which blinks an LED every 1 second.
- Now modify the call to OSTimeDlyHMSM() in StartupTask() to increase or decrease the frequency at which the LED blinks.
- Build and run again to see the change.


Please feel free to post questions or comments related to this example project at



回复

使用道具 举报

2

主题

569

回帖

575

积分

金牌会员

积分
575
发表于 2018-4-27 08:37:32 | 显示全部楼层
本帖最后由 leiyitan 于 2018-4-27 08:38 编辑

keil 被micrium抛弃了!我们只能自己去支持一下了!
回复

使用道具 举报

116

主题

800

回帖

1148

积分

至尊会员

积分
1148
QQ
发表于 2018-4-28 14:49:13 | 显示全部楼层
什么时候出IAR环境一致到keil环境的教程
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115728
QQ
 楼主| 发表于 2018-4-28 14:50:22 | 显示全部楼层
jcx0324 发表于 2018-4-28 14:49
什么时候出IAR环境一致到keil环境的教程

这个好改,简单修改下就可以用在MDK,后面我做个例子吧
回复

使用道具 举报

680

主题

3482

回帖

5547

积分

论坛元老

积分
5547
发表于 2018-4-28 20:20:15 | 显示全部楼层
eric2013 发表于 2018-4-28 14:50
这个好改,简单修改下就可以用在MDK,后面我做个例子吧

期待中啊 ... ...
回复

使用道具 举报

2

主题

569

回帖

575

积分

金牌会员

积分
575
发表于 2018-4-28 22:45:00 | 显示全部楼层
我以前还能坚持一个月静下心来钻研一些技术问题,现在坚持十分钟都难,很快注意力就涣散了。不知版主大神是怎么做到的…
回复

使用道具 举报

57

主题

908

回帖

1079

积分

至尊会员

积分
1079
发表于 2018-4-28 23:02:20 | 显示全部楼层
eric2013 发表于 2018-4-28 14:50
这个好改,简单修改下就可以用在MDK,后面我做个例子吧

浮点切换ucos默认是全部压栈。 F4的时候有个移植是判断,压栈很少。硬汉应该知道我说的是哪个。但是移植到F7又不行了。。。 现在用的是iar改keil的,老是感觉不完美。。。。
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115728
QQ
 楼主| 发表于 2018-4-29 10:07:10 | 显示全部楼层
roguebear 发表于 2018-4-28 23:02
浮点切换ucos默认是全部压栈。 F4的时候有个移植是判断,压栈很少。硬汉应该知道我说的是哪个。但是移植 ...

新版的这个修改了,也是用Lazy stack特性了。
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115728
QQ
 楼主| 发表于 2018-4-29 10:09:21 | 显示全部楼层
leiyitan 发表于 2018-4-28 22:45
我以前还能坚持一个月静下心来钻研一些技术问题,现在坚持十分钟都难,很快注意力就涣散了。不知版主大神是 ...

事赶事,经常处理不完的工作,我自己也是愁
回复

使用道具 举报

57

主题

908

回帖

1079

积分

至尊会员

积分
1079
发表于 2018-4-29 11:17:45 | 显示全部楼层
eric2013 发表于 2018-4-29 10:07
新版的这个修改了,也是用Lazy stack特性了。

我不是太懂。我用的笨办法。

之前M4上

CPU_STK  *OSTaskStkInit (OS_TASK_PTR    p_task,
                         void          *p_arg,
                         CPU_STK       *p_stk_base,
                         CPU_STK       *p_stk_limit,
                         CPU_STK_SIZE   stk_size,
                         OS_OPT         opt)
{
    CPU_STK  *p_stk;


    (void)opt;                                              /* Prevent compiler warning                               */

    p_stk = &p_stk_base[stk_size];                      /* Load stack pointer                                     */
                                                                /* Align the stack to 8-bytes.                            */
    p_stk = (CPU_STK *)((CPU_STK)(p_stk) & 0xFFFFFFF8);               

               
                                                            /* Registers stacked as if auto-saved on exception        */
    *--p_stk = (CPU_STK)0x01000000u;                        /* xPSR                                                   */
    *--p_stk = (CPU_STK)p_task;                             /* Entry Point                                            */
    *--p_stk = (CPU_STK)OS_TaskReturn;                      /* R14 (LR)                                               */
    *--p_stk = (CPU_STK)0x12121212u;                        /* R12                                                    */
    *--p_stk = (CPU_STK)0x03030303u;                        /* R3                                                     */
    *--p_stk = (CPU_STK)0x02020202u;                        /* R2                                                     */
    *--p_stk = (CPU_STK)p_stk_limit;                        /* R1                                                     */
    *--p_stk = (CPU_STK)p_arg;                              /* R0 : argument                                          */

               
                                                            /* Remaining registers saved on process stack             */
    *--p_stk = (CPU_STK)0x11111111u;                        /* R11                                                    */
    *--p_stk = (CPU_STK)0x10101010u;                        /* R10                                                    */
    *--p_stk = (CPU_STK)0x09090909u;                        /* R9                                                     */
    *--p_stk = (CPU_STK)0x08080808u;                        /* R8                                                     */
    *--p_stk = (CPU_STK)0x07070707u;                        /* R7                                                     */
    *--p_stk = (CPU_STK)0x06060606u;                        /* R6                                                     */
    *--p_stk = (CPU_STK)0x05050505u;                        /* R5                                                     */
    *--p_stk = (CPU_STK)0x04040404u;                        /* R4                                                     */

    //============ FPU register=====================
                #if (__FPU_PRESENT == 1) && (__FPU_USED == 1)
                *--p_stk = (CPU_STK)0xFFFFFFFDUL;                        /*  (1)这句话最重要,这里是将 EXC_RETURN也进行了入栈处理。   */
                #endif
               
                return (p_stk);
}

可以看到如果用浮点,只多了一句。

然后在asm中
    ;=====================================================================
    ;           USE FPU register..  version 2
    ;=====================================================================                
        TST      LR, #0x10                                                               ; (1)
        IT       EQ
        VSTMDBEQ R0!, {S16-S31}  
     
        MOV      R3, LR                                                                   ;(2)
        STMDB    R0!,{R3-R11}  





        ;=====================================================================
    ;           FPU register operation. version 2.
    ;=====================================================================
         LDMIA    R0!,{R3-R11}                 ;  (3)
         MOV      LR, R3
           
         TST      LR, #0x10                    ;  (4)
         IT       EQ
         VLDMIAEQ R0!, {S16-S31}

好似检测了什么,反正我也看不懂。


移植到ucos3.06上挂了。
目前官方这个1.1
#if (OS_CPU_ARM_FP_EN > 0u)
    *(--p_stk) = (CPU_STK)0xFFFFFFEDuL;                         /* R14: EXEC_RETURN; See Note 5                         */
#else
    *(--p_stk) = (CPU_STK)0xFFFFFFFDuL;                         /* R14: EXEC_RETURN; See Note 5                         */
#endif
                                                                /* Remaining registers saved on process stack           */
    *(--p_stk) = (CPU_STK)0x11111111uL;                         /* R11                                                  */
    *(--p_stk) = (CPU_STK)0x10101010uL;                         /* R10                                                  */
    *(--p_stk) = (CPU_STK)0x09090909uL;                         /* R9                                                   */
    *(--p_stk) = (CPU_STK)0x08080808uL;                         /* R8                                                   */
    *(--p_stk) = (CPU_STK)0x07070707uL;                         /* R7                                                   */
    *(--p_stk) = (CPU_STK)0x06060606uL;                         /* R6                                                   */
    *(--p_stk) = (CPU_STK)0x05050505uL;                         /* R5                                                   */
    *(--p_stk) = (CPU_STK)0x04040404uL;                         /* R4                                                   */

#if (OS_CPU_ARM_FP_EN > 0u)
                                                                /* Initialize S16-S31 floating point registers          */
    *(--p_stk) = (CPU_STK)0x41F80000u;                          /* S31                                                  */
    *(--p_stk) = (CPU_STK)0x41F00000u;                          /* S30                                                  */
    *(--p_stk) = (CPU_STK)0x41E80000u;                          /* S29                                                  */
    *(--p_stk) = (CPU_STK)0x41E00000u;                          /* S28                                                  */
    *(--p_stk) = (CPU_STK)0x41D80000u;                          /* S27                                                  */
    *(--p_stk) = (CPU_STK)0x41D00000u;                          /* S26                                                  */
    *(--p_stk) = (CPU_STK)0x41C80000u;                          /* S25                                                  */
    *(--p_stk) = (CPU_STK)0x41C00000u;                          /* S24                                                  */
    *(--p_stk) = (CPU_STK)0x41B80000u;                          /* S23                                                  */
    *(--p_stk) = (CPU_STK)0x41B00000u;                          /* S22                                                  */
    *(--p_stk) = (CPU_STK)0x41A80000u;                          /* S21                                                  */
    *(--p_stk) = (CPU_STK)0x41A00000u;                          /* S20                                                  */
    *(--p_stk) = (CPU_STK)0x41980000u;                          /* S19                                                  */
    *(--p_stk) = (CPU_STK)0x41900000u;                          /* S18                                                  */
    *(--p_stk) = (CPU_STK)0x41880000u;                          /* S17                                                  */
    *(--p_stk) = (CPU_STK)0x41800000u;                          /* S16                                                  */
#endif

从注释可以看到除了
#if (OS_CPU_ARM_FP_EN > 0u)
    *(--p_stk) = (CPU_STK)0xFFFFFFEDuL;                         /* R14: EXEC_RETURN; See Note 5                         */
#else
    *(--p_stk) = (CPU_STK)0xFFFFFFFDuL;                         /* R14: EXEC_RETURN; See Note 5                         */
#endif
比M4多了S16 ~ S31的压栈。  


反正M4上用了这么久也没出问题。。。



回复

使用道具 举报

57

主题

908

回帖

1079

积分

至尊会员

积分
1079
发表于 2018-4-29 11:34:39 | 显示全部楼层
#ifdef __ARMVFP__
#define  OS_CPU_ARM_FP_EN              1u
#else
#define  OS_CPU_ARM_FP_EN              0u
#endif


用了5.5 今天才发现,一直以来我项目里面的 __ARMVFP__是没有定义的。
那么默认OS_CPU_ARM_FP_EN 为0.

但是这么久了浮点加减也测试了,没有问题。
我在项目里面define了 __ARMVFP__,然后又测试,浮点还是没有问题。。。

我蒙了。。。。
回复

使用道具 举报

57

主题

908

回帖

1079

积分

至尊会员

积分
1079
发表于 2018-4-29 18:13:44 | 显示全部楼层
大概知道怎么回事了。。。。。

在os_cpu_a.asm中的移植是从iar来的。里面
    IF {FPU} != "SoftVFP"
针对keil根本不起作用。

所以无论怎么设置在asm中fpu都是开着的。

所以在project设置里面有__FPU_PRESENT=1,__MPU_PRESENT = 1就可以了。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2025-5-14 20:21 , Processed in 0.329930 second(s), 27 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表