最近阅读了公司同事的代码,代码片段如下:
代码环境:裸机编程 stm32f103zet6 MDK5(ARMCC编译器)
代码内容:MENU_t是其中的核心结构体,Menu_t类型SysMenu1和SysMenu2是全局变量。
- void TIM6_IRQHandler(void)
- {
- if (TIM_GetITStatus(TIM6, TIM_IT_Update) != RESET)
- {
- TIM_ClearITPendingBit(TIM6, TIM_IT_Update);
- MenuProcess(&SysMenu1); /* 因为SysMenu1和SysMenu2的处理过程类似,所以将全局变量的指针作为形参带入函数中,而没有直接在函数内部使用全局变量 */
- }
- }
复制代码
代码思考:
问题1:在ISR中调用MenuProcess(&SysMenu)一定会产生临界资源问题吗?
问题2:MenuProcess():是不可重入函数(按照我之前的理解,在函数内部使用全部变量是不可重入函数,那函数的实参是全局变量或者全局变量指针该怎么办?)?
问题3:我理解:所谓的临界资源,是担心数据在另外一个线程被“意外的”修改(ISR算是另外一个线程)。如果在MenuProcess(&SysMenu)中只是查看(&SysMenu)的一个成员变量,而没有进行任何赋值操作,那还会产生临界资源问题嘛(此时仅仅只有一个线程可以执行读/写操作)?
恳请大神指教,感谢。。。
我对这个问题的解决思路是绕开它。
1,更换更高档的MCU。
2,不开中断,用查询法。
一周热门 更多>