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

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管理
行使您的权利
官方最新发布
STM32Cube扩展软件包
意法半导体边缘AI套件
ST - 理想汽车豪华SUV案例
ST意法半导体智能家居案例
STM32 ARM Cortex 32位微控制器
关注我们
st-img 微信公众号
st-img 手机版