记录一次问题解决过程:
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; //没有实际输出,可直接返回。
}