printf进入hardfault

2019-07-14 15:32发布



原因已找到:
由于调度器启动前进入了Systick中断导致系统运行异常。上电后就调用__set_PRIMASK(1);关闭中断,后续考虑参考ST官方的方法,判断系统是否启动再决定是否调用OS的时基。


原问题:
以下是开始时提出问题,现在更新问题,发现不是串口的问题,如果初始化后配置时钟后在OS启动前加个while(1);,同样会进入hardfault.不知为何

原问题如下:

遇到一个问题,freeRTOS启动调度器前使用printf会进入HardFault,单步调试就可以正常打印,而且printf语句放到任务中是可以正常打印的,不知是何原因。

#ifdef __GNUC__
/* With GCC/RAISONANCE, small printf (option LD Linker->Libraries->Small printf
   set to 'Yes') calls __io_putchar() */
#define PUTCHAR_PROTOTYPE int __io_putchar(int ch)
#else
#define PUTCHAR_PROTOTYPE int fputc(int ch, FILE *f)
#endif /* __GNUC__ */


PUTCHAR_PROTOTYPE
{
    print_log_putchar(ch);//封装串口发送

    return ch;
}

//会死在下面这个函数中,
void print_log_register_io(struct print_log_interface fio)
{
    fprint_log = fio;
    print_log("print log inited! ");//printf_log就是printf进行宏定义,完整文件见附件。
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。