|
用的alientek的程序,重新定义printf,如下格式:
#pragma import(__use_no_semihosting)
//标准库需要的支持函数
struct __FILE
{
int handle;
/* Whatever you require here. If the only file you are using is */
/* standard output using printf() for debugging, no file handling */
/* is required. */
};
/* FILE is typedef’ d in stdio.h. */
FILE __stdout;
//定义_sys_exit()以避免使用半主机模式
_sys_exit(int x)
{
x = x;
}
int fputc(int ch, FILE *f)
{
USART1->DR = (u8) ch;
while((USART1->SR&0X40)==0);//循环查询,直到发送完毕
}
系统增加了1个串口接收中断、1个定时器中断,
于是莫名其妙的事发生了,每次调用printf时,输出整数,不管多么长的表达式都不会死机,但是用%f输出浮点数时,即使很短的表达式,偶尔会莫名其妙的死机掉!!出现概率还不一定~~
例如下面这么长的整数输出都 不会死机
printf("gy;%i;%i;%i; aa;%i;%i;%i; agl;%i;%i;gy;%i;%i;%i; M;%i;%i;\r",aaa,bbb,ccc,ddd,eee)...
但是下面这句话将死在冒号位置....
printf("Get ntlvalue:%f,\r",ntlvalue);
在MemManageException中断中,关掉while(1)循环,依然死机,但是在MemManageException增加一个发送语句,又不死机了。。。
void MemManageException(void)
{
/* Go to infinite loop when Memory Manage exception occurs */
USART1->DR = 'a'; USART3->DR ='a';
}
但是上位机观察 死机位置并没有多个'a'字符
传说中的苦逼毛病啊,不知有没有大虾遇到过啊?。。。~~ |
阿莫论坛20周年了!感谢大家的支持与爱护!!
你熬了10碗粥,别人一桶水倒进去,淘走90碗,剩下10碗给你,你看似没亏,其实你那10碗已经没有之前的裹腹了,人家的一桶水换90碗,继续卖。说白了,通货膨胀就是,你的钱是挣来的,他的钱是印来的,掺和在一起,你的钱就贬值了。
|