if (rt_event_recv(&event, 1, (RT_EVENT_FLAG_OR | RT_EVENT_FLAG_CLEAR), RT_TICK_PER_SECOND) != RT_EOK)为啥在C99中会报错
时间: 2023-08-03 10:07:38 浏览: 113
这是因为在 C99 中,变量的声明必须在代码块的开始处,而这段代码中的变量 event 在代码块的中间位置被声明,导致编译器报错。在 C99 中,你应该把变量声明放在代码块的开始处,例如:
```
rt_event_t event;
if (rt_event_recv(&event, 1, (RT_EVENT_FLAG_OR | RT_EVENT_FLAG_CLEAR), RT_TICK_PER_SECOND) != RT_EOK)
{
// your code here
}
```
相关问题
(rt_event_recv(&event, 1, RT_EVENT_FLAG_OR | RT_EVENT_FLAG_CLEAR, RT_TICK_PER_SECOND,&e) != RT_EOK)啥意思
这段代码是在 `rt_event_recv` 函数的基础上增加了一个参数 `&e`,用于返回等待到的事件掩码。如果函数返回的值不等于 `RT_EOK`,则表示等待事件失败,否则表示等待事件成功,并且等待到的事件掩码会被存储在 `e` 变量中。
整个代码的意思是等待 `event` 事件的发生,等待的条件是任意一个事件的发生,并在事件发生后清除事件标志,如果等待超过了 `RT_TICK_PER_SECOND` 个系统节拍时间仍然没有事件发生,则函数返回 `RT_ERROR`,等待到事件后,返回 `RT_EOK`,并且事件掩码存储在 `e` 变量中。
if (rt_event_recv(&event, 1, RT_EVENT_FLAG_OR | RT_EVENT_FLAG_CLEAR, RT_TICK_PER_SECOND) != RT_EOK)如何理解这句代码
这段代码是嵌入式操作系统 RT-Thread 中的事件等待函数 `rt_event_recv`。它的作用是等待一个或多个事件的发生,并在事件发生后返回。函数的参数如下:
- `&event`:指向 `rt_event_t` 类型的指针,表示要等待的事件对象。
- `1`:表示要等待的事件掩码数量,即等待单个事件的发生。
- `RT_EVENT_FLAG_OR | RT_EVENT_FLAG_CLEAR`:表示等待事件的条件。`RT_EVENT_FLAG_OR` 表示等待任意一个事件的发生,`RT_EVENT_FLAG_CLEAR` 表示等待后清除事件标志。
- `RT_TICK_PER_SECOND`:表示等待的超时时间,单位是操作系统的系统节拍数。
这段代码的意思是等待 `event` 事件的发生,等待的条件是任意一个事件的发生,并在事件发生后清除事件标志,如果等待超过了 `RT_TICK_PER_SECOND` 个系统节拍时间仍然没有事件发生,则函数返回 `RT_ERROR`。函数返回 `RT_EOK` 表示等待到了事件的发生。
阅读全文