// 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; // }
// int std::fputc(int ch, std::FILE *f) // { // // lace your implementation of fputc here // // e.g. write a character to the USART // while((USART3->SR&0X40)==0);//???··???,?±??·????ê±? // USART3->DR = (u8)ch; // // Loop until the end of transmission // return ch; // } //#endif //EN_USART3_PRINTF
删除任意代码前:
删除任意代码后:
仅仅只是Code 小了一点 就正常启动了,复位后也正常
-------------------------------
堆栈溢出,首先有没有用OS,其次检查 有没有使用c库函数,现在的C库必须告别,除了原子哥说的printf之类,memset,memcpy等等,都有可能造成栈空间爆了。
---------------------------------
原子哥。
我原来使用了printf函数,经你说过后来全都如下注释了,但是程序还是那样:
/******************** printf support ***********************/
//#ifdef EN_USART3_PRINTF
//#pragma import(__use_no_semihosting)
// extern "C" void _sys_exit(int x)
// {
// x = x;
// }
// namespace std
// {
// 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;
// }
// int std::fputc(int ch, std::FILE *f)
// {
// // lace your implementation of fputc here
// // e.g. write a character to the USART
// while((USART3->SR&0X40)==0);//???··???,?±??·????ê±?
// USART3->DR = (u8)ch;
// // Loop until the end of transmission
// return ch;
// }
//#endif //EN_USART3_PRINTF
我又仔细检查了硬件电路,确认电路没有问题。又烧写了以前的程序和其他的大工程,都可以正常运行。
所以我把错误锁定在软件上。
我也没有使用过UCOS,没有内存分配,没有文件系统,只有一个STM32F4 emulation_eeprom,用于将一部分空间用作存储器。
---------------------------------
没有操作系统,也没有内存管理之类的,有个printf也已经注释掉了。
你所说的c库函数是STM32库函数吗?我不太理解。
但是我用了《STM32F4 emulation_eeprom》这个开源代码,是将部分FLASH初始化为EEPROM用于保存数据。
一周热门 更多>