OpenEdv-开源电子网

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

将原子哥的RTC试验修改放入ucos里面,作为一个任务进入HardFault_Handler(void)

[复制链接]

19

主题

85

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
202
金钱
202
注册时间
2014-9-16
在线时间
11 小时
发表于 2015-6-23 19:23:39 | 显示全部楼层 |阅读模式
5金钱
如题,原子哥 的RTC单独测试没有问题,
现将其放入UCOS系统中,进入一次任务后就进入HardFault_Handler(void),不动了
怎么回事呢?将RTC的任务屏蔽后其他任务都没有问题?请大侠们指点
原子哥的RTC裸机程序没问题。

/////////////////////////////////////////////////////////////////////////////////////
我把他改为UCOS系统里面,程序如下:
//RTC????????
#define RTC_TASK_PRIO 10
#define RTC_STK_SIZE 64
OS_STK RTC_TASK_STK[RTC_STK_SIZE];
void rtc_task(void *pdata);

void start_task(void *pdata)
{
OS_CPU_SR cpu_sr;
pdata = pdata ;

OSStatInit();   //??????????????
OS_ENTER_CRITICAL();   //??????
#if LWIP_DHCP
lwip_comm_dhcp_creat(); //???¨DHCP????
#endif
OSTaskCreate(led_task,(void*)0,(OS_STK*)&LED_TASK_STK[LED_STK_SIZE-1],LED_TASK_PRIO); //???¨LED????
OSTaskCreate(key_task,(void*)0,(OS_STK*)&KEY_TASK_STK[KEY_STK_SIZE-1],KEY_TASK_PRIO); //???¨KEY????
OSTaskCreate(display_task,(void*)0,(OS_STK*)&DISPLAY_TASK_STK[DISPLAY_STK_SIZE-1],DISPLAY_TASK_PRIO); //????????
 OSTaskCreate(rtc_task,(void*)0,(OS_STK*)&RTC_TASK_STK[RTC_STK_SIZE-1],RTC_TASK_PRIO); 

OSTaskSuspend(OS_PRIO_SELF); //????start_task????
OS_EXIT_CRITICAL();  //??????

}

void rtc_task(void *pdata)
{
// pdata = pdata;

u8 tbuf[40];
while(1)
{
RTC_GetTime(RTC_Format_BIN,&RTC_TimeStruct);
sprintf((char*)tbuf,"Time:%02d:%02d:%02d",RTC_TimeStruct.RTC_Hours,RTC_TimeStruct.RTC_Minutes,RTC_TimeStruct.RTC_Seconds); 
LCD_ShowString(30,50,210,16,16,tbuf);

RTC_GetDate(RTC_Format_BIN, &RTC_DateStruct);
sprintf((char*)tbuf,"Date:20%02d-%02d-%02d",RTC_DateStruct.RTC_Year,RTC_DateStruct.RTC_Month,RTC_DateStruct.RTC_Date); 
LCD_ShowString(30,70,210,16,16,tbuf);
sprintf((char*)tbuf,"Week:%d",RTC_DateStruct.RTC_WeekDay); 
LCD_ShowString(30,90,210,16,16,tbuf);

  OSTimeDlyHMSM(0,0,0,500);
}
}

其他都没变,就是将原子哥while里的程序,移植到这里变成一个任务,然后就进入HardFault_Handler(void),不动了
为什么呢?





最佳答案

查看完整内容[请看2#楼]

RTC_STK_SIZE  ,改为128,然后,堆栈做8字节对其限定
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2015-6-23 19:23:40 | 显示全部楼层
RTC_STK_SIZE  ,改为128,然后,堆栈做8字节对其限定
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

10

主题

93

帖子

0

精华

初级会员

Rank: 2

积分
188
金钱
188
注册时间
2012-11-16
在线时间
6 小时
发表于 2015-6-25 15:00:26 | 显示全部楼层
我怎么没发现你定义的最大任务数?
回复

使用道具 举报

19

主题

85

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
202
金钱
202
注册时间
2014-9-16
在线时间
11 小时
 楼主| 发表于 2015-6-26 14:59:55 | 显示全部楼层
原子哥威武,果然改为128就好了
回复

使用道具 举报

17

主题

69

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
260
金钱
260
注册时间
2015-3-9
在线时间
67 小时
发表于 2016-1-6 09:21:50 | 显示全部楼层
正点原子 发表于 2015-6-23 19:23
RTC_STK_SIZE         ,改为128,然后,堆栈做8字节对其限定

原子哥我也遇到这问题·,按你说的修改了下堆栈大小后正常了,不过还是不清楚为什么这样改
回复

使用道具 举报

38

主题

248

帖子

0

精华

版主

Rank: 7Rank: 7Rank: 7

积分
463
金钱
463
注册时间
2011-2-11
在线时间
12 小时
发表于 2016-1-6 10:05:28 | 显示全部楼层
RTC_STK_SIZE 太小了。你看原子的代码里,有没有在函数里用大的数组,或者很多的变量(比如 u8 tbuf[40];)。
这些都是要放入栈里的,你那丁点儿大小的栈,连arm寄存器放入都只能勉强,何况那么大的数组。
介绍个文档,你去看看 http://www.openedv.com/posts/list/41585.htm
Openedv大力支持的开源RTOS  --Trochili RTOS(飞鸟)
回复

使用道具 举报

10

主题

68

帖子

0

精华

高级会员

Rank: 4

积分
500
金钱
500
注册时间
2014-9-1
在线时间
77 小时
发表于 2016-3-18 11:39:14 | 显示全部楼层
我也遇到一样的问题!128改成256就OK了!神奇
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-20 01:01

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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