先给您拜年!
问题如下:
本人使用STM32F103 + Keil MDK 4.5 + RTL,手动切换多任务(实际上没有切换)。
已查过,堆还有超大余量,栈也很多剩余,只做一个简单的循环,(不做任务切换),只要执行以下一段代码,就会HardFault_Handler()
哭啊,过年几天一直在找这个问题,最后发现是这一断代码的问题。。。
我现在的栈也是用的8字节对齐,请帮我看看下面两个三角函数有没有可能造成崩溃?
r = 90 - (GPSInfo.SatInfo.Elevation);
//r/= 1.5;
r*=1.2; //缩放R
xd= r * sin(GPSInfo.SatInfo.Azimuth * PI/180 );
x = 267 + xd; //以屏幕中心点偏移
yd = r * cos(GPSInfo.SatInfo.Azimuth * PI/180);
y= 120 - yd; //以屏幕中心点偏移
把这几行注释掉就没问题了,,,
是我的Keil标准库没设置好?还是它有BUG?还是sin / cos的参数需要先断言?
请香主指点一下,感觉这C标准库无法驾驭,是不是要改用MicroLib?
还有,之前发现snprintf里用%f也会出错,找Keil论坛说是任务切换,什么栈不是8位对齐。。。而且我也只是用的“协同式”手动切换任务...
请高人给指一条出路。。。 |