wy_nb 发表于 2023-3-16 22:05:04

请问: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:13

“线程安全”是啥意思?不明白你要问什么。
数学计算是单片机的基本运算,都会支持。

kksk 发表于 2023-3-16 23:25:11

梁工 发表于 2023-3-16 23:19
“线程安全”是啥意思?不明白你要问什么。
数学计算是单片机的基本运算,都会支持。 ...

可能上多线程系统了

LAOXU 发表于 2023-3-17 06:54:21

类拟于用 RTOS 系统 吧~~~

不安全, 因为系统切换时没有保护DMAIR寄存器.

除非 楼主在调用时, 全程关中断!!!

zhp 发表于 2023-3-17 09:37:38

是安全的!!!
因为运算协处理器在进行运算过程中,主CPU处于Hold状态
CPU不执行指令,也不会相应中断(注:此时并不影响其他外设)
即使是RTOS也无法切换任务,无需关中断

神农鼎 发表于 2023-3-17 09:42:44

请问:STC32的FPMU软件库是线程安全的吗?
===STC32F12K64的硬件浮点库函数是安全的吗 ?
=====安全,CPU被强制等待硬件FPMU执行完



wy_nb 发表于 2023-3-17 11:01:28

zhp 发表于 2023-3-17 09:37
是安全的!!!
因为运算协处理器在进行运算过程中,主CPU处于Hold状态
CPU不执行指令,也不会相应中断(注 ...

明白,谢谢!

wy_nb 发表于 2023-3-17 11:01:55

神农鼎 发表于 2023-3-17 09:42
请问:STC32的FPMU软件库是线程安全的吗?
===STC32F12K64的硬件浮点库函数是安全的吗 ?
=====安全,CPU被 ...

谢谢!

wy_nb 发表于 2023-3-17 11:03:57

梁工 发表于 2023-3-16 23:19
“线程安全”是啥意思?不明白你要问什么。
数学计算是单片机的基本运算,都会支持。 ...

支持和线程安全是两回事,上RTOS必须要注意线程安全的问题。

梁工 发表于 2023-3-17 14:32:31

wy_nb 发表于 2023-3-17 11:03
支持和线程安全是两回事,上RTOS必须要注意线程安全的问题。
那你是要问RTOS的线程安全问题,而不是问浮点数问题。
RTOS线程的稳定性由RTOS的代码保证。
页: [1] 2
查看完整版本: 请问:STC32的FPMU软件库是线程安全的吗?