初级会员

- 积分
- 51
- 金钱
- 51
- 注册时间
- 2020-1-18
- 在线时间
- 9 小时
|
1金钱
本帖最后由 thwonline 于 2025-12-23 21:26 编辑
最近做一个项目,随着代码和中断功能的增多,开始出现打印异常,打印不出来LOG。
然后我就简单修改了下,我怀疑是编译器把打印那里给优化出问题了,但我KEIL也看了,优化等级0,即没有优化
请教下各位大神,这个地方怎么就会加了 volatile就好了。volatile我知道是让他每次都去内存搬运数据,禁止编译器去缓存拿。但是这个地方就是普通的打印,也没有中断、多线程啥的,实在想不明白为啥
之前正点原子的官方例程代码是这样的
int fputc(int ch, FILE *f)
{
while ((USART1->SR & 0X40) == 0); /* 等待上一个字符发送完成 */
USART1->DR = (uint8_t)ch; /* 将要发送的字符 ch 写入到DR寄存器 */
return ch;
}
//然后我加个全局变量 volatile uint8_t u8data ,取下值在打印就正常了
volatile uint8_t u8data = 0;
int fputc(int ch, FILE *f)
{
while ((USART_UX->SR & 0X40) == 0); /* 等待上一个字符发送完成 */
u8data = (uint8_t)ch;
USART_UX->DR = u8data; /* 将要发送的字符 ch 写入到DR寄存器 */
return ch;
}
|
|