硬汉嵌入式论坛

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

[μCOS-III] 源工程升级最新的UCOSIII内核V3.07.03

[复制链接]

98

主题

340

回帖

634

积分

金牌会员

积分
634
发表于 2019-5-4 18:27:21 | 显示全部楼层 |阅读模式
之前F429上UCOSIII用的版本一直是V3.04.04,H7的DEMO是V3.07.03版本,试着先走一波。以下4步:

1、新内核跟源内核相同的文件直接替换;
2、新内核中不再存在的文件,直接删除(如os_pend_multi.c);
3、新内核跟源内核文件名差不多的文件,直接删掉源文件,改成新文件名(如bsp.c->os_bsp.c);
4、因为直接用的H7的内核,所以startup_stm32f746xx_ucos.s这个文件没有移植;


完成以上4步,打开工程,将内核分组文件中不再存在的文件删掉,编译一下,根据提示修改几个简单的错误,(类似APP_TASK_START_STK_SIZE换成了APP_CFG_STARTUP_TASK_STK_SIZE,stm32f7xx_hal.h换成stm32f4xx_hal.h等等),编译下载,OK,运行正常。


新版本我重点关注的是浮点入栈出栈问题,这个硬汉已经在帖子中提到过http://www.armbbs.cn/forum.php?m ... ypeid%26typeid%3D27,新版本os_cpu_c.c针对浮点单元多了很多东西(没仔细研究,暂时认为他修复了以前的入栈出栈问题吧),OK,打开浮点单元,编译没错,下载后程序不执行,仿真发现卡在了OSInitHook函数里面,具体位置如下:
#if (OS_CPU_ARM_FP_EN > 0u)
    reg_val = CPU_REG_FP_FPCCR;                                 /* Check the floating point mode.                       */
    if ((reg_val & CPU_REG_FPCCR_LAZY_STK) != CPU_REG_FPCCR_LAZY_STK) {
        while (1u) {                                            /* See Note (1).                                        */
            ;
        }
    }
#endif

对比以前的版本是没有这个什么LAZY_STK东西的,单步从一开始执行,发现在startup_stm32f429xx.s中,一开始对浮点寄存器做了一次清空操作,代码如下
                IF {FPU} != "SoftVFP"
                                                ; Enable Floating Point Support at reset for FPU
                LDR.W   R0, =0xE000ED88         ; Load address of CPACR register
                LDR     R1, [R0]                ; Read value at CPACR
                ORR     R1,  R1, #(0xF <<20)    ; Set bits 20-23 to enable CP10 and CP11 coprocessors
                                                ; Write back the modified CPACR value
                STR     R1, [R0]                ; Wait for store to complete
                DSB

                                                ; Disable automatic FP register content
                                                ; Disable lazy context switch
                LDR.W   R0, =0xE000EF34         ; Load address to FPCCR register
                LDR     R1, [R0]
                AND     R1,  R1, #(0x3FFFFFFF)  ; Clear the LSPEN and ASPEN bits
                STR     R1, [R0]
                ISB                             ; Reset pipeline now the FPU is enabled
                ENDIF
对比startup_stm32f746xx_ucos.s文件中是没有这个操作的,于是将这段话屏蔽之后,再次编译下载后,程序正常运行。
程序中做了一个浮点运算,暂时没发现啥问题,以后有啥坑再慢慢踩吧。






回复

使用道具 举报

36

主题

2040

回帖

2148

积分

至尊会员

积分
2148
发表于 2019-5-4 19:05:05 | 显示全部楼层
推荐楼主直接删除原有代码添加新的。防止后面不必要的麻烦。
Ever tried. Ever failed. No matter. Try Again. Fail again. Fail better.
回复

使用道具 举报

98

主题

340

回帖

634

积分

金牌会员

积分
634
 楼主| 发表于 2019-5-4 19:23:25 | 显示全部楼层
byccc 发表于 2019-5-4 19:05
推荐楼主直接删除原有代码添加新的。防止后面不必要的麻烦。

直接在工程文件夹中删除源文件,然后拷贝新文件的方式操作的
回复

使用道具 举报

23

主题

211

回帖

280

积分

高级会员

积分
280
发表于 2019-10-22 16:03:57 | 显示全部楼层
我也是升级到v3.07.03时遇到这个问题,但是我修改之后,就卡死到CPU_SW_Exception()这个函数了,能否发一下你的例程参考啊?谢谢。
回复

使用道具 举报

9

主题

38

回帖

65

积分

初级会员

积分
65
发表于 2020-3-8 16:24:16 | 显示全部楼层
楼主能否发一下程序参考,有ucos的代码即可
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107028
QQ
发表于 2020-3-9 00:38:07 | 显示全部楼层
blackfire531 发表于 2019-10-22 16:03
我也是升级到v3.07.03时遇到这个问题,但是我修改之后,就卡死到CPU_SW_Exception()这个函数了,能否发一下 ...

参考H7的复制粘贴到F429上就可以使用,底层实现一样,没区别

基于V7开发板的最新版uCOS-III V3.07.03程序模板,含MDK和IAR,支持uC/Probe,与之前版本变化较大
http://www.armbbs.cn/forum.php?mod=viewthread&tid=93553

基于V7的uCOS-III动态时钟管理方案例程,用于低功耗,含IAR以及MDK的AC5和AC6版本
http://www.armbbs.cn/forum.php?mod=viewthread&tid=93600
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107028
QQ
发表于 2020-3-9 00:38:14 | 显示全部楼层
ice845930 发表于 2020-3-8 16:24
楼主能否发一下程序参考,有ucos的代码即可

参考H7的复制粘贴到F429上就可以使用,底层实现一样,没区别

基于V7开发板的最新版uCOS-III V3.07.03程序模板,含MDK和IAR,支持uC/Probe,与之前版本变化较大
http://www.armbbs.cn/forum.php?mod=viewthread&tid=93553

基于V7的uCOS-III动态时钟管理方案例程,用于低功耗,含IAR以及MDK的AC5和AC6版本
http://www.armbbs.cn/forum.php?mod=viewthread&tid=93600
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-14 15:09 , Processed in 0.197109 second(s), 25 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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