初级会员

- 积分
- 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到全局数组,然后发送消息时发送全局数组地址,接收端不变,现在可以使用,接受数据正确,很奇怪,结构体也是按字节对齐的,不知道为什么不行,估计用联合体也可以,没去试验。
|