- 博客(13)
- 收藏
- 关注
原创 Keil MDK 优化等级简介
尽量不要用最高优先级,之前有碰到过调试器在最高优先级时生成的代码跑飞,不管怎么调试,总有一小块功能出问题,有尝试过去keil官网找优先级高的代码编写说明,但是没有找到,最终只能选择去优化代码结构,降低优先级来解决问题了。特点:有限的优化,去除无用的inline和无用的static函数、死代码消除等,在影响到调试信息的地方均不进行优化。在适当的代码体积和充分的调试之间平衡,代码编写阶段最常用的优化等级。等级3和等级2除了执行相同的优化,还有在空间和时间之间的平衡优化在生成的代码中比等级2更重的空间或时间。
2025-03-15 21:03:23
1191
原创 记录一次栈溢出问题的调试
具体到每个函数也给出最大的栈深度 Max Depth,同时也给出函数本身的代码量大小和使用的栈大小。上图是我的HTM文件,最大栈是592字节(不考虑中断嵌套),启动文件中默认栈大小是0x1000=4096字节。继续分析HTM 文件,发现有几个函数都是500+的栈大小,那么,运行起来当嵌套层数多时,是可能有溢出的风险!栈(stack)空间,用于局部变量,函数调时现场保护和返回地址,函数的形参等。(1) 烧录了此前版本的程序,发现运行正常。找到一个栈大的函数,打开看:如下,内部定义了256字节的数组。
2025-03-11 19:23:35
497
原创 IIC、SPI总线通信的个人总结
近几年一些高级的芯片,比如GD32H7 系列,支持 数据线为4线模式(通常命名为IO0、IO1、IO2和IO3)的 QSPI 和数据线为8线模式的OSPI。使用 FMC,可以用来外挂 NOR/PSRAM 型存储器,SRAM 型存储器,NAND 型存储器,SDRAM等存储器。很多时候,主机的NSS引脚是不用的,直接使用一个任意的GPIO普通引脚片选从机,方便灵活;主机要确保在发送时钟信号前,控制从机的NSS引脚要拉低,通信结束后等待Busy后再拉高NSS!在SCK 的每个时钟周期,传输1bit 数据。
2025-02-28 19:26:51
1244
原创 几个类型转换的小函数(备用)
一些应用时,上位机下发的格式是 1个16 bit 数对应的 4个字符,下位机要转成十进制计算。项目需要,比如:上位机指令下发了3.3V 电压对应的整型数(放大1000倍)3300,程序中需要按照其二进制的每个bit 配置处理,收到后先转换。以上:若传入HexVal,返回值是0x0F,十进制15.首先,单字符转换: 16进制字符转10进制数.(二)字符/字符串型转换成十进制。(一)十进制转换成字符串。仿真测试如下,转换正确。
2025-02-28 12:32:53
230
原创 定时器捕获模式测量输入信号周期的2种方法
(1)输入源: 配置定时器,比如TIMER0-CH0 配置输出20KHZ 占空比为50%的PWM 信号,配置到PE9 脚输出。(1)输入源: 配置定时器TIMER0-CH0 配置输出18.75MHZ占空比为50%的PWM 信号,配置到PE9 脚输出。即:输入信号的f=20khz,T=50us. 测量信号的f=1Mhz, T=1us, 刚好是输入信号的50倍。(2)配置定时器TIMER1-CH1 到脚PA5, 硬件连接PE9到PA5;实验尝试: 如果输入信号的频率再高,这种方法测量频率就不准确了。
2025-01-23 15:09:38
570
原创 定时器(主从模式)捕获PWM信号并产生DMA请求处理
于是,先基于GD32H759 开发板做调试,今天下午已经调通。我还是第一次这么使用,做个小总结。
2025-01-22 18:44:31
648
原创 KeilAC5/AC6 编译器问题
最近基于GD32H759I 开发板和DEMO做项目开发,首次用到了keil MDK 里面的AC6编译器(之前都是AC5),在绝对地址定位数组到SDRAM 区域时,先后遇到了烧录和debug 问题,具体如下。
2024-07-31 17:24:50
320
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