找回密码
 立即注册
查看: 2043|回复: 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


回复 送花

使用道具 举报

该用户从未签到

46

主题

3118

回帖

7033

积分

超级版主

积分
7033
发表于 2023-3-16 23:19:13 | 显示全部楼层
“线程安全”是啥意思?不明白你要问什么。
数学计算是单片机的基本运算,都会支持。
  • TA的每日心情
    开心
    昨天 22:44
  • 签到天数: 172 天

    [LV.7]常住居民III

    9

    主题

    311

    回帖

    3823

    积分

    荣誉版主

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

    可能上多线程系统了
  • TA的每日心情
    开心
    昨天 02:47
  • 签到天数: 158 天

    [LV.7]常住居民III

    39

    主题

    901

    回帖

    4312

    积分

    荣誉版主

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

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

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

  • TA的每日心情
    开心
    4 天前
  • 签到天数: 17 天

    [LV.4]偶尔看看III

    16

    主题

    728

    回帖

    2620

    积分

    超级版主

    积分
    2620
    发表于 2023-3-17 09:37:38 | 显示全部楼层
    是安全的!!!
    因为运算协处理器在进行运算过程中,主CPU处于Hold状态
    CPU不执行指令,也不会相应中断(注:此时并不影响其他外设)
    即使是RTOS也无法切换任务,无需关中断

    该用户从未签到

    556

    主题

    9693

    回帖

    1万

    积分

    管理员

    积分
    14193
    发表于 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 | 显示全部楼层
    zhp 发表于 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

    该用户从未签到

    46

    主题

    3118

    回帖

    7033

    积分

    超级版主

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

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

    本版积分规则

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

    GMT+8, 2024-6-1 01:23 , Processed in 0.098242 second(s), 73 queries .

    Powered by Discuz! X3.5

    © 2001-2024 Discuz! Team.

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