OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 6287|回复: 4

移植emwin后ucos进hardfault

[复制链接]

8

主题

125

帖子

0

精华

高级会员

Rank: 4

积分
844
金钱
844
注册时间
2013-4-27
在线时间
120 小时
发表于 2015-8-5 14:53:32 | 显示全部楼层 |阅读模式
5金钱
[mw_shl_code=c,true] /////////////////////////UCOSII任务堆栈设置/////////////////////////////////// //START 任务 //设置任务优先级 #define START_TASK_PRIO 0 //设置任务堆栈大小 #define START_STK_SIZE 128 //创建任务堆栈空间 OS_STK START_TASK_STK[START_STK_SIZE]; //任务函数接口 void start_task(void *pdata); //LED任务 //设置任务优先级 #define LED_TASK_PRIO 7 //设置任务堆栈大小 #define LED_STK_SIZE 64 //创建任务堆栈空间 OS_STK LED_TASK_STK[LED_STK_SIZE]; //任务函数接口 void led_task(void *pdata); //TOUCH任务 //设置任务优先级 #define TOUCH_TASK_PRIO 2 //任务堆栈大小 #define TOUCH_STK_SIZE 128 //任务堆栈 OS_STK TOUCH_TASK_STK[TOUCH_STK_SIZE]; //touch任务 void touch_task(void *pdata); //按键扫描任务 //设置任务优先级 #define KEY_TASK_PRIO 6 //设置任务堆栈大小 #define KEY_STK_SIZE 256 //创建任务堆栈空间 OS_STK KEY_TASK_STK[KEY_STK_SIZE]; //任务函数接口 void key_task(void *pdata); u8 res; FIL* f_txt = 0; DIR textdir; u32 NumWritten = 0; int main(void) { delay_init(); //延时函数初始化 NVIC_Configuration(); //设置NVIC中断分组2:2位抢占优先级,2位响应优先级 uart_init(9600); LED_Init(); //初始化与LED连接的硬件接口 BEEP_Init(); //蜂鸣器初始化 KEY_Init(); //按键初始化 TFTLCD_Init(); TP_Init(); FSMC_SRAM_Init(); //初始化SRAM mem_init(SRAMIN); //初始化内部内存池 mem_init(SRAMEX); exfuns_init(); //为fatfs相关变量申请内存 f_mount(0,fs[0]); //挂载SD卡 f_mount(1,fs[1]); //挂载FLASH. font_init();//字库、SPI初始化 RCC_AHBPeriphClockCmd(RCC_AHBPeriph_CRC, ENABLE);//GUI开crc时钟 GUI_Init();//初始化GUI 用到了UCOS和内存管理,初始化函数必须在内存管理初始化之后 OSInit(); //初始化UCOSII OSTaskCreate(start_task,(void *)0,(OS_STK *)&START_TASK_STK[START_STK_SIZE-1],START_TASK_PRIO );//创建起始任务 OSStart(); } //开始任务 void start_task(void *pdata) { OS_CPU_SR cpu_sr=0; pdata = pdata; LCD_Clear(LIGHTBLUE); GUI_DrawGradientV(0,0,320,480,GUI_LIGHTBLUE,GUI_WHITE); POINT_COLOR=BLACK; BACK_COLOR = LIGHTBLUE; LCD_ShowString(60,50,200,16,16,"STM32 UCOS"); LCD_ShowString(60,70,200,16,16,"FATFS TEST"); Show_Str(60,90,200,16,"中文字库显示",16,0); OSStatInit(); //初始化统计任务.这里会延时1秒钟左右 OS_ENTER_CRITICAL(); //进入临界区(无法被中断打断) OSTaskCreate(touch_task,(void*)0,(OS_STK*)&TOUCH_TASK_STK[TOUCH_STK_SIZE-1],TOUCH_TASK_PRIO); //触摸屏任务 OSTaskCreate(led_task,(void *)0,(OS_STK*)&LED_TASK_STK[LED_STK_SIZE-1],LED_TASK_PRIO); OSTaskCreate(key_task,(void *)0,(OS_STK*)&KEY_TASK_STK[KEY_STK_SIZE-1],KEY_TASK_PRIO); OSTaskSuspend(START_TASK_PRIO); //挂起起始任务. OS_EXIT_CRITICAL(); //退出临界区(可以被中断打断) } //LED任务 void led_task(void *pdata) { while(1) { //LED0=!LED0; LED1=!LED1; delay_ms(500); } } //按键扫描任务 void key_task(void *pdata) { u8 key; // OS_CPU_SR cpu_sr=0; //GUI_CURSOR_Show(); //GUI_SetTextMode(GUI_TM_TRANS|GUI_TM_REV); //透明显示 GUI_DispStringAt("STemWin Test...",60,0); res = f_opendir(&textdir,(const TCHAR*)"0:/TEXT"); res = f_chdir ("0:/TEXT"); f_txt=(FIL *)mymalloc(SRAMIN,(sizeof(FIL))); //开辟FIL字节的内存区域 while(1) { key=KEY_Scan(0); if(key==KEY_RIGHT) { OSTaskSuspend(LED_TASK_PRIO);//挂起LED任务,LED停止闪烁 } else if (key==KEY_LEFT) { OSTaskResume(LED_TASK_PRIO); //恢复LED任务,LED恢复闪烁 } else if (key==KEY_DOWN) { //OS_ENTER_CRITICAL(); //进入临界区(无法被中断打断) res = f_open (f_txt, "文件系统FAT_test.txt", FA_READ|FA_WRITE); if(res == FR_OK) { f_lseek (f_txt, f_size(f_txt)); res = f_write (f_txt, "\r\nfatfs test中文测试", 20, &NumWritten); } else { res = f_open (f_txt, "文件系统FAT_test.txt", FA_CREATE_NEW|FA_READ|FA_WRITE); res = f_write (f_txt, "Fatfs test中文测试", 20, &NumWritten); } res = f_close (f_txt); //OS_EXIT_CRITICAL(); //退出临界区(可以被中断打断) LCD_ShowString(60,190,200,16,16,"Fatfs write test "); } delay_ms(10); } } void touch_task(void *pdata) { while(1) { GUI_TOUCH_Exec(); OSTimeDlyHMSM(0,0,0,5);//延时5ms } } [/mw_shl_code]
主函数文件就以上东西,奇怪的是如果我把key_task里面的
//GUI_CURSOR_Show();
//GUI_SetTextMode(GUI_TM_TRANS|GUI_TM_REV); //透明显示
注掉后下载可以运行,但是debug会进hardfault,初始化统计任务就进hardfault,如果注释放开就无法运行,debug也进hardfault

