OpenEdv-开源电子网

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

CAN+UCOSII+LWIP+FATFS运行到FATFS时死机

[复制链接]

4

主题

54

帖子

0

精华

初级会员

Rank: 2

积分
145
金钱
145
注册时间
2015-4-18
在线时间
17 小时
发表于 2015-12-29 21:12:34 | 显示全部楼层 |阅读模式
1金钱
问题:去掉FATFS任务,CAN、LWIP可以正常运行,加上FATFS任务以后,程序运行到FATFS就会死机
     请各位大神帮忙解决一下,谢谢
#include "can.h"
#include "led.h"
#include "delay.h"
#include "key.h"
#include "sys.h"
#include "lcd.h"
#include "usart.h"       
#include "timer.h"
#include "sram.h"
#include "malloc.h"
#include "string.h"
#include "usmart.h"       
#include "dm9000.h"
#include "lwip/netif.h"
#include "lwip_comm.h"
#include "lwipopts.h"
#include "includes.h"
#include "tcp_client_demo.h"
#include "rtc.h"
#include "sdio_sdcard.h"  
#include "w25qxx.h"   
#include "ff.h"  
#include "exfuns.h"  
#include "beep.h"
#include "fattester.h"         

// ζè′«¸DÆ÷¡¢êa¶è′«¸DÆ÷μÄí·Îļt
#include "dht11.h"
#include "ds18b20.h"

/********************************
ALIENTEKÕ½½¢STM32¿a·¢°åLWIPêμÑé
»ùóúNETCONN APIμÄTCP¿í»§¶ËêμÑé
¼¼êõÖ§3Ö£owww.openedv.com
ìÔ±|μêÆì£ohttp://eboard.taobao.com
1Øע΢DÅ1«Öúƽì¨Î¢DÅoÅ£o"ÕyμãÔ-×ó"£¬Ãa·Ñ»ñè¡STM32×êáÏ¡£
1ãÖYêDDÇòíμç×ó¿Æ¼¼óDÏT1«Ë¾  
×÷ÕߣoÕyμãÔ-×ó @ALIENTEK
********************************/

u8 can_flag=0;                //        0,cann't sent data;        1,sent data
u8 FATFS_flag=0;
       
u8 CWUwarningflag=0;                //CWUμ¥Ôa±¨¾ˉ±êÖ¾
u8 eliminate=0;                // Ïûéù±ê־λ
//u8 bit[50];                                // CAN½óêÕêy¾YéèÖûo3åÇø

__align(4) u8  StoM[10];                // ′óÕ¾μ½Ö÷Õ¾μÄêy¾Y»o3åÇø
__align(4) u8  MtoS[10];                // Ö÷Õ¾μ½′óÕ¾μÄêy¾Y»o3åÇø
        u8 sendflag;        // ·¢Ëí±ê־λ
        u8 receflag;        // ½óêÕ±ê־λ

//DIR ddp;                                //FATFSèÎÎñÖD
//FIL fil;
//FRESULT FATres;
//UINT bww;

//u16 year;
//u8 month;
//u8 day;
//u8 hour;
//u8 min;
//u8 sec;


//KEYèÎÎñ
#define KEY_TASK_PRIO                 9
//èÎÎñ¶ÑÕ»′óD¡
#define KEY_STK_SIZE                64
//èÎÎñ¶ÑÕ»
OS_STK KEY_TASK_STK[KEY_STK_SIZE];
//èÎÎñoˉêy
void key_task(void *pdata);   

//LEDèÎÎñ
//èÎÎñóÅÏ輶
#define LED_TASK_PRIO                29
//èÎÎñ¶ÑÕ»′óD¡
#define LED_STK_SIZE                64
//èÎÎñ¶ÑÕ»
OS_STK        LED_TASK_STK[LED_STK_SIZE];
//èÎÎñoˉêy
void led_task(void *pdata);  

//ÔúLCDéÏÏÔê¾μØÖ·DÅÏ¢èÎÎñ
//èÎÎñóÅÏ輶
#define DISPLAY_TASK_PRIO        11
//èÎÎñ¶ÑÕ»′óD¡
#define DISPLAY_STK_SIZE        128
//èÎÎñ¶ÑÕ»
OS_STK        DISPLAY_TASK_STK[DISPLAY_STK_SIZE];
//èÎÎñoˉêy
void display_task(void *pdata);

//CANèÎÎñ
#define CAN_TASK_PRIO                12
#define CAN_STK_SIZE                128
OS_STK CAN_TASK_STK[CAN_STK_SIZE];
void can_task(void *pdata);

//RTC Task
#define RTC_TASK_PRIO 13
#define RTC_STK_SIZE        128
OS_STK RTC_TASK_STK[RTC_STK_SIZE];
void RTC_Task(void *pdata);

//FATFS TASK
#define FATFS_TASK_PRIO 14
#define FATFS_STK_SIZE 256
OS_STK FATFS_TASK_STK[FATFS_STK_SIZE];
void FATFS_Task(void *pdata);

//BEEP TASK
#define BEEP_TASK_PRIO        15
#define BEEP_STK_SIZE                32
OS_STK BEEP_TASK_STK[BEEP_STK_SIZE];
void BEEP_Task(void *pdata);

