我一直在用 C 语言开发基于 RTOS 的嵌入式软件,并且遇到了有关从多个线程访问共享资源的问题。我有两个问题。第一个是在状态机中设置和获取状态变量的值。下面是 StateMachine“object”的头文件:
typedef enum{
STATE_01,
STATE_02,
STATE_03,
STATE_04
}state_e;
// state machine instance
typedef struct{
state_e currState;
}StateMachine;
extern state_e GetState(StateMachine*);
extern void SetState(StateMachine*, state_e);
访问方法的实现如下:
state_e GetState(StateMachine *sm){
return sm->currState;
}
void SetState(StateMachine *sm, state_e state){
sm->currState = state;
}
我的问题是我不确定是否应该使用互斥体来控制对状态变量的访问。我的意思是在32位MCU上读写32位变量是原子操作。
第二个问题涉及读取包含无符号 32 位整数的数组中一项的值,其中每一位存储一位变量的值。
在这里我再次不确定是否有必要使用互斥体。出于与上述相同的原因,我认为不会,但我想听听一些更有经验的程序员的意见。位数组“对象”的关联头文件:
typedef struct{
uint32_t BitsArray[NO_WORDS];
}BitsArray;
extern uint32_t GetWordValue(BitsArray*, uint8_t);
访问方法实现:
uint32_t GetWordValue(BitsArray *ba, uint8_t word){
return *(ba->BitsArray + word);
}
谢谢你的任何想法。