初级会员 
  
	- 积分
 - 141
 
        - 金钱
 - 141 
 
       - 注册时间
 - 2019-6-5
 
      - 在线时间
 - 13 小时
 
 
 
 | 
 
4金钱 
void MeterInitTask(void *p_arg)//初始化任务 
{ 
  OS_MSG_SIZE size; 
  OS_ERR err; 
        u8                                                                iRet; 
        u8                                                                iPtr; 
        stur_sdfile_data         *pReceMsgData = NULL;//结构体指针 
        //stur_sdfile_data  *pSendSDData = NULL; 
         
        while(1)  
        { 
                pReceMsgData = OSTaskQPend((OS_TICK                )0, 
                      (OS_OPT                )OS_OPT_PEND_BLOCKING, 
                      (OS_MSG_SIZE*        )&size, 
                      (CPU_TS*                )0, 
                      (OS_ERR*      )&err ); 
                if(err==OS_ERR_NONE)  
                        {     
                                if(pReceMsgData->reqSourID==SD_SOURCE_key_TASK)    // 
                                { 
                                        pReceMsgData        = mymalloc(SRAMIN,sizeof(stur_sdfile_data));  //申请内存 
                                        if(err==OS_ERR_NONE)                            //以下是向内存填充数据 
                                         { 
                                                         
                                                        pReceMsgData->reqSourID=SD_SOURCE_INIT_TASK; 
                                                        pReceMsgData->SDOpType=SD_TYPE_ORIGINAL_INFO; 
                                                        pReceMsgData->dataLen=sizeof(stur_Meter_Original_Info); 
                                                        pReceMsgData->startaddr=0; 
                                                        strcpy((char*)pReceMsgData->filename,SD_FILENAME_ORIGINAL_INFO); 
                                                  //以下发送给SD卡任务 
OSTaskQPost((OS_TCB*)&SD_RW_TaskTCB,(void*)&pReceMsgData,(OS_MSG_SIZE)sizeof(stur_sdfile_data),(OS_OPT)OS_OPT_POST_FIFO, (OS_ERR*        )&err);        
                                         } 
//SD卡接收处理任务 
void SDFileRW_Task(void *p_arg) 
{ 
  OS_MSG_SIZE size; 
  OS_ERR err; 
        u32                                                                nTotal,nFree,startFilePos; 
        char                                                         filePath[50] = ""; 
        stur_sdfile_data        *psdFileData = NULL;//接收消息结构体指针与初始化发送为同一个结构体 
        stur_SDFileNameList currentFileInfo; // 
        stur_SDBaseData                *pSDBaseData; 
        char                                                        thisFileName[FILENAME_LENGTH]; 
         
        while(1)  
        { 
             //等待消息 
                psdFileData = OSTaskQPend((OS_TICK                )0, 
                      (OS_OPT                )OS_OPT_PEND_BLOCKING, 
                      (OS_MSG_SIZE*        )(sizeof(stur_sdfile_data)), 
                      (CPU_TS*                )0, 
                      (OS_ERR*      )&err ); 
     
                if(err==OS_ERR_NONE)  
                        {     
                                         
                                if(psdFileData != NULL)//接收成功处理消息 
                                { 
                                        if(psdFileData->reqSourID==SD_SOURCE_INIT_TASK) 
                                        { 
                                                switch (psdFileData->SDOpType) 
                                                { 
                                                        case SD_TYPE_ORIGINAL_INFO:          // 
                                                                        sdFileRead(psdFileData); 
                                                                        psdFileData->SDOpType=SD_TYPE_ORIGINAL_INFO; 
                                                                        psdFileData->SDRWResult=SD_RESULT_OK; 
                                                        break; 
 
 
程序过程是初始化任务申请内存块->填充内容->发送给SD卡任务,SD卡任务接收到消息进行处理 
现在的问题是申请内存是成功的,初始化任务发送消息也是成功的,SD卡任务接收也是成功的,但是接受到地址内的数据是错误的,发送时数据是对的,所以搞不懂怎么回事,希望各位大神帮忙指点一二,非常感谢!!! |   
 
 
最佳答案
查看完整内容[请看2#楼] 
一直没人回复,说一下我现在的解决办法吧,我在任务内部使用了一个局部的结构体指针,外部定义了一个全局数组,接受到消息后不申请内存,现赋值给局部的指针,全部完事后memcpy到全局数组,然后发送消息时发送全局数组地址,接收端不变,现在可以使用,接受数据正确,很奇怪,结构体也是按字节对齐的,不知道为什么不行,估计用联合体也可以,没去试验。 
 
 
 
 
 
 
 |