|
前几天移植好了COSIS-RTOS,今天把flash的例子加入进去,但是出现如下的问题,很奇怪
void AppTaskKeyPro(void const *argument)
{
uint8_t ucKeyCode;
while(1)
{
ucKeyCode = GetKey();
if (ucKeyCode != KEY_NONE)
{
switch(ucKeyCode)
{
case JOY_DOWN_U:
osSignalSet(HandleTaskMsgPro,0x01); /* 发送事件标志 */
printf("按键上按下\r\n");
break;
case JOY_DOWN_D:
osSignalSet(HandleTaskMsgPro,0x02); /* 发送事件标志 */
printf("按键下按下\r\n");
break;
default:
break;
}
}
osDelay(20);
}
}
void AppTaskMsgPro(void const *argument)
{
osEvent evt;
while(1)
{
evt = osSignalWait(0x03, 500); /* 等待事件标志 */
if(evt.status == osEventSignal)
{
LedToggle(3);
}
}
}
首先定义一个任务是按键处理任务,当发送了2个事件后,让第三个灯状态取反,这个是正常的。
当把flash部分的程序加入后,在sf_ReadID函数中设置断点,能够读到ID值,
1、如果在上面void AppTaskMsgPro(void const *argument)函数中,LedToggle(3)后面加入sf_ReadTest();时,按下任何一个按键后,程序就死了,main函数堆栈溢出overflow,不按按键程序不会死。
2、最奇怪的是如果把sf_ReadTest()屏蔽,甚至把sf_InitHard();初始化函数都屏蔽,此时程序是恢复到最初“事件标志组”程序,应该是能够正常工作了,但是此时如果按任何按键,程序还是死了,还是main函数堆栈溢出overflow。
只有把flash相关的整个文件移除才正常。
以上2个问题应该怎么处理才对呢? |
|