开发平台(Platform): (Ex: Win10, Linux, ...)
CortexM0
编译器(Ex: GCC, clang, VC++...)+目标环境(跟开发平台不同的话需列出)
gcc-arm-none-eabi-4_8-2014q1-20140314-linux
问题(Question):
目前正在玩nRF51822,核心是CortexM0,没有OS,
在追踪它提供的一些util时发现某个有趣的写法,
搞不懂它为何要拆成两行来写,
static __INLINE uint8_t app_sched_queue_empty()
{
uint8_t tmp = m_queue_start_index;
return m_queue_end_index == tmp;
}
如果改写成return(m_queue_end_index == m_queue_start_index),
实际执行时会发生啥不可预期的结果吗?
楼主: TianBonBon (田蹦蹦) 2017-04-14 14:16:00
static volatile uint8_t m_queue_start_index;static volatile uint8_t m_queue_end_index;
作者:
notBeing (read and be read)
2017-04-14 15:56:00volatile...
作者:
changenew (星巴克天空有绿茶.....)
2017-04-14 17:00:00volatile是关键
作者: coldStart 2017-04-14 17:24:00
个人猜测是要强制更新变量
作者:
chuegou (chuegou)
2017-04-14 19:15:00同意volatile是关键
作者:
LPH66 (-6.2598534e+18f)
2017-04-14 19:16:00好像只有差在 == 不保证取值顺序的样子?写两行的话中间有个 ; 断开, 所以 start 必先于 end 取值不过我不太确定作者是不是有这个意图就是了volatile 应该只是保证取来的必定是最新结果而已
作者:
TWkobe (中华柯比)
2017-04-14 19:46:00会不会是不能保证每次queue_start_index都一样?
这个index看起来也不像是会自己改变的hardware reg
作者:
xvid (DivX)
2017-04-16 00:19:00我猜以前tmp还有被拿来做其他运算 后来被删掉了?