C 静态局部变量,如果从不同的 ISR 调用函数,是否需要 volatile?

问题描述 投票:0回答:1

我有一个私有函数,可以对静态局部变量进行操作。该函数由不同的非并发硬件 ISR 调用。本能地,我相信这是正确的,因为变量是静态的,并且它的值必须在函数调用之间持续存在,但我希望 100% 确定。

/** @brief Raise the event flag and feed the watchdog if all required event flags are set.
 *
 *  @param[in] event_flag  Bitmask corresponding to the triggering event.
 */
static void watchdog_feed_if_all_events_set(watchdog_event_t event_flag)
{
    static watchdog_event_t watchdog_feed_events;

    watchdog_feed_events |= event_flag;

    if ((watchdog_feed_events & watchdog_required_events) == watchdog_required_events) {
        bsp_watchdog_feed();
        watchdog_feed_events = 0;
    }
}

watchdog_feed_events
是否需要声明为易失性?如果是这样,你能解释一下为什么吗?

c gcc embedded
1个回答
0
投票

watchdog_feed_events 需要声明为 volatile 吗?如果是这样, 你能解释一下为什么吗?

如果满足以下条件,它不必是易失性的:

  • 它具有“静态存储持续时间”,并且必须在从其永久存储持续时间调用函数时读取。即使此函数内联到 ISR 处理程序中,编译器也无法对其进行优化并将其保留在 ISR 处理程序向量之间的寄存器中。
© www.soinside.com 2019 - 2024. All rights reserved.