中级会员 
   
	- 积分
 - 358
 
        - 金钱
 - 358 
 
       - 注册时间
 - 2013-11-9
 
      - 在线时间
 - 146 小时
 
 
 
 | 
 
5金钱 
大家好,我在stm32f103vc移植,移植程序是按照例程里面直接移植过来的。 
创建两个任务,LED灯闪烁实验,编程软件用的是keil4,在keil里软件调试是正常的,任务相互切换。属于正常情况! 
 
但是我将程序固化到单片机里就不能达到任务切换的效果,且任务执行一遍之后直接进入死循环HardFault_Handler(); 
我上网查过说是堆栈溢出的问题,但是没有加任务之前都是正常的,加任务也就是加了几个任务数组,我从128变为64,再由64变为30,还是不想,所以我感觉不是堆栈溢出的问题,还有就是网上说是系统时钟的问题,我感觉程序设断点的时候在delay函数里面的ucos设置系统函数在初始化的时候已经运行了,应该不是系统时钟的问题,我实在想不通是哪个的问题,麻烦原子大哥详解? 
 
部分程序如下: 
 
//开始任务的优先级设置为最低 
#define START_TASK_PRIO      			10  
#define START_STK_SIZE  				30 
OS_STK START_TASK_STK[START_STK_SIZE]; 
void start_task(void *pdata); 
 
//采集任务 
//设置任务优先级 
#define caiji_TASK_PRIO       			7 
#define caiji_STK_SIZE  		    	30  
OS_STK caiji_TASK_STK[caiji_STK_SIZE]; 
void caiji_task(void *pdata); 
 
 
//时间任务 
//设置任务优先级 
#define jishi_TASK_PRIO       			5  
#define jishi_STK_SIZE  				30  
OS_STK jishi_TASK_STK[jishi_STK_SIZE]; 
void jishi_task(void *pdata); 
 
void caiji_task(void *pdata)  //采集时间的设定  
{	  
  while(1) 
   {  
     //判断采集时间是否设定,设定的话运行if,否则运行else语句 
     LED0=0; 
     OSTimeDly(5); 
    }     
} 
 
void jishi_task(void *pdata)  //采集时间的设定  
{	  
  while(1) 
   {  
     //判断采集时间是否设定,设定的话运行if,否则运行else语句 
     LED0=0; 
     OSTimeDly(1); 
    }    
} 
void start_task(void *pdata) 
{ 
  //  OS_CPU_SR cpu_sr=0; 
 //  INT8U err;  
 //#if (OS_TASK_STAT_EN > 0) 
OSStatInit();					//初始化统计任务.这里会延时1秒钟左右  
 //#endif  
 //	OS_ENTER_CRITICAL();			//进入临界区(无法被中断打断)     
 	OSTaskCreate(caiji_task,(void *)0,(OS_STK*)&caiji_TASK_STK[caiji_STK_SIZE],caiji_TASK_PRIO);						    
 //	OSTaskCreate(jishi_task,(void *)0,(OS_STK*)&jishi_TASK_STK[jishi_STK_SIZE-1],jishi_TASK_PRIO);  
      OSTaskSuspend(START_TASK_PRIO);	//挂起起始任务. 
//	OS_EXIT_CRITICAL();				//退出临界区(可以被中断打断) 
/*	if (OS_ERR_NONE != err) 
while(1) 
; 
OSTaskDel(OS_PRIO_SELF);  */ 
} 
 
 int main(void) 
 {  
     SystemInit(); 
delay_init();	    	 //延时函数初始化	   
LED_Init();		  	//初始化与LED连接的硬件接口 
     OSInit();    
 	OSTaskCreate(start_task,(void *)0,(OS_STK *)&START_TASK_STK[START_STK_SIZE-1],START_TASK_PRIO );//创建起始任务 
OSStart(); 
 } 
  |   
 
 
 
 
 
 |