初级会员
- 积分
- 115
- 金钱
- 115
- 注册时间
- 2017-7-12
- 在线时间
- 26 小时
|
5金钱
本帖最后由 许恒博 于 2017-7-22 17:12 编辑
手上的板子是原子的STM32F767,按照原子文档里的方案照着移植的!出现一个问题很奇怪
初始化在启动任务的临界区前时方针调试就会卡死在GUI_Init(); ,系统无法创建其他任务,一直在跑空闲任务;
如放在临界区后就可以正常运行;
然而即使放在临界区后初始化正常,但是在实际使用中,相关emwin操作如果在任务的while循环以前就会死机,但是放在while循环中就可以正常运行!
代码如下:
1、无法正常运行
void start_task(void *p_arg)
{
OS_ERR err;
CPU_SR_ALLOC();
p_arg = p_arg;
CPU_Init();
....此处省略
__HAL_RCC_CRC_CLK_ENABLE();
WM_SetCreateFlags(WM_CF_MEMDEV);
GUI_Init(); //此处无法正常运行
WM_MULTIBUF_Enable(1);
OS_CRITICAL_ENTER();
....此处省略
OS_TaskSuspend((OS_TCB*)&StartTaskTCB,&err);
OS_CRITICAL_EXIT();
}
2、可以正常运行
void start_task(void *p_arg)
{
OS_ERR err;
CPU_SR_ALLOC();
p_arg = p_arg;
CPU_Init();
....此处省略
OS_CRITICAL_ENTER();
....此处省略
OS_TaskSuspend((OS_TCB*)&StartTaskTCB,&err);
__HAL_RCC_CRC_CLK_ENABLE();
WM_SetCreateFlags(WM_CF_MEMDEV);
GUI_Init(); //放在此处可以正常运行
WM_MULTIBUF_Enable(1);
OS_CRITICAL_EXIT();
}
3、显示花屏(红色代码运行是正常的,但是执行完了之后执行完GUI_Delay(100);就会花屏,任务运行没问题就是显示花了)
void emwindemo_task(void *p_arg)
{
GUI_CURSOR_Show();
GUI_SetBkColor(GUI_BLUE);
GUI_Clear();
GUI_SetFont(&GUI_Font24_ASCII);
GUI_SetColor(GUI_YELLOW);
GUI_DispString("HELLO WORD!");
while(1)
{
LED1_Toggle;
GUI_Delay(100);
}
}
4、系统可以正常工作,显示也是正常的;
void emwindemo_task(void *p_arg)
{
GUI_CURSOR_Show();
while(1)
{
GUI_SetBkColor(GUI_BLUE);
GUI_Clear();
GUI_SetFont(&GUI_Font24_ASCII);
GUI_SetColor(GUI_YELLOW);
GUI_DispString("HELLO WORD!");
LED1_Toggle;
GUI_Delay(100);
}
}
检查了很多地方,跟原子的例程没有什么区别。甚至最后把工程中emwin相关文件,melloc文件夹、连startup_stm32f767.s文件都替换成原子例程中的文件了,但是还是一样的效果。
原子的例程跑是没问题的,我的这个工程怎么都不行,有没有做过的大神指导一下!不胜感激!
|
|