找回密码
 立即注册
查看: 2878|回复: 10

请问:STC32的FPMU软件库是线程安全的吗?

[复制链接]

2

主题

8

回帖

32

积分

新手上路

积分
32
发表于 2023-3-16 22:05:04 | 显示全部楼层 |阅读模式
代码:


#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      


手册上的说明:
请问:STC32的FPMU软件库是线程安全的吗?-1.png

问题是:
假设线程切换时保存了DR0和DR4,但不保存DMAIR的值,
请问运行库函数[  LCALL    C?FPMUL(C:0x000E)  ] 结果是正确的吗?

这里不考虑tstA, tstB, tstC 的读写线程安全问题。

因手头没有芯片进行测试,烦请高手帮忙测试解答。:handshake


回复

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:50
  • 最近打卡:2025-04-30 22:59:03

73

主题

5882

回帖

1万

积分

超级版主

积分
12073
发表于 2023-3-16 23:19:13 | 显示全部楼层
“线程安全”是啥意思?不明白你要问什么。
数学计算是单片机的基本运算,都会支持。
  • 打卡等级:以坛为家I
  • 打卡总天数:328
  • 最近打卡:2025-03-09 19:40:01

9

主题

328

回帖

4501

积分

荣誉版主

积分
4501
发表于 2023-3-16 23:25:11 | 显示全部楼层
梁*** 发表于 2023-3-16 23:19
“线程安全”是啥意思?不明白你要问什么。
数学计算是单片机的基本运算,都会支持。 ...

可能上多线程系统了
  • 打卡等级:以坛为家I
  • 打卡总天数:312
  • 最近打卡:2025-03-11 13:20:13

54

主题

1327

回帖

5395

积分

荣誉版主

积分
5395
发表于 2023-3-17 06:54:21 | 显示全部楼层
类拟于用 RTOS 系统 吧~~~

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

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

  • 打卡等级:偶尔看看III
  • 打卡总天数:38
  • 最近打卡:2025-04-30 14:38:57

25

主题

977

回帖

3599

积分

超级版主

积分
3599
发表于 2023-3-17 09:37:38 | 显示全部楼层
是安全的!!!
因为运算协处理器在进行运算过程中,主CPU处于Hold状态
CPU不执行指令,也不会相应中断(注:此时并不影响其他外设)
即使是RTOS也无法切换任务,无需关中断
  • 打卡等级:偶尔看看III
  • 打卡总天数:54
  • 最近打卡:2025-05-01 09:07:55

717

主题

1万

回帖

1万

积分

管理员

积分
15613
发表于 2023-3-17 09:42:44 | 显示全部楼层
请问:STC32的FPMU软件库是线程安全的吗?
===STC32F12K64的硬件浮点库函数是安全的吗 ?
=====安全,CPU被强制等待硬件FPMU执行完
1.png
2.png

2

主题

8

回帖

32

积分

新手上路

积分
32
发表于 2023-3-17 11:01:28 | 显示全部楼层
zh*** 发表于 2023-3-17 09:37
是安全的!!!
因为运算协处理器在进行运算过程中,主CPU处于Hold状态
CPU不执行指令,也不会相应中断(注 ...

明白,谢谢!

2

主题

8

回帖

32

积分

新手上路

积分
32
发表于 2023-3-17 11:01:55 | 显示全部楼层
神*** 发表于 2023-3-17 09:42
请问:STC32的FPMU软件库是线程安全的吗?
===STC32F12K64的硬件浮点库函数是安全的吗 ?
=====安全,CPU被 ...

谢谢!

2

主题

8

回帖

32

积分

新手上路

积分
32
发表于 2023-3-17 11:03:57 | 显示全部楼层
梁*** 发表于 2023-3-16 23:19
“线程安全”是啥意思?不明白你要问什么。
数学计算是单片机的基本运算,都会支持。 ...

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

点评

那你是要问RTOS的线程安全问题,而不是问浮点数问题。  详情 回复 发表于 2023-3-17 14:32
  • 打卡等级:偶尔看看III
  • 打卡总天数:50
  • 最近打卡:2025-04-30 22:59:03

73

主题

5882

回帖

1万

积分

超级版主

积分
12073
发表于 2023-3-17 14:32:31 | 显示全部楼层
wy_*** 发表于 2023-3-17 11:03
支持和线程安全是两回事,上RTOS必须要注意线程安全的问题。

那你是要问RTOS的线程安全问题,而不是问浮点数问题。
RTOS线程的稳定性由RTOS的代码保证。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2025-5-2 03:54 , Processed in 0.143962 second(s), 111 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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