完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
|
|
相关推荐
1个回答
|
|
移植一些算法到STM32上,算法在PC上能够运行,而移植到STM32的时候就会出现问题,
总结来说主要是因为编译器的版本不同,MDK5的编译器是很古老的编译器,有些C语法会有问题。 常见的问题就是: 1.结构体赋值的时候,在32里面的代码,结构体赋值必须要一个变量一个变量的赋值,不能够直接赋值。 2.定义变量的时候不能用的时候才定义变量,需要将变量放在这个模块的前面 将算法移植到STM32的时候,首先要考虑的就是STM32的内存大小是否足够大,如果不够大,一般就是报有.ANY的一些错误。(所以建议一开始移植算法的时候使用比较好的硬件条件来移植,不然后面出了问题可能都不知道到底在哪里出错了) 如果定义的数组太大,超出了STM32堆栈的大小,那么STM32就会进入Hardfault。(因为进入Hardfault会有延时一行代码,所以建议查看Hardfault的时候建议使用上一盘中JTAG调试窗口中查看中断的窗口,能够更明白的清除Hardfault在哪里产生的) 调试算法一定要善用汇编语言,用汇编语言看C语言的本质. 移植算法的时候也经常需要使用动态内存分配,STM32自带的SRAM又很小,很难满足算法需要的SRAM要求,所以需要在32中外扩SRAM芯片。既然需要动态内存分配,自然也就需要内存管理了。在STM32中c语言标准动态内存分配的关键字malloc也就没这么好用了,最好就是要使用正点原子的内存管理使用,用它提供的分配函数来进行内存的分配与管理。 好了,说了这么多,终于说到了标题的内存了,在调试内存管理的时候,为了防止有申请的内存溢出堆栈的大小,因此在申请的时候最好每一步都调用一次的内存使用率函数查看一下现在内存占用率。防止堆栈溢出。而且在运行的时候,最好能够清楚的了解到这个分配程序是在哪一个文件的哪一行,这样能够方便我们的调试。 这个函数的演示效果: 分享一下H7将内存使用率和获取到这个函数在哪一行上传到串口的函数。(即实现上面效果的函数) .c文件中的上传代码: void _uart_send_memused(const char *fileName, int line, u8 memx) { static const char* TEXT[4] = {"SRAMIN", "SRAMEX", "SRAM12", "SRAM4"}; u16 FingerVeinRun_memused=0; u8 paddr[20]; u8 send_cnt = 0; printf("%s: ", TEXT[memx]); FingerVeinRun_memused = my_mem_perused(memx); sprintf((char*)paddr,"%d.%01d%%",FingerVeinRun_memused/10,FingerVeinRun_memused%10); for(send_cnt=0; send_cnt<=4; send_cnt++) { USART1->TDR = paddr[send_cnt]; //等待发送结束 while((USART1->ISR & 0X40) == 0); } printf("t%st%d", fileName, line); printf("rn"); } 在.h中需要添加的一个宏定义。 #define uart_send_memused(memx) _uart_send_memused(__FILE__, __LINE__, memx) 获取到文件名和行数不单单只可以在内存管理函数中使用,也可以看你个人的需求移植到其他的地方。 |
|
|
|
只有小组成员才能发言,加入小组>>
调试STM32H750的FMC总线读写PSRAM遇到的问题求解?
1617 浏览 1 评论
X-NUCLEO-IHM08M1板文档中输出电流为15Arms,15Arms是怎么得出来的呢?
1543 浏览 1 评论
977 浏览 2 评论
STM32F030F4 HSI时钟温度测试过不去是怎么回事?
683 浏览 2 评论
ST25R3916能否对ISO15693的标签芯片进行分区域写密码?
1595 浏览 2 评论
1863浏览 9评论
STM32仿真器是选择ST-LINK还是选择J-LINK?各有什么优势啊?
644浏览 4评论
STM32F0_TIM2输出pwm2后OLED变暗或者系统重启是怎么回事?
515浏览 3评论
531浏览 3评论
stm32cubemx生成mdk-arm v4项目文件无法打开是什么原因导致的?
504浏览 3评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-22 03:47 , Processed in 1.186816 second(s), Total 75, Slave 59 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号