完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
某个变量没用到,仅仅计算出来了而已,调试时候,在变量窗口不会显示出该变量的值,如果用到了,比如那句printf函数有效,那么窗口就能显示出此变量的值了,应该是该mdk软件智能化了?还是咋滴,反正我感觉反而这样不好用。
反之我测试了visual studio和qt creator都不是这样,都是一样的正常显示变量的值。补充一句,visual studio新建c++项目时候,就建一个win32控制台应用程序,然后不要选空项目,就让它自带一个stdafx.h这样的头文件,因为它里面给你包含了需要常用的头文件的,所以反而是更好用了,就这样。 再来看个我认为是mdk bug的问题,经过大量测试,我发现函数的返回值是double型的话,调试过程中此函数内的其他变量的值显示都不正常,要么一直是0,要么随意变化,事实上就是没有按照程序运行那样正常实时更改显示,但是最后结果显示却是正确的,我也是服了,这应该是keil mdk对调试时候double返回类型函数的变量内容显示有bug。而且printf函数打印double也都是按照float型6位长度打印罢了,(这两方面double都不太友好,我感觉应该是double型是64位,但是单片机是32位的原因,导致了运算时候可能都得再拼接一次,而且keil还有bug,等等原因吧),所以为了心里舒坦,为了调试方便,还是都用float型吧,大部分而言这个精度都是够了的,而且支持非常友好,如果精度实在不够,自己乘以一个1000啥的变成一个整形啥的,最后再自己处理还原一下吧,这种方式肯定是没问题的,而且还不用字节拼接,运算速度也快,自己也是可控的。 如下所示,这样就能正常显示了,总之别用double 测试代码如下: #if 1 float func() { double a=0; int b=1; int c=2; int d=b+c; a=a+d; return a; } int main(void) { func(); // delay_init(); //延时函数初始化 // NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //设置NVIC中断分组2:2位抢占优先级,2位响应优先级 // uart_init(115200); //串口初始化为115200 // LED_Init(); //LED端口初始化 // MeasureTimeStart(); // MeasureTimeEnd(); // test(); while(1); } #endif 还有就是不用设置什么,调试时候变量值也都是可以实时更新显示的,我的mdk是5.26 我还测了一下,人家qt creator就不这样,人家就是正常的 然后我又用visual studio2013也测了,人家也不这样,人家也是正常的 看了keil mdk要想做好IDE集成开发环境,还需要努力呀。 |
|
|
|
只有小组成员才能发言,加入小组>>
调试STM32H750的FMC总线读写PSRAM遇到的问题求解?
1609 浏览 1 评论
X-NUCLEO-IHM08M1板文档中输出电流为15Arms,15Arms是怎么得出来的呢?
1540 浏览 1 评论
970 浏览 2 评论
STM32F030F4 HSI时钟温度测试过不去是怎么回事?
681 浏览 2 评论
ST25R3916能否对ISO15693的标签芯片进行分区域写密码?
1587 浏览 2 评论
1861浏览 9评论
STM32仿真器是选择ST-LINK还是选择J-LINK?各有什么优势啊?
644浏览 4评论
STM32F0_TIM2输出pwm2后OLED变暗或者系统重启是怎么回事?
515浏览 3评论
528浏览 3评论
stm32cubemx生成mdk-arm v4项目文件无法打开是什么原因导致的?
503浏览 3评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-20 22:39 , Processed in 0.665569 second(s), Total 47, Slave 40 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号