//WARNING TASK  ±¨¾ˉèÎÎñ
#define WARNING_TASK_PRIO 16
#define WARNING_STK_SIZE         64
OS_STK WARNING_TASK_STK[WARNING_STK_SIZE];
void warning_task(void *pdata);

////DHT11 TASK
//#define DHT11_TASK_PRIO        17
//#define DHT11_STK_SIZE        128
//OS_STK DHT11_TASK_STK[DHT11_STK_SIZE];
//void DHT11_Task(void *pdata);

////DS18B20 TASK
//#define DS18B20_TASK_PRIO        18
//#define DS18B20_STK_SIZE        128
//OS_STK DS18B20_TASK_STK[DS18B20_STK_SIZE];
//void DS18B20_Task(void *pdata);

// Soundproof Task                                        // ÏûéùèÎÎñ
#define SOUNDPROOF_TASK_PRIO 19
#define SOUNDPROOF_STK_SIZE         64
OS_STK SOUNDPROOF_TASK_STK[SOUNDPROOF_STK_SIZE];
void Soundproof_Task(void *pdata);

//STARTèÎÎñ
//èÎÎñóÅÏ輶
#define START_TASK_PRIO                30
//èÎÎñ¶ÑÕ»′óD¡
#define START_STK_SIZE                128
//èÎÎñ¶ÑÕ»
OS_STK START_TASK_STK[START_STK_SIZE];
//èÎÎñoˉêy
void start_task(void *pdata);
//ÔúLCDéÏÏÔê¾μØÖ·DÅÏ¢
//mode:1 ÏÔê¾DHCP»ñè¡μ½μÄμØÖ·
//          ÆäËû ÏÔê¾¾2ì¬μØÖ·
void show_address(u8 mode)
{
        u8 buf[30];
        POINT_COLOR = RED;
       
        if(mode==2)
        {
                sprintf((char*)buf,"DHCP IP :%d.%d.%d.%d",lwipdev.ip[0],lwipdev.ip[1],lwipdev.ip[2],lwipdev.ip[3]);                                                //′òó¡¶ˉì¬IPμØÖ·
                LCD_ShowString(30,150,210,16,16,buf);
                sprintf((char*)buf,"DHCP GW :%d.%d.%d.%d",lwipdev.gateway[0],lwipdev.gateway[1],lwipdev.gateway[2],lwipdev.gateway[3]);        //′òó¡íø1ØμØÖ·
                LCD_ShowString(30,190,210,16,16,buf);
                sprintf((char*)buf,"NET MASK:%d.%d.%d.%d",lwipdev.netmask[0],lwipdev.netmask[1],lwipdev.netmask[2],lwipdev.netmask[3]);        //′òó¡×óíøÑúÂëμØÖ·
                LCD_ShowString(30,210,210,16,16,buf);
                LCD_ShowString(30,230,210,16,16,"Port:8087!");
        }
        else
        {
                sprintf((char*)buf,"Static IP:%d.%d.%d.%d",lwipdev.ip[0],lwipdev.ip[1],lwipdev.ip[2],lwipdev.ip[3]);                                                //′òó¡¶ˉì¬IPμØÖ·
                LCD_ShowString(30,50,210,16,16,buf);
                sprintf((char*)buf,"Static GW:%d.%d.%d.%d",lwipdev.gateway[0],lwipdev.gateway[1],lwipdev.gateway[2],lwipdev.gateway[3]);        //′òó¡íø1ØμØÖ·
                LCD_ShowString(30,70,210,16,16,buf);
                sprintf((char*)buf,"NET MASK:%d.%d.%d.%d",lwipdev.netmask[0],lwipdev.netmask[1],lwipdev.netmask[2],lwipdev.netmask[3]);        //′òó¡×óíøÑúÂëμØÖ·
                LCD_ShowString(30,90,210,16,16,buf);
                LCD_ShowString(30,110,210,16,16,"Port:8087!");
        }       
}


int main(void)
{         
         CAN_Mode_Init(CAN_SJW_1tq,CAN_BS2_8tq,CAN_BS1_9tq,4,CAN_Mode_LoopBack);//CAN3õê¼»ˉ»·»ØÄ£ê½,2¨ìØÂê500Kbps   
        delay_init();                    //Ñóê±oˉêy3õê¼»ˉ          
        NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);         //éèÖÃNVICÖD¶Ï·Ö×é2:2λÇàÕ¼óÅÏ輶£¬2λÏìó|óÅÏ輶
        uart_init(115200);                 //′®¿ú3õê¼»ˉÎa115200
        LED_Init();                            //LED¶Ë¿ú3õê¼»ˉ
        LCD_Init();                                //3õê¼»ˉLCD
        KEY_Init();                                 //3õê¼»ˉ°′¼ü
        BEEP_Init();
        usmart_dev.init(72);        //3õê¼»ˉUSMART               
       
         W25QXX_Init();                                //3õê¼»ˉW25Q128
         RTC_Init();                                  //RTC3õê¼»ˉ         
       
        FSMC_SRAM_Init();                //3õê¼»ˉía2¿SRAM
        my_mem_init(SRAMIN);        //3õê¼»ˉÄú2¿Äú′æ3Ø
        my_mem_init(SRAMEX);        //3õê¼»ˉía2¿Äú′æ3Ø
        POINT_COLOR = BRED;                
         //TCP TEST+CAN Test
        LCD_ShowString(10,10,400,16,16,"TCP CLIENT NETCONN Test+ CAN Test");
        // Show TCP Client data
         LCD_ShowString(10,310,400,16,16,"TCP Client Send Data:000 times");//ÏÔê¾TCP Client·¢ËíμÄêy¾Y
         LCD_ShowString(10,370,400,16,16,"TCP Client Receive Data:000 times");//ÏÔê¾TCP Client½óêÕμÄêy¾Y
       
       
