请问:STC32的FPMU软件库是线程安全的吗?
代码:#include<math.h>
float tstA = 3.1;
float tstB = 5.5;
float tstC;
void main( void )
{
WTST = 0; //设置程序指令延时参数,赋值为0可将CPU执行指令的速度设置为最快
EAXFR = 1; //扩展寄存器(XFR)访问使能
CKCON = 0; //提高访问XRAM速度
while(1);
tstC = tstA*tstB;
}
汇编对应的浮点计算代码为:
MOV DR0,tstB(0x0D4D)
MOV DR4,tstA(0x0D49)
LCALL C?FPMUL(C:0x000E)
C?FPMUL:
MOV DMAIR(0xED),#DMA_FPMUL(0x1E)
RET
手册上的说明:
问题是:
假设线程切换时保存了DR0和DR4,但不保存DMAIR的值,
请问运行库函数 结果是正确的吗?
这里不考虑tstA, tstB, tstC 的读写线程安全问题。
因手头没有芯片进行测试,烦请高手帮忙测试解答。:handshake
“线程安全”是啥意思?不明白你要问什么。
数学计算是单片机的基本运算,都会支持。 梁工 发表于 2023-3-16 23:19
“线程安全”是啥意思?不明白你要问什么。
数学计算是单片机的基本运算,都会支持。 ...
可能上多线程系统了 类拟于用 RTOS 系统 吧~~~
不安全, 因为系统切换时没有保护DMAIR寄存器.
除非 楼主在调用时, 全程关中断!!!
是安全的!!!
因为运算协处理器在进行运算过程中,主CPU处于Hold状态
CPU不执行指令,也不会相应中断(注:此时并不影响其他外设)
即使是RTOS也无法切换任务,无需关中断 请问:STC32的FPMU软件库是线程安全的吗?
===STC32F12K64的硬件浮点库函数是安全的吗 ?
=====安全,CPU被强制等待硬件FPMU执行完
zhp 发表于 2023-3-17 09:37
是安全的!!!
因为运算协处理器在进行运算过程中,主CPU处于Hold状态
CPU不执行指令,也不会相应中断(注 ...
明白,谢谢! 神农鼎 发表于 2023-3-17 09:42
请问:STC32的FPMU软件库是线程安全的吗?
===STC32F12K64的硬件浮点库函数是安全的吗 ?
=====安全,CPU被 ...
谢谢! 梁工 发表于 2023-3-16 23:19
“线程安全”是啥意思?不明白你要问什么。
数学计算是单片机的基本运算,都会支持。 ...
支持和线程安全是两回事,上RTOS必须要注意线程安全的问题。 wy_nb 发表于 2023-3-17 11:03
支持和线程安全是两回事,上RTOS必须要注意线程安全的问题。
那你是要问RTOS的线程安全问题,而不是问浮点数问题。
RTOS线程的稳定性由RTOS的代码保证。
页:
[1]
2