最近,遇到个奇怪的问题,在O(0)优化下会进hardfault,而在O(1)优化下不会。
最终加了一下代码才ok。
// 半主机模式 在O0优化下 需要以下代码
#if 1
__ASM(".global __use_no_semihosting");
struct __FILE
{
int handle;
};
FILE __stdout;
void _sys_exit(int x)
{
x = x;
}
char *_sys_command_string(char *cmd, int len)
{
return 0;
}
void _ttywrch(int ch)
{
ch = ch;
}
int fputc(int ch, FILE *f)
{
return ch;
}
#endif
总结:原来,在O(0)优化下会对fputc和_ttywrch进行编译,然后又调用到了这两个函数,最终导致程序直接跑死,进入hardfault。现在重新定义直接将其return了,不会跑死了