//         POINT_COLOR = BLACK;       
//        LCD_ShowString(10,150,200,16,16,"CAN Sent Meg 000 times");//ÏÔê¾ìáê¾DÅÏ¢       
        POINT_COLOR = BLUE;         //à¶é«×Öìå
         
        OSInit();                                //UCOS3õê¼»ˉ
        while(lwip_comm_init()) //lwip3õê¼»ˉ
        {
                LCD_ShowString(10,130,200,20,16,"Lwip Init failed!");         //lwip3õê¼»ˉ꧰ü
                delay_ms(500);
                LCD_Fill(30,130,230,150,WHITE);
                delay_ms(500);
        }
        LCD_ShowString(10,130,200,20,16,"Lwip Init Success!");                 //lwip3õê¼»ˉ3é1|
        while(tcp_client_init())                                                                         //3õê¼»ˉtcp_client(′′½¨tcp_clientÏß3ì)
        {
                LCD_ShowString(10,150,200,20,16,"TCP Client failed!!"); //tcp¿í»§¶Ë′′½¨ê§°ü
                delay_ms(500);
                LCD_Fill(30,150,230,170,WHITE);
                delay_ms(500);
        }
        LCD_ShowString(10,150,200,20,16,"TCP Client Success!");                         //udp′′½¨3é1|
        OSTaskCreate(start_task,(void*)0,(OS_STK*)&START_TASK_STK[START_STK_SIZE-1],START_TASK_PRIO);
        OSStart(); //¿aÆôUCOS
}

//startèÎÎñ
void start_task(void *pdata)
{
        OS_CPU_SR cpu_sr;
        pdata = pdata ;
       
        OSStatInit();                          //3õê¼»ˉí3¼ÆèÎÎñ
        OS_ENTER_CRITICAL();          //1ØÖD¶Ï
        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(can_task,(void*)0,(OS_STK*)&CAN_TASK_STK[CAN_STK_SIZE-1],CAN_TASK_PRIO);//′′½¨CAN task
       
        OSTaskCreate(RTC_Task,(void*)0,(OS_STK*)&RTC_TASK_STK[RTC_STK_SIZE-1],RTC_TASK_PRIO);//′′½¨RTC task
       
        OSTaskCreate(FATFS_Task,(void*)0,(OS_STK*)&FATFS_TASK_STK[FATFS_STK_SIZE-1],FATFS_TASK_PRIO);//′′½¨FATFS task
       
        OSTaskCreate(warning_task,(void*)0,(OS_STK*)&WARNING_TASK_STK[WARNING_STK_SIZE-1],WARNING_TASK_PRIO);//′′½¨±¨¾ˉèÎÎñ
       
        OSTaskCreate(Soundproof_Task,(void*)0,(OS_STK*)&SOUNDPROOF_TASK_STK[SOUNDPROOF_STK_SIZE-1],SOUNDPROOF_TASK_PRIO);        // ÏûéùèÎÎñ
//        OSTaskCreate(DHT11_Task,(void*)0,(OS_STK*)&DHT11_TASK_STK[DHT11_STK_SIZE-1],DHT11_TASK_PRIO);//′′½¨DHT11 task
//       
//        OSTaskCreate(DS18B20_Task,(void*)0,(OS_STK*)&DS18B20_TASK_STK[DS18B20_STK_SIZE-1],DS18B20_TASK_PRIO);//′′½¨DS18B20 task
       
        OSTaskSuspend(OS_PRIO_SELF); //1òÆestart_taskèÎÎñ
        OS_EXIT_CRITICAL();  //¿aÖD¶Ï
}

//ÏÔê¾μØÖ·μèDÅÏ¢
void display_task(void *pdata)
{
        while(1)
        {
#if LWIP_DHCP                                                                        //μ±¿aÆôDHCPμÄê±oò
                if(lwipdev.dhcpstatus != 0)                         //¿aÆôDHCP
                {
                        show_address(lwipdev.dhcpstatus );        //ÏÔê¾μØÖ·DÅÏ¢
                        OSTaskSuspend(OS_PRIO_SELF);                 //ÏÔê¾íêμØÖ·DÅÏ¢oó1òÆe×ÔéíèÎÎñ
                }
#else
                show_address(0);                                                 //ÏÔê¾¾2ì¬μØÖ·
                OSTaskSuspend(OS_PRIO_SELF);                         //ÏÔê¾íêμØÖ·DÅÏ¢oó1òÆe×ÔéíèÎÎñ
#endif //LWIP_DHCP
                OSTimeDlyHMSM(0,0,0,100);
        }
}