求大神指点可能会是什么地方出错了?

STemWin+ucos.rar

2.59 MB, 下载次数: 192

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

8

主题

125

帖子

0

精华

高级会员

Rank: 4

积分
844
金钱
844
注册时间
2013-4-27
在线时间
120 小时
 楼主| 发表于 2015-8-5 14:57:23 | 显示全部楼层
ucos用的原子例程,文件系统也是用的原子的源码,在加emwin之前都没问题的
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165309
金钱
165309
注册时间
2010-12-1
在线时间
2108 小时
发表于 2015-8-6 23:04:28 | 显示全部楼层
可能是任务堆栈的问题
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

8

主题

125

帖子

0

精华

高级会员

Rank: 4

积分
844
金钱
844
注册时间
2013-4-27
在线时间
120 小时
 楼主| 发表于 2015-8-7 08:31:58 | 显示全部楼层
回复【3楼】正点原子:
---------------------------------
奇怪的是注释掉那两句后直接下载能运行,按键任务和LED任务都在跑,debug的时候就进hardfault,然后退出debug按键复位也不行,断电复位才能跑
任务堆栈也改大试了,现象一样
回复

使用道具 举报

69

主题

978

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3761
金钱
3761
注册时间
2015-4-26
在线时间
761 小时
发表于 2016-4-19 19:57:58 | 显示全部楼层
楼主这个问题解决了吗,分享一下
我有故事,你有酒吗
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-11-22 15:47

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表