Keil调试STM32:未定义OS_EVENT以及停在“BEAB BKPT 0xAB”处等问题

记录一次问题解决过程:

1、未定义OS_EVENT

新修改的Keil工程,在x.h头文件中一旦定义extern OS_EVENT信号量,则报错:未定义OS_EVENT。

查看报错的问题,发现ucosii.h中包含了头文件a.h,而a.h中包含了x.h。而OS_EVENT是在ucosii.h中定义的,从而导致了这个错误。改正这种包含问题就OK了。

2、uC/OS系统跑不起来

编译成功后,下载程序运行,OS系统跑不起来。

原来是ucosii.h中包含的头文件a.h中,有包含stm32f4xx.h文件,因为问题1屏蔽了a.h的包含关系。直接在ucosii.h包含stm32f4xx.h文件就可以了(107芯片似乎不用包含对应库的头文件)。

3、调试程序停在"BEAB BKPT 0xAB"处

调试程序点击运行后,会自动停在"BEAB BKPT 0xAB"处,再点击仍然。多点几次程序才会跑起来。

而且,芯片断电重启后,程序不会运行,应该也是卡在那里。

原因是使用了printf函数引起的问题:

一种是没有定义fputc重定向函数;一种是定义了,但没有在工程配置中勾选"Use microLIB"。

而我的工程2个问题都存在。

解决办法:

1)定义fputc重定向函数,并使能"Use microLIB"。

2)使用以下代码 ,可不使能"Use microLIB":

复制代码
void _sys_exit(int x)
{
    x = x; 
}

//重定义fputc函数
int fputc(int ch, FILE *f)
{
    return ch; //没有实际输出,可直接返回。
}
相关推荐
Johnson Sheng2 小时前
STM32H743单片机实现ADC+DMA多通道检测
stm32·单片机
吃货界的硬件攻城狮4 小时前
【STM32 学习笔记】EXTI外部中断
笔记·stm32·学习
吃货界的硬件攻城狮4 小时前
【STM32 学习笔记 】OLED显示屏及Keil调试
笔记·stm32·学习
狄加山6754 小时前
STM32的智慧农业系统开发(uC/OS-II)
stm32·单片机·嵌入式硬件
xyd陈宇阳5 小时前
嵌入式开发面试题详解:STM32 与嵌入式开发核心知识全面解析
stm32·单片机·嵌入式硬件·面试
Johnson Sheng6 小时前
STM32H743单片机实现ADC+DMA多通道检测+事件组
stm32·单片机·嵌入式硬件
小智学长 | 嵌入式6 小时前
STM32部分:3、STM32CubeMX 工程创建
stm32·单片机·嵌入式硬件
hfdz_00426 小时前
USB接口的PCB设计
嵌入式硬件·硬件工程·pcb工艺
小智学长 | 嵌入式8 小时前
单片机-STM32部分:5、STM32CubeMX实现HAL点灯
单片机·嵌入式硬件
星光始终闪耀8 小时前
第十五届蓝桥杯单片机国赛-串口解析
单片机·职场和发展·蓝桥杯