//keyèÎÎñ
void key_task(void *pdata)
{
        u8 keyvalue;
        while(1)
        {
                keyvalue = KEY_Scan(0);
                if(keyvalue==KEY0_PRES) //·¢Ëíêy¾Y
                {
                        tcp_client_flag |= LWIP_SEND_DATA; //±ê¼ÇLWIPóDêy¾Yòa·¢Ëí;
                }
                else if(keyvalue==KEY1_PRES)
                {
                can_flag=1;                                                                        // can_flagÎa1£¬CAN·¢Ëíêy¾Y
                }
                else if(keyvalue==WKUP_PRES)
                {
                eliminate+=1;                                                                        //        eliminate%2=0, »Ö¸′±¨¾ˉèÎÎñ£¬·ñÔò 1òÆe±¨¾ˉèÎÎñ
                }
                if (keyvalue==KEY2_PRES)
                {
                FATFS_flag=!FATFS_flag;
                }
                OSTimeDlyHMSM(0,0,0,50);  //Ñóê±10ms
        }
}

//ledèÎÎñ
void led_task(void *pdata)
{
        while(1)
        {
                LED0 = !LED0;
                OSTimeDlyHMSM(0,0,0,500);  //Ñóê±500ms
        }
       
}

// warning task ±¨¾ˉèÎÎñ
void warning_task(void *pdata)
{
        while(1)
        {
        if(CWUwarningflag)
        {       
                BEEP=1;
                OSTimeDlyHMSM(0,0,0,500);
                BEEP=0;
                OSTimeDlyHMSM(0,0,0,500);
        }
        OSTimeDlyHMSM(0,0,0,10);
}
}

        //        soundproof task ÏûéùèÎÎñ
void Soundproof_Task(void *pdata)
{
        while(1)
        {
                if(eliminate%2)
                {       
                        OSTaskSuspend(16);                        // 1òÆe ±¨¾ˉ èÎÎñ  
                        BEEP=0;
                }
                else OSTaskResume(16);                // »Ö¸′±¨¾ˉèÎÎñ
                OSTimeDlyHMSM(0,0,0,20);        // èÎÎñμ÷¶è
        }
}



