大树树 发表于 2018-8-25 09:45
昨天调试发现计算的时候关中断就不出错了。
但按道理讲创建任务时候加了OS_OPT_TASK_SAVE_FP选项的,可结 ...
计算耗时多少啊,关中断计算完再开→_→
安 发表于 2018-8-27 10:13
楼主的看一下是否增加了.s的代码,我以前用到float时,会发生死机的情况。
; Reset handler
Reset_Handler...
这个我看了下是有的:),目前没有因为计算死机,就是数据会错误
党国特派员 发表于 2018-8-27 10:39
在任务初始化(OSTaskStkInit)的时候,跟一下。看浮点寄存器有没有入栈。
好的,我试试看,谢谢
有没有可能是你的计算步骤太长了,例如
q_3*powf(traj_PATH_x,3)+ q_4*powf(traj_PATH_x,4)+q_5 *powf(traj_PATH_x,5);
只算powf的时候就被中断打断了然后切换到了其他地方?
相当于你的操作不是原子性的……?但是理论上来说,及时打断了也能恢复,但是被打断的时候,寄存器是否有被中断函数覆写?
stm1024 发表于 2018-8-27 21:03
有没有可能是你的计算步骤太长了,例如
q_3*powf(traj_PATH_x,3)+ q_4*powf(traj_PATH_x,4)+q_5 *powf( ...
UCOS按正常来讲应该会将浮点寄存器的值入栈的,但感觉上没有正常入栈导致的问题。
根据你所说的错误描述,很可能是任务切换时浮点寄存器数据破坏了。
看下汇编代码,有没有使用S16-s31以上的寄存器。如果有的话,有可能就是s16-s31这几个寄存器没有入栈。
党国特派员 发表于 2018-8-27 10:39
在任务初始化(OSTaskStkInit)的时候,跟一下。看浮点寄存器有没有入栈。
查看是否入栈是要看汇编执行的情况吗?
wangweili1978 发表于 2018-8-28 11:43
根据你所说的错误描述,很可能是任务切换时浮点寄存器数据破坏了。
看下汇编代码,有没有使用S16-s31以上 ...
不太会这些操作,有没有相关的资料教程之类的,求大侠分享
你好,问题解决了吗?我得也有这问题, ucos iii 浮点出现问题,底层计算没什么问题,我在显示时偶尔会出错,此时底层变量没有问题,显示形参传给函数后 有时会出错,数据变了,想不通问题
http://www.openedv.com/forum.php?mod=viewthread&tid=277751