硬汉嵌入式论坛

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

F429探索板在IAR7.4环境下采用教程上的方法开启FPU出现bug?求解答

[复制链接]

1

主题

3

回帖

6

积分

新手上路

积分
6
发表于 2015-12-16 17:26:52 | 显示全部楼层 |阅读模式
我在F429 discovery 板子上,按照"μCOS-III教程1-11期.pdf" 移植了ucos工程,在没有做FPU移植的时候,不开启FPU的,系统运行正常,建立的两个任务交替运行正常;然后按照教程上的FPU移植方案,在 OSTaskStkInit 函数中添加了 *--p_stk = (CPU_STK)0xFFFFFFFDUL;并按教程上的方法修改了OS_CPU_PendSVHandler,完全按照教程上的方法修改完,并且在工程设置里开启FPU之后,重新编译,结果发现,系统只是在开始的时候把两个任务运行一次,然后就再也不能进入两个任务,只是在Idle系统任务中跑,不知是哪里bug?求大神们指点


PS:个人认为已经理解了手册里的移植方法,而且感觉这种移植方法很不错,但是不知道为啥,仅仅是按教程里面改了两个以上两个移植点,并开启FPU,编译之后程序会一直运行空任务,百思不得其解,求高人解答???


附件中附上我在没有进行FPU移植之前的能够正常运行的工程,和仅仅改了以上两处,是能FPU后有bug的工程,求大牛测试

uCOS_Original_Project-2015-12-16-FPU未开启-运行正常.zip

18.63 MB, 下载次数: 115

这个是还没有修改FPU之前的工程-能够正常运行

uCOS_Original_Project-2015-12-16-FPU开启-出bug-不能进自己的任务.zip

18.55 MB, 下载次数: 112

这个是做了教程中所说的两处FPU相关的修改-然后开启了FPU之后的工程-发现不能正常运行-系统会一直运行空任

我就是我
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107527
QQ
发表于 2015-12-16 17:33:25 | 显示全部楼层
探索板子官方模式有例子么,参考即可,使用官方的FPU设置方法,后面我们的F429板子配套例子也采用官方的设置方法了,不再用教程里面的方法了。
这么做的目的是便于移植,要不升级一个版本折腾一次。
回复

使用道具 举报

1

主题

3

回帖

6

积分

新手上路

积分
6
 楼主| 发表于 2015-12-16 21:47:56 | 显示全部楼层
多谢大神指点!
我移植的时候参考的是ucos官网上下的Micrium_STM32F429II-SK_OS3 版本信息如下,“Micrim_STM32F429II-SK_OS3” μC/OS-III v3.04.04 Version    1.00 Updated    October 8, 2014   
用这个ucos官方的移植方法操作,如果在工程设置里不开启FPU,都是正常的,但是如果开启FPU之后,系统会直接回进入Hardfault ;
请问有能在discovery 板子上开启FPU后能正常运行的工程,或者哪里能找到官方移植参考吗?求大神指点~~~
我就是我
回复

使用道具 举报

1

主题

3

回帖

6

积分

新手上路

积分
6
 楼主| 发表于 2015-12-16 23:15:13 | 显示全部楼层

我就是我
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107527
QQ
发表于 2015-12-16 23:21:31 | 显示全部楼层
后面我给我们的F429配套例子时看看。
回复

使用道具 举报

1

主题

3

回帖

6

积分

新手上路

积分
6
 楼主| 发表于 2015-12-18 16:14:21 | 显示全部楼层

回 eric2013 的帖子

eric2013:后面我给我们的F429配套例子时看看。
 (2015-12-16 23:21) 
问题已经解决了,我还是采用你们的移植方法进行的移植,我觉得这种方式毕竟效率更高而且方便,不过除了你们做的更改以外把OSStartHighRdy这个函数的代码更换成如下代码:然后程序跑通了,可以正常的完成任务的切换!至于ucos官方的移植方法,开fpu后会直接进hardfault,这个原因我没有去搞,如果你们做好官方的移植后,有什么发现,希望版主能够私信告诉我一下哈~~~~~
;==================================================================================
; @START @whitesnark   
OSStartHighRdy
    CPSID   I
    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, =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

; @END @whitesnark   
;==================================================================================
我就是我
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-6-4 20:18 , Processed in 0.209677 second(s), 29 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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