微控制器中的多线程

时间:2018-11-30 10:43:36

标签: c multithreading microcontroller

我有一个 volatile unsigned char array LedState[5] 变量,该变量在线程之间共享。数组中的每个索引表示一个状态。根据每个状态,LED将以不同的顺序闪烁。一个线程设置阵列中的状态,而另一个基于阵列索引的线程将使LED闪烁。

void TurnOnled(state) {
   LedState[state] =1;
}
void TurnOffLed(state) {
   LedState[state] = 0;
}
int CheckLedState(state) {
   return LedState[state]? 1 : 0;
}
Thread 1
---------
TurnOnLed(3);
/*Set of instructions*/
TurnOffLed(3);

Thread 2
--------
if (CheckLedState(3)) {
   /*Flash LEDS according to state*/
else {/*do nothing*/}

我有时遇到的问题是线程1,我需要立即TurnOnLedTurnOffLed。如何确保线程2在调用TurnOnLed之前看到TurnOffLed。上面只是一个简单的示例,但实际上LedState变量是在多个线程中设置和取消设置的。但是不同的线程不会设置相同的状态。

1 个答案:

答案 0 :(得分:1)

每个LED都必须使用一个信号灯,该信号灯会设置功能,并且一旦获得状态,读取功能就会关闭。设置功能仅应在信号量清除时更改状态。例如:

L = [[0.5, True, 'hello'], [1.25, False, 'test']]