tingfengqilang 发表于 2023-7-30 12:29:28

UCOS多任务读全局结构体变量需要保护吗

如下代码,UCOS中多任务调用该函数读取结构体变量。需要保护吗
void valve_status_buffer_read(valve_status_t* p_stat)
{
    mymemcpy(p_stat, &valveStatus, sizeof(valve_status_t));
}

honami520 发表于 2023-7-30 13:11:28

本帖最后由 honami520 于 2023-7-30 13:12 编辑

读变量不需要保护,但是写需要保护。
你这个函数mymemcpy,内部只要是支持可重入的就没问题

zchong 发表于 2023-7-30 13:35:39

是否需要保护看自己需求,有数据完整性问题就需要保护

tingfengqilang 发表于 2023-7-30 18:17:38

honami520 发表于 2023-7-30 13:11
读变量不需要保护,但是写需要保护。
你这个函数mymemcpy,内部只要是支持可重入的就没问题 ...
(引用自2楼)

好的,谢谢

advarx21ic 发表于 2023-7-30 18:42:23

我认为保护一下安全点,要不读了一半突然中断咋办

qwe2231695 发表于 2023-7-30 23:35:51

32位单片机变量不需要保护

foxpro2005 发表于 2023-7-31 08:13:01

个人认为这要看你应用对这个读结构体数据的具体需求,有没有数据完整性要求,要知道读写结构体不是一条语句可以完成的,如果你的结构体数据在读的时候不会被重写,那就不需要保护了; 反之有重写可能,同时又为了确保当前数据的完整性,那就需要保护处理。

擦鞋匠 发表于 2023-7-31 10:08:06

我认为:如果函数本身是可重入的,不需要添加任何保护;如果函数不可重入,那么需要对其中的全局变量或者静态变量添加保护
页: [1]
查看完整版本: UCOS多任务读全局结构体变量需要保护吗