//CAN TASK
        void can_task(void *pdata)
        {
        // óÃóú½óêÕ±¨ÎÄμÄéèÖÃλμÄDÅÏ¢′òó¡
        u8 bit[50];
        u8 reslen=0;//½óêÕêy¾Y3¤¶è
        u16 CID[2]={0};                // ½óêÕμ½μÄêy¾YμÄCID
        u8 i=0,t=0;
        u8 scnt=0;                                //·¢Ëí¼Æêy
        u8 rcnt=0;                                //½óêÕ¼Æêy
        u8 sendcanbuf[8]={0};                // ·¢Ëíêy¾Y»o3åÇø
        u8 resvcanbuf[8]={0};                // ½óêÕêy¾Y»o3åÇø
        u8 sendres;                                                //CAN ·¢Ëíêy¾YμÄ·μ»ØÖμ
        u8 setbit[26]={0};                        //½óêÕμÄ′óÕ¾μĸ÷λμÄéèÖÃ
        short temp;
               
//        LCD_ShowString(10+20*8,170,200,16,16,"Count:");                        //ÏÔê¾μ±Ç°¼ÆêyÖμ       
        LCD_ShowString(18,190,400,16,16,"CAN Send Data:000times");                //ìáê¾·¢ËíμÄêy¾Y       
        LCD_ShowString(18,250,400,16,16,"CAN Receive Data:000times");        //ìáê¾½óêÕμ½μÄêy¾Y               
        while(1)
        {       
       
                        if(can_flag)//KEY1°′ÏÂ,·¢Ëíò»′Îêy¾Y
                {
                        can_flag=0;                                // ½ûÖ1á¬Dø·¢Ëí£¬¼′£¬°′ÏÂò»′Îkey0,·¢Ëíò»′ÎCAN data
//                        CID=0X041;                        //        Ö÷Õ¾μ½CWUᬽó±êê¾·û
                        sendcanbuf[0]=0X11;                //ìî3ä·¢Ëí»o3åÇø
                        sendcanbuf[1]=0XE1;
                        sendcanbuf[2]=0X00;                          //highlevel
                        sendcanbuf[3]=0X00;                                //lowlevel
                        sendcanbuf[4]=0X17;                                //lowtemp  23¡æ
                        sendcanbuf[5]=0X1b;                                //hightemp                        30¡æ
                        for(i=0;i<8;i++)
                        {                       
                                if(i<4)LCD_ShowxNum(60+i*32,210,sendcanbuf,3,16,0X80);        //&#207;&#212;ê&#190;êy&#190;Y
                                else LCD_ShowxNum(60+(i-4)*32,230,sendcanbuf,3,16,0X80);        //&#207;&#212;ê&#190;êy&#190;Y
                        }
                        sendres=Can_Send_Msg(0X041,sendcanbuf,8);        //·¢&#203;í8&#184;&#246;×&#214;&#189;ú ,·μ&#187;&#216;&#214;μ&#206;a0 £&#172;&#203;μ&#195;÷·¢&#203;í3é1|
                        if(sendres)LCD_ShowString(18+24*8,190,200,16,16,"Failed");                //ìáê&#190;·¢&#203;í꧰ü
                        else                         //ìáê&#190;·¢&#203;í3é1|       
                        {
                                scnt+=1;                // ·¢&#203;í&#188;&#198;êy
                                sendflag+=1;        // FATFS′&#230;′¢·¢&#203;í&#188;&#198;êy
                        LCD_ShowxNum(18+14*8,190,scnt,3,16,0X80);
                        LCD_ShowString(18+24*8,190,200,16,16,"OK    ");       
                        }                                                                  
                }
                //KEY_UP°′&#207;&#194;£&#172;&#184;&#196;±&#228;CANμ&#196;1¤×÷&#196;£ê&#189;        CAN1¤×÷&#196;£ê&#189;:        CAN_Mode_Normal(0)£o&#198;&#213;í¨&#196;£ê&#189;;  CAN_Mode_LoopBack(1)£o&#187;·&#187;&#216;&#196;£ê&#189;
                // 3&#245;ê&#188;&#187;ˉê±£&#172;can_mode=1£&#172;&#188;′&#187;·&#187;&#216;&#196;£ê&#189;
                  CAN_Mode_Init(CAN_SJW_1tq,CAN_BS2_8tq,CAN_BS1_9tq,4,0);
                        POINT_COLOR=RED;//éè&#214;&#195;×&#214;ì&#229;&#206;aoìé&#171;
                        //  can_mode==0 &#198;&#213;í¨&#196;£ê&#189;£&#172;Dèòa2&#184;&#246;&#191;a·¢°&#229;                       
                        LCD_ShowString(160,130,200,16,16,"Nnormal Mode ");            
                       
                        POINT_COLOR=BLUE;//éè&#214;&#195;×&#214;ì&#229;&#206;aà&#182;é&#171;
                 
                // ·μ&#187;&#216;&#214;μ&#206;a&#189;óê&#213;μ&#189;μ&#196;±¨&#206;&#196;μ&#196;CID£&#172;resvcanbuf&#206;a&#189;óê&#213;êy&#190;Y&#187;o3&#229;&#199;&#248;£&#172;setbit&#206;a±¨&#206;&#196;éè&#214;&#195;D&#197;&#207;¢&#187;o3&#229;&#199;&#248;£&#172;reslen&#206;a&#189;óê&#213;êy&#190;Yμ&#196;3¤&#182;è
                reslen=Can_Receive_Msg(resvcanbuf,setbit,CID );
                StoM[8]=CID[0]>>8;
                StoM[9]=CID[0];
//                printf("StpM[8]=%x  StoM[9]=%x\r\n",StoM[8],StoM[9]);
                if(reslen)//&#189;óê&#213;μ&#189;óDêy&#190;Y
                {       
                        receflag+=1;                // FATFS′&#230;′¢êy&#190;Y±ê&#214;&#190;
                        printf("StoM[8]=%x  StoM[9]=%x\r\n",StoM[8],StoM[9]);
                        rcnt+=1;   // &#189;óê&#213;&#188;&#198;êy
                        LCD_ShowxNum(18+17*8,250,rcnt,3,16,0X80);
                        printf("the CID of recessived message is 0x%03x\r\n",CID[0]);
                        printf("the recesive message's length is %d\r\n",reslen);
                        LCD_Fill(60,270,130,310,WHITE);//&#199;&#229;3y&#214;&#174;&#199;°μ&#196;&#207;&#212;ê&#190;
                        for(i=0;i<reslen;i++)
                        {       
                                StoM=resvcanbuf;                        //        °&#209;&#189;óê&#213;μ&#189;μ&#196;CANêy&#190;Y&#184;3&#214;μμ&#189;1&#171;12êy&#190;Y&#187;o3&#229;&#199;&#248;
                    
                                if(i<4)LCD_ShowxNum(60+i*32,270,resvcanbuf,3,16,0X80);        //&#207;&#212;ê&#190;êy&#190;Y
                                else LCD_ShowxNum(60+(i-4)*32,290,resvcanbuf,3,16,0X80);        //&#207;&#212;ê&#190;êy&#190;Y
                        }
                }
               
               
                        //         &#197;D&#182;&#207;±¨&#206;&#196;à′&#212;′
                // ò&#187;′&#206;&#207;ìó|
                if(CID[0]==0x3d1)                                       
                {
                        CID[0]=0;
                        sprintf((char*)StoM,"main station get first response \r\n");                // &#214;÷&#213;&#190;&#189;óê&#213;μ&#189; CWU′ó&#213;&#190;ò&#187;′&#206;&#207;ìó|                       
                }
        //        ±¨&#206;&#196;&#206;aà′×&#212;CWUμ&#196; &#182;t′&#206;&#207;ìó|
                if(CID[0]==0x051)               
                {
                CID[0]=0;
                if(setbit[0]) sprintf((char*)bit,"the state of CWU is ok \r\n");                //        CWU×′ì&#172;&#206;&#187;
                        else sprintf((char*)bit,"the state of CWU is fail \r\n");
                        printf("%s",bit);
                if(setbit[1]) sprintf((char*)bit,"the sensor's state of CWU is ok \r\n");        //        &#206;&#194;&#182;è′&#171;&#184;D&#198;÷×′ì&#172;&#206;&#187;
                        else sprintf((char*)bit,"the sensor's state of CWU is fail \r\n");
                                printf("%s",bit);
                if(setbit[2])        sprintf((char*)bit,"the temp of CWU is high \r\n");                                        //        &#184;&#223;&#206;&#194;3&#172;&#207;T
                        else sprintf((char*)bit,"the temp of CWU is smaller than high \r\n");
                                printf("%s",bit);
                if(setbit[3]) sprintf((char*)bit,"the temp of CWU is low \r\n");                                        //        μí&#206;&#194;3&#172;&#207;T
                        else sprintf((char*)bit,"the temp of CWU is bigger than low \r\n");
                                printf("%s",bit);
                if(setbit[4]) sprintf((char*)bit,"the bellstate of CWU is ok \r\n");                                //        ±¨&#190;ˉ&#198;÷×′ì&#172;
                        else sprintf((char*)bit,"the bellstate of CWU is fail \r\n");
                                printf("%s",bit);
                if(setbit[5])                                                                                 //        &#212;&#182;3챨&#190;ˉ
                {
                       
                        sprintf((char*)bit,"CWU need the remote warning now \r\n");       
                        printf("%s",bit);
                        CWUwarningflag=1;                                // è&#231;1&#251;&#212;&#182;3챨&#190;ˉ±ê&#214;&#190;&#214;μ1£&#172;&#212;òí&#248;1&#216;&#212;&#182;3챨&#190;ˉ
                       
                }       
                        else
                {
                        sprintf((char*)bit,"CWU do not need the remote warning now \r\n");
                                printf("%s",bit);
                        CWUwarningflag=0;                        // è&#231;1&#251;&#212;&#182;3챨&#190;ˉ±ê&#214;&#190;&#206;&#187;&#206;a0£&#172;&#212;ò&#214;÷&#213;&#190;&#212;&#182;3챨&#190;ˉ±ê&#214;&#190;&#206;&#187;&#206;a0
                }
                if(setbit[6]) sprintf((char*)bit,"CWU is broadcasting  \r\n");                                                        //        1&#227;2¥
                        else sprintf((char*)bit,"CWU  pass the message to gateway only\r\n");
                                printf("%s",bit);
                if(setbit[7]) sprintf((char*)bit,"local warning of CWU is running\r\n");                //        ±&#190;μ&#216;±¨&#190;ˉ
                        else sprintf((char*)bit,"local warning of CWU have not work yeat\r\n");
                                printf("%s",bit);                       
                printf("      eliminate =    %d     ",eliminate);
                }
                //        ±¨&#206;&#196;à′×&#212;CWU£&#172;&#206;&#194;&#182;èêy&#190;Yμ&#196;′&#171;ê&#228;,I/O±¨&#206;&#196;
                if(CID[0]==0x091)               
                {
                        CID[0]=0;
                        if(resvcanbuf[0]) sprintf((char*)bit,"the water level of CWU is %d \r\n",resvcanbuf[0]);                  // &#203;&#174;&#206;&#187;
                else sprintf((char*)bit,"the water level of CWU is %d \r\n",resvcanbuf[0]);
                                printf("%s",bit);
                        temp=resvcanbuf[2]*10+resvcanbuf[1];
                        printf("the temp of CWU is %d.%-d\r\n",temp/10,temp%10);
                }
                // ±¨&#206;&#196;à′×&#212;CWU£&#172;&#206;&#194;&#182;èêy&#190;Yμ&#196;′&#171;ê&#228;£&#172; &#207;&#212;ê&#190;±¨&#206;&#196;
                if(CID[0]==0x191)               
                {
                        CID[0]=0;
                        if(resvcanbuf[1]) sprintf((char*)bit,"the water level of CWU is %d \r\n",resvcanbuf[1]);                  // &#203;&#174;&#206;&#187;
                else sprintf((char*)bit,"the water level of CWU is %d \r\n",resvcanbuf[1]);
                                printf("%s",bit);
                        temp=resvcanbuf[2]*10+resvcanbuf[3];
                        printf("the temp of CWU is %d.%-d\r\n",temp/10,temp%10);
                }
               
               
               
               
                t++;
                        OSTimeDlyHMSM(0,0,0,10);  //&#209;óê±10ms
                if(t==20)
                {
                        LED1=!LED1;//ìáê&#190;&#207;μí3&#213;y&#212;ú&#212;&#203;DD       
                        t=0;
                       
                }                  
        }
}

// RTC Task
void RTC_Task(void *pdata)
{
                u8 t=0;       
//        RTC_Set(2015,12,29,19,25,30);  //éè&#214;&#195;ê±&#188;&#228;       
//        usmart_dev.init(SystemCoreClock/1000000);        //3&#245;ê&#188;&#187;ˉUSMART       
       
//show RTC
RTC_Get();
        LCD_ShowString(30,30,200,20,20,"    -  -  ");           //&#196;ê&#212;&#194;è&#213;
        LCD_ShowString(30+90,30,200,16,16,"  :  :  ");                //ê±·&#214;&#195;&#235;
       
        while(1)
        {                                       
//        year=calendar.w_year;
//        month=calendar.w_month;
//        day=calendar.w_date;
//        hour=calendar.hour;
//        min=calendar.min;
//        sec=calendar.sec;

                if(t!=calendar.sec)
                {
                        t=calendar.sec;
                        LCD_ShowNum(10,30,calendar.w_year,4,16);                                                                          
                        LCD_ShowNum(50,30,calendar.w_month,2,16);                                                                          
                        LCD_ShowNum(74,30,calendar.w_date,2,16);       
                       
                        switch(calendar.week)
                        {
                                case 0:
                                        LCD_ShowString(198,30,200,16,16,"Sunday   ");
                                        break;
                                case 1:
                                        LCD_ShowString(198,30,200,16,16,"Monday   ");
                                        break;
                                case 2:
                                        LCD_ShowString(198,30,200,16,16,"Tuesday  ");
                                        break;
                                case 3:
                                        LCD_ShowString(198,30,200,16,16,"Wednesday");
                                        break;
                                case 4:
                                        LCD_ShowString(198,30,200,16,16,"Thursday ");
                                        break;
                                case 5:
                                        LCD_ShowString(198,30,200,16,16,"Friday   ");
                                        break;
                                case 6:
                                        LCD_ShowString(198,30,200,16,16,"Saturday ");
                                        break;  
                        }
                        LCD_ShowNum(120,30,calendar.hour,2,16);                                                                          
                        LCD_ShowNum(144,30,calendar.min,2,16);                                                                          
                        LCD_ShowNum(168,30,calendar.sec,2,16);
                }       
                OSTimeDlyHMSM(0,0,0,100);  //&#209;óê±10ms       
        }
}
       
        //FATFS TASK
void FATFS_Task(void *pdata)
{

        DIR ddp;                                //FATFSè&#206;&#206;&#241;&#214;D
        FIL fil;
//        FRESULT FATres;
        UINT bww;
       
       
        u8 storeflagr;                // &#189;óê&#213;′&#230;′¢±ê&#214;&#190;
        u8 storeflags;                // ·¢&#203;í′&#230;′¢±ê&#214;&#190;
        u8 pname[100] ;
__align(4) char  FATwritbuf[50];
__align(4) char  FATreadbuf[50];

        u8 storetime;
        u32 total,free;
        u8 FATres=0;       
       
//        u16 year;
//        u8 month;
//        u8 day;
//        u8 hour;
//        u8 min;
//        u8 sec;
       
//        u8 offset=0;

        while(SD_Init())//&#188;ì2a2&#187;μ&#189;SD&#191;¨
        {
                LCD_ShowString(130,110,200,16,16,"SD Card Error!");
                delay_ms(500);                                       
                LCD_ShowString(130,110,200,16,16,"Please Check! ");
                delay_ms(500);
                LED1=!LED1;//DS1éá&#203;&#184;
        }
        exfuns_init();                                                        //&#206;afatfs&#207;à1&#216;±&#228;á&#191;éê&#199;&#235;&#196;ú′&#230;                                 
          f_mount(fs[0],"0:",1);                                         //1ò&#212;&#216;SD&#191;¨
        FATres=f_mount(fs[1],"1:",1);                                 //1ò&#212;&#216;FLASH.       
        if(FATres==0X0D)//FLASH′&#197;&#197;ì,FAT&#206;&#196;&#188;t&#207;μí3′í&#206;ó,&#214;&#216;D&#194;&#184;&#241;ê&#189;&#187;ˉFLASH
        {
                LCD_ShowString(30,10,200,16,16,"Flash Disk Formatting...");        //&#184;&#241;ê&#189;&#187;ˉFLASH
                FATres=f_mkfs("1:",1,4096);//&#184;&#241;ê&#189;&#187;ˉFLASH,1,&#197;ì·&#251;;1,2&#187;Dèòaòyμ&#188;&#199;&#248;,8&#184;&#246;éè&#199;&#248;&#206;a1&#184;&#246;′&#216;
                if(FATres==0)
                {
                        f_setlabel((const TCHAR *)"1:YYW");        //éè&#214;&#195;Flash′&#197;&#197;ìμ&#196;&#195;&#251;×&#214;&#206;a£oALIENTEK
                        LCD_ShowString(30,10,200,16,16,"Flash Disk Format Finish");        //&#184;&#241;ê&#189;&#187;ˉíê3é
                }else LCD_ShowString(30,10,200,16,16,"Flash Disk Format Error ");        //&#184;&#241;ê&#189;&#187;ˉ꧰ü
                delay_ms(1000);
        }                                                                                                            
//        LCD_Fill(30,150,240,150+16,WHITE);                //&#199;&#229;3y&#207;&#212;ê&#190;                          
        while(exf_getfree("1",&total,&free))        //μ&#195;μ&#189;SD&#191;¨μ&#196;×üèYá&#191;oíê£óàèYá&#191;
        {
                LCD_ShowString(30,10,200,16,16,"SD Card Fatfs Error!");
                delay_ms(200);
                LCD_Fill(30,150,240,150+16,WHITE);        //&#199;&#229;3y&#207;&#212;ê&#190;                          
                delay_ms(200);
                LED1=!LED1;//DS0éá&#203;&#184;
        }                                                                                                                                      

        LCD_ShowString(130,110,200,16,16,"  FATFS   OK !    ");         
        LCD_ShowString(10 ,410,200,16,16,"SD Total Size:     MB");         
        LCD_ShowString(10 ,430,200,16,16,"SD  Free Size:     MB");             
        LCD_ShowNum(10+8*14,410,total>>10,5,16);                                //&#207;&#212;ê&#190;SD&#191;¨×üèYá&#191; MB
        LCD_ShowNum(10+8*14,430,free>>10,5,16);                                        //&#207;&#212;ê&#190;SD&#191;¨ê£óàèYá&#191; MB                            
        RTC_Get();

                while(1)
{       
//        year=calendar.w_year;
//        month=calendar.w_month;
//        day=calendar.w_date;
//        hour=calendar.hour;
//        min=calendar.min;
//        sec=calendar.sec;

       
                storetime= calendar.sec%30;
       
        if(!storetime)
        {
                printf("we have reach the data stored step here\r\n");

        sprintf((char*)FATwritbuf," store value is 12345  \r\n");
        sprintf((char*)pname,"testfloder/ store  data ");
               
        printf("%s", pname);       
        printf("%s",FATwritbuf);
    // 程序运行到此处就死机,去掉FATFS任务,其他任务都可以正常工作

        f_lseek (&fil, f_size(&fil)+1);       
                FATres=f_write (&fil, FATwritbuf, strlen(FATwritbuf), &bww);
        f_close(&fil);                                                                                                                        //1&#216;±&#213;D&#194;μ&#196;&#206;&#196;&#188;t



        }
                OSTimeDlyHMSM(0,0,0,100);  //&#209;óê±10ms       
        }
}


最佳答案

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

把用大数据处理的改大
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

20

主题

468

帖子

3

精华

金牌会员

Rank: 6Rank: 6

积分
1679
金钱
1679
注册时间
2014-2-25
在线时间
229 小时
发表于 2015-12-29 21:12:35 | 显示全部楼层
priate 发表于 2016-1-3 18:41
你是说把各个人物的堆栈都改大吗?

把用大数据处理的改大
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165352
金钱
165352
注册时间
2010-12-1
在线时间
2108 小时
发表于 2015-12-29 22:47:41 | 显示全部楼层
帮顶
回复

使用道具 举报

4

主题

54

帖子

0

精华

初级会员

Rank: 2

积分
145
金钱
145
注册时间
2015-4-18
在线时间
17 小时
 楼主| 发表于 2016-1-2 19:22:37 | 显示全部楼层

好像是最后几个sprintf();的问题,在别的任务里面加上sprintf也会死机,这是什么情况,原子哥
回复

使用道具 举报

4

主题

54

帖子

0

精华

初级会员

Rank: 2

积分
145
金钱
145
注册时间
2015-4-18
在线时间
17 小时
 楼主| 发表于 2016-1-2 19:26:55 | 显示全部楼层

是不是没有申请内存啊?我之前用的sprintf(数组)就可以,现在用消息队列或者消息邮箱,根据UCOSII《任哲版》里面的例程,他的消息邮箱都是直接**一个指针char* s;,这种。我试了一下,直接用指针来sprintf的话,也是死机(sprintf(s,"a n  m s d j %x",temp);)这种形式的话,也是死机
回复

使用道具 举报

20

主题

468

帖子

3

精华

金牌会员

Rank: 6Rank: 6

积分
1679
金钱
1679
注册时间
2014-2-25
在线时间
229 小时
发表于 2016-1-3 08:41:19 | 显示全部楼层
你把内存改得很大试试看,ucos任务堆栈空间不足会死机。
回复

使用道具 举报

4

主题

54

帖子

0

精华

初级会员

Rank: 2

积分
145
金钱
145
注册时间
2015-4-18
在线时间
17 小时
 楼主| 发表于 2016-1-3 18:41:19 | 显示全部楼层
本帖最后由 priate 于 2016-1-3 18:42 编辑
1201yuge 发表于 2016-1-3 08:41
你把内存改得很大试试看,ucos任务堆栈空间不足会死机。

你是说把各个人物的堆栈都改大吗?
回复

使用道具 举报

34

主题

805

帖子

4

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
1863
金钱
1863
注册时间
2011-3-29
在线时间
139 小时
发表于 2016-1-3 23:15:23 来自手机 | 显示全部楼层
是不是重入问题?关掉调度看看。
回复

使用道具 举报

4

主题

54

帖子

0

精华

初级会员

Rank: 2

积分
145
金钱
145
注册时间
2015-4-18
在线时间
17 小时
 楼主| 发表于 2016-1-5 20:14:22 | 显示全部楼层
重新把之前好的FATFS任务复制过来,竟然好了···········
回复

使用道具 举报

4

主题

54

帖子

0

精华

初级会员

Rank: 2

积分
145
金钱
145
注册时间
2015-4-18
在线时间
17 小时
 楼主| 发表于 2016-1-5 20:16:38 | 显示全部楼层
ofourme 发表于 2016-1-3 23:15
是不是重入问题?关掉调度看看。

关调度也死机
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2024-11-24 18:36

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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