硬汉嵌入式论坛

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

[μCOS-III] uCOS FPU支持移植

[复制链接]

77

主题

691

回帖

922

积分

金牌会员

积分
922
发表于 2022-10-21 00:39:46 | 显示全部楼层 |阅读模式
参考硬汉大佬的uCOS-III教程移植FPU支持过程,发现最新版uCOS-III的FPU支持更方便了,好像只需要修改函数
[C] 纯文本查看 复制代码
OSTaskStkInit
就可以。疫情被隔离在家,没有板子,不知道对不对。
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107034
QQ
发表于 2022-10-21 01:03:56 | 显示全部楼层
新版3.08基本不用修改port文件了,直接就可以使用。
回复

使用道具 举报

77

主题

691

回帖

922

积分

金牌会员

积分
922
 楼主| 发表于 2022-10-21 10:18:27 | 显示全部楼层
eric2013 发表于 2022-10-21 01:03
新版3.08基本不用修改port文件了,直接就可以使用。

可能现在官网上的做了修改,FPU的使用还是要做一些修改。不像我昨晚想的那样,还是得按照你3.0.8的模板修改,修改了几个函数才搞定
[C] 纯文本查看 复制代码
OSTaskSwHook、OSTaskStkInit
,添加了函数
[C] 纯文本查看 复制代码
OS_CPU_FP_Reg_Push,OS_CPU_FP_Reg_Pop
回复

使用道具 举报

19

主题

373

回帖

430

积分

高级会员

积分
430
发表于 2022-10-21 10:40:01 | 显示全部楼层
1. 硬件支持FPU的(如M4等),默认开启
2. 要强制关闭的话,需要在配置加上预定义宏:__SOFTFP__(GCC),SoftVFP(ARMCC),__ARMVFP__(IAR)
回复

使用道具 举报

77

主题

691

回帖

922

积分

金牌会员

积分
922
 楼主| 发表于 2022-10-21 13:02:11 | 显示全部楼层
感谢硬汉大佬的3.0.8模板,下面是我参照硬汉大佬的模板在官方github下载源码移植FPU过程做的修改。能稳定跑起来。

os_cpu.c修改报告.html

378.21 KB, 下载次数: 12

os_cpu.h报告.html

76.49 KB, 下载次数: 5

os_cpu_a.asm报告.html

108.58 KB, 下载次数: 4

回复

使用道具 举报

77

主题

691

回帖

922

积分

金牌会员

积分
922
 楼主| 发表于 2022-10-21 13:03:17 | 显示全部楼层
h_007 发表于 2022-10-21 10:40
1. 硬件支持FPU的(如M4等),默认开启
2. 要强制关闭的话,需要在配置加上预定义宏:__SOFTFP__(GCC), ...

UCOS默认port文件不支持FPU,需要移植的。
回复

使用道具 举报

19

主题

373

回帖

430

积分

高级会员

积分
430
发表于 2022-10-21 15:42:46 | 显示全部楼层
庄永 发表于 2022-10-21 13:03
UCOS默认port文件不支持FPU,需要移植的。

我用uCOS III v3.0.8的,默认是不需要移植
下面是官方自带的GCC移植文件:os_cpu_a.S

OS_CPU_PendSVHandler:
    CPSID   I                                                   @ Cortex-M7 errata notice. See Note #5
    MOVW    R2, #:lower16:OS_KA_BASEPRI_Boundary                @ Set BASEPRI priority level required for exception preemption
    MOVT    R2, #:upper16:OS_KA_BASEPRI_Boundary
    LDR     R1, [R2]
    MSR     BASEPRI, R1
    DSB
    ISB
    CPSIE   I

    MRS     R0, PSP                                             @ PSP is process stack pointer
#if (defined(__VFP_FP__) && !defined(__SOFTFP__))
                                                                @ Push high vfp registers if the task is using the FPU context
    TST       R14, #0x10
    IT        EQ
    VSTMDBEQ  R0!, {S16-S31}
#endif
回复

使用道具 举报

77

主题

691

回帖

922

积分

金牌会员

积分
922
 楼主| 发表于 2022-10-21 18:34:04 | 显示全部楼层
h_007 发表于 2022-10-21 15:42
我用uCOS III v3.0.8的,默认是不需要移植
下面是官方自带的GCC移植文件:os_cpu_a.S

GCC的没试过,ARMCC的自带的port不行,跑不起来。
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-15 06:41 , Processed in 0.176838 second(s), 28 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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