[问题] 嵌入式特殊语意

楼主: TianBonBon (田蹦蹦)   2017-04-14 14:14:11
开发平台(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),
实际执行时会发生啥不可预期的结果吗?
作者: soheadsome (师大狗鼻哥)   2016-04-14 14:14:00
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:00
volatile...
作者: james732 (好人超)   2017-04-14 16:27:00
那个tmp变量好像非必要?
作者: changenew (星巴克天空有绿茶.....)   2017-04-14 17:00:00
volatile是关键
作者: coldStart   2017-04-14 17:24:00
个人猜测是要强制更新变量
作者: Hazukashiine (私は幸せです)   2017-04-14 17:40: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都一样?
作者: james732 (好人超)   2017-04-14 20:45:00
这个index看起来也不像是会自己改变的hardware reg
作者: xvid (DivX)   2017-04-16 00:19:00
我猜以前tmp还有被拿来做其他运算 后来被删掉了?

Links booklink

Contact Us: admin [ a t ] ucptt.com