请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
器件型号:TM4C129ENCPDT 我正在使用供应商提供的 DHCP 库在 W5500芯片上实现 DHCP、但我担心该库可能会被错误地同步。 该库使用易失性计数器来检测超时、并假设有两个线程:一个线程重置计数器并检查计数器是否已过期、另一个线程使其递增。 声明如下:
volatile uint32_t dhcp_tick_1s = 0; // unit 1 second
这里是正在使用的计数器:
/* Reset the DHCP timeout count and retry count. */
void reset_DHCP_timeout(void)
{
dhcp_tick_1s = 0;
dhcp_tick_next = DHCP_WAIT_TIME;
dhcp_retry_count = 0;
}
void DHCP_time_handler(void)
{
dhcp_tick_1s++;
}
在我看来 、这个代码只在 DHCP_TICK_1s acesses 为原子时有效、但是我找不到任何文档。 实际上 、ARM 优化 C/C++编译器 v18.1.0.LTS 用户指南 意味着相反的:
•不支持原子操作(在 C++11标准中引入)
•不支持原子体和存储器模型的数据依赖项排序(在 C++11标准中引入)
那么 、上面的代码是否正常? 如果没有、如何实现具有原子增量和复位的共享32位计数器?