记笔记:USBH_Process 进入HardFault_Handler 错误用法。
今天在写U盘截图功能程序的时候碰到了一个奇怪的问题。因为界面很多的原因,想偷懒 将包含有 USBH_Process的函数
void PrintScreen( void ) /*截屏程序长按 ENT 键 执行 */
直接放在了
void bsp_Idle(void)
空闲程序中执行
导致插上U盘就直接进入了 HardFault_Handler 中断。
百思不得其解,问了硬汉大神,
这个函数不可以在中断里面调用
他是根据中断反馈的状态做处理的
所以务必在主任务里面循环调用
。
而裸机程序中void bsp_Idle(void)函数一直在被
void bsp_DelayMS(uint32_t n);
函数掉调用 间接的被滴答定时器调用,导致了异常中断。希望大家也引以为戒不要像我一样犯这样的错误了。
可以在while 函数下调用包含有 USBH_Process 的函数,或者直接调用也行。
例如
while (1)
{
bsp_Idle(); /* 这个函数在bsp.c文件。用户可以修改这个函数实现CPU休眠和喂狗 */
USBH_Process(&USB_OTG_Core, &USB_Host);
//用户代码
}
非常感谢楼主分享经验。
页:
[1]