1. Error[Pe020]: identifier “FILE” is undefined
解决方法
2.Warning[25]: Label ‘Reset_Handler’ is defined pubweak in a section implicitly declared
问题由来:由于IAR编译器版本升级,对汇编语言产生警告
解决方法:在SECTION加上NOROOT
Reset_Handler
LDR R0, =SystemInit
BLX R0
LDR R0, =__iar_program_start
BX R0
PUBWEAK NMI_Handler
SECTION .text:CODE:REORDER:NOROOT(1)
3.Error[Li006]: duplicate definitions for “LED1_TASK_STK”;
解决方法:
今天参考别人程序写程序时出现Error[Li006]: duplicate definitions for
参考程序中将变量和数据定义在(.h)文件中,我也就直接照搬过来,就出现上面的情况,别人用的是MDK,而我用的编译软件是IAR(EWARM)。
解决办法:
IAR(EWARM)不能将变量定义在(.h)文件中,然后我就果断将变量定义放在(.c)文件中,编译OK
4.解决信号不等待,直接进行函数是的问题
问题发生原因:不能在OSInit(); //UCOS初始化
之前定义Semp = OSSemCreate(1); //创建1个信号量
,此时ucos系统还未初始化。无法创建信号量
解决方法:在创建起始任务的时候创建信号量
void StartTask(void *pdata)
{
OS_CPU_SR cpu_sr=0;
pdata=pdata;
Semp = OSSemCreate(1); //创建1个信号量
OS_CPU_SysTickInit((168000000 / OS_TICKS_PER_SEC));
5.调试项目无法进入中断服务函数
问题发生原因:重定义#define KEY2_IRQHandler EXTI15_10_IRQHandler
之后无法使用
解决方法:使用系统的宏定义
void EXTI15_10_IRQHandler(void)
{
OSIntEnter(); //进入中断
//确保是否产生了EXTI Line中断
if(EXTI_GetITStatus(KEY1_INT_EXTI_LINE) != RESET)
{
//清除中断标志位
EXTI_ClearITPendingBit(KEY1_INT_EXTI_LINE);
}
OSIntExit();
}
6. ucosii接收邮箱无法获取到正常的值
问题发生原因:在使用(INT32U *)OSMboxAccept(Mail)
或者(INT32U *)OSMboxPend(Mail, 0, OS_ERR_NONE);
时,因为函数一直获取消息,当无法获取到消息时,函数获取不到正确的变量地址,将会是任意一个地址。
解决方法:(INT32U *)OSMboxPend(Mail, 0, OS_ERR_NONE);无限期等待变量,这样将会等到正确的变量地址到来的时候发生获取
stm32进入硬件中断可能是因为启动文件配置错了
千万不要用stm32板子上的stlink管脚,会导致烧录不进去