你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

printf进入hardfault

[复制链接]
黑皮男 提问时间:2017-6-1 10:02 /
本帖最后由 黑皮男 于 2017-6-2 18:41 编辑

原因已找到:
由于调度器启动前进入了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!\r\n");//printf_log就是printf进行宏定义,完整文件见附件。 print.zip (1.53 KB, 下载次数: 5)
收藏 评论7 发布时间:2017-6-1 10:02

举报

7个回答
回答时间:2017-6-1 10:34:36
print_log_register_io进行初始化调用了没有,我理解的是,要先进行初始化后,才能正常工作。
黑皮男 回答时间:2017-6-1 10:57:04
安 发表于 2017-6-1 10:34
print_log_register_io进行初始化调用了没有,我理解的是,要先进行初始化后,才能正常工作。 ...

调用了,不调用也没事,不掉用的话就不会打印信息,这里用了指针,调用后才会打印
回答时间:2017-6-1 11:09:48
你的指针这里指向的是否是需要串口输出的函数,可以仿真一下。
黑皮男 回答时间:2017-6-1 11:29:04
安 发表于 2017-6-1 11:09
你的指针这里指向的是否是需要串口输出的函数,可以仿真一下。

串口相关的代码如下  
int uart_putc(unsigned char c)
{
    LL_USART_TransmitData8(UART_INSTANCE, c);
   
    while(LL_USART_IsActiveFlag_TC(UART_INSTANCE)==RESET);
   
    return c;
}

fprint_log.put_char = uart_putc;
   
print_log_register_io(fprint_log);
黑皮男 回答时间:2017-6-1 11:54:19
关于以上问题,应该不是printf的问题,目前使用串口直接发送也会进入hardfault
回答时间:2017-6-1 13:45:51
楼主,应该看一下在执行到哪一步的时候进入的错误,可能的原因是找不到指针,从代码上看,楼主应该检查一下UART_INSTANCE定义是否正确。
黑皮男 回答时间:2017-6-1 14:07:49
安 发表于 2017-6-1 13:45
楼主,应该看一下在执行到哪一步的时候进入的错误,可能的原因是找不到指针,从代码上看,楼主应该检查一下 ...

UART_INSTANCE是USART2,宏定义。单步调试可以正常通过,全速就挂了

所属标签

相似问题

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
微信公众号二维码 微信公众号
手机版二维码 手机版