- 博客(8)
- 收藏
- 关注
原创 keil编译之关键字volatile
变量被volatile修饰过后,就相当于告诉编译器:这个变量的值随时会被修改,例如运行系统、中断程序、或者硬件都能修改该变量的值。由于变量的值随时可能被修改,就要求这个变量的值在内存中是随时可以被访问到的。这意味着编译器不能对该变量进行优化操作,例如“将变量的值缓存在寄存器中,导致内存无法访问该变量的值”。例如,在轮询硬件时,程序可能陷入死循环;所以,在某些特定情况下,相反地,如果一个变量没有被声明为volatile,编译器就会假设它的值只会被预期的方式修改。因此,编译器能够对该变量进行优化操作。
2024-05-30 14:47:00
434
原创 J-flash烧写GD32F5芯片,PC of target system has unexpected value after programming
Reset改为Halt。
2024-04-11 10:43:43
489
原创 前置校准未完成,导致GD32芯片ADC采样不准问题
ADC采样值有时正常,有时异常。且正常值与异常值存在固定偏差。ADC配置完成后,再配置定时器(定时中断内启动ADC采样)。ADC未完成校准,就进行ADC采样,会导致采样值异常。
2024-04-03 10:16:25
1406
1
原创 触发编程保护,导致芯片无法下载程序问题
基于arm进行开发时,有可能会误触发芯片的编程保护,现象为:芯片能被识别,但无法下载程序。需按照芯片手册,使用命令行方式配置寄存器,解除编程保护。
2024-03-02 10:12:09
906
原创 Arm使用keil仿真调试才能运行问题
使用keil仿真调试时,Arm单片机程序才能运行的问题。本文对该问题的产生原因进行描述,并给出解决方案。
2024-02-25 23:38:16
1414
1
原创 arm程序 SystemInit函数中加调试变量无效问题
按照常理,进入systeminit函数后,dbg_flag应该=1。笔者在进行arm芯片调试时,在systeminit函数中加入调试变量dbg_flag,如下图。笔者起初误以为是systeminit函数未执行,导致dbg_flag一直未初始化值100。启动文件如下,systeminit函数执行完毕后,会执行C库函数__main。dbg_flag属于全局变量,在__main函数中被赋初始值100。上述描述可知,执行ysteminit函数后,在__main函数内会。3、跳转到__rt_entry函数。
2024-02-22 19:54:44
447
1
原创 GD32调用UART寄存器重置函数(usart_deinit)后,发送完成标志(TC)置位
调用usart_deinit之后,清除TC标志位。调用usart_deinit之前,TC标志为0。调用usart_deinit之后,TC标志为1。TC标志提前置位,影响下次发送完成的判断。
2024-01-17 08:45:26
609
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人