* UPDATE *STM32 printf的问题
这里是我发现了什么。每当我在那里有这个功能,它实际上不会让代码锁定。实际上,读RTC I2C函数的执行速度非常慢,但代码仍然可以正常运行,但每次读RTC时都必须等待很长时间才能通过。所以最终发生的情况是RTC有一个报警中断,并且这引发了ISR内部的其他I2C交互,所以它看起来像是在试图同时进行两个i2c通信,因此减慢了过程。我删除了ISR中的函数,现在它的工作我将继续调查。
我在使用IAR 5.40编程STM32F103微代码时遇到了这个问题我有这个函数,如果我尝试printf一个局部变量,它会导致代码在另一个点的方式下冻结,然后它甚至到达那个函数。
什么可能导致这?
这是功能
u8 GSM_Telit_ReadSms(u8 bSmsIndex)
{
char bTmpSms[3] = { 0 };
itoa(bSmsIndex, bTmpSms, 10); // converts the smsindex into a string
printf("index = %s\n", bTmpSms); //this printf caused the code to get stuck in the RTC // byte read function !!!!!!!
GSM_Telit_RequestModem("AT+CMGR=""1", 10, "CMGR", 5, 0);
return 1;
}
我想这也和这不引起我经历
u8 GSM_Telit_ReadSms(u8 bSmsIndex)
{
char bTmpSms[3] = { 0 };
itoa(bSmsIndex, bTmpSms, 10);
printf("index = 2\n");
GSM_Telit_RequestModem("AT+CMGR=""1", 10, "CMGR", 5, 0);
return 1;
}
锁没有任何启用的优化,并试图在代码卡从我的I2C RTC读取一个字节,但只要我删除这个printf("index = %s\n", bTmpSms);
或使用这个而不是printf("index = 2\n");
那么一切都很开心任何想法?
编辑:bSmsIndex实际上永远不会超过30个,即使如此,在调用此函数之前,锁定会发生在wayyyy上。
你是说即使这个函数还没执行一次,锁定会发生吗? – 2010-10-12 19:04:26
是的,就是这样! – jramirez 2010-10-12 19:24:58
哦 - 这是一个非常有趣的方面,直到现在我才意识到。当您停留在读取I2C RTC时,堆栈是否会显示任何有趣的内容?你在使用多任务吗? – 2010-10-12 19:46:49