This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] IPU 和 DSP 之间的数据传输不正确。

Guru**** 1822530 points
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/data-converters-group/data-converters/f/data-converters-forum/1035573/the-data-transmission-between-the-ipu-and-dsp-is-incorrect

器件型号:TDA2HG

当我使用 link_control()函数将64位数据从 IPU 发送到 DSP 时,为什么会丢失32位数据?

如果在 IPU 和 DSP 之间传输的数据只能在32位范围内进行控制、为什么64位阵列的总大小可以准确地传输到 DSP?

此外、在日常调试中、日志丢失问题经常出现、我想问为什么、是否有任何改进方法?  

下面是验证代码和相应的日志:

HMIManager.c

Void HMIManager_linkTskMain(struct Utils_TskHndl_t * pTsk, Utils_MsgHndl * pMsg)
{
    UInt64 num;
    UInt8 numArray[6] = {0,1,8,100,200,255};
    
    .......
    .......
    .......

    
    //test num
	num = 0X13572468abcddbca;          
	HM_LogD("HMIMANAGER sizeof(long) = %d\n", sizeof(long));
	HM_LogD("HMIMANAGER sizeof(UInt64) = %d\n", sizeof(UInt64));
	HM_LogD("HMIMANAGER sizeof(num) = %d\n", sizeof(num));

	HM_LogD("HMIMANAGER num p= %p\n", num);
	HM_LogD("HMIMANAGER num x= %x\n", num); 
	HM_LogD("HMIMANAGER num lx= %lx\n", num); 
	HM_LogD("HMIMANAGER num llx= %llx\n", num); 
	
	
	memcpy(buf32, &num, sizeof(num));
	HM_LogD("HMIMANAGER buf32[0],buf32[1]= %x, %x\n", buf32[0],buf32[1]);

	status = System_linkControl(CMS_LinkId(CMS_LINK_ID_HMIRENDERER),
							HM_CMD_TURNTO,
							&num,
							sizeof(num),
							TRUE);
	Utils_tskAckOrFreeMsg(pMsg, status);
	HM_LogD("%s: HMIMANAGER send Cmd: HM_CMD_TURNTO TO hmirenderer\n", __FUNCTION__);
	Task_sleep(50);


	/* test: send cmd to hmi renderer linktsk*/
	for(i = 0; i < 6; ++i){
		HM_LogD("HMIMANAGER numArray[%d] p= %p \n",i , numArray[i]);
		HM_LogD("HMIMANAGER numArray[%d] x= %x \n\n",i , numArray[i]);
	}
	status = System_linkControl(CMS_LinkId(CMS_LINK_ID_HMIRENDERER),
							HM_CMD_OPENDOOR,
							numArray,
							sizeof(numArray),
							TRUE);
	Utils_tskAckOrFreeMsg(pMsg, status);
	HM_LogD("%s: HMIMANAGER send Cmd: HM_CMD_OPENDOOR TO hmirenderer\n", __FUNCTION__);
	
	.......
	.......
	.......
	
}






HMIRenderer.c

Void HMIRenderer_linkTskMain(struct Utils_TskHndl_t * pTsk, Utils_MsgHndl * pMsg)
{
	UInt8 *numArray = NULL;
    UInt32 buf32[2];
    UInt32 i;
	
	......
	......
	......
	case HM_CMD_TURNTO:
            HR_LogD("HMIRenderer sizeof(long) = %d\n", sizeof(long));
            HR_LogD("HMIRenderer sizeof(UInt64) = %d\n", sizeof(UInt64));
            HR_LogD("HMIRenderer sizeof(num) = %d\n", sizeof(num));
            
            num = *(UInt64 *)Utils_msgGetPrm(pMsg);
            Utils_tskAckOrFreeMsg(pMsg, status);

            HR_LogD("HMIRenderer num p= %p\n", num);
            HR_LogD("HMIRenderer num x= %x\n", num); 
            HR_LogD("HMIRenderer num lx= %lx\n", num); 
            HR_LogD("HMIRenderer num llx= %llx\n", num);

            
            memcpy(buf32, &num, sizeof(num));
            HR_LogD("HMIRenderer buf32[0],buf32[1]= %x, %x\n", buf32[0],buf32[1]);
            
            ++num;
            HR_LogD("HMIRenderer num p= %p\n", num);
            HR_LogD("HMIRenderer num x= %x\n", num); 
            HR_LogD("HMIRenderer num lx= %lx\n", num); 
            HR_LogD("HMIRenderer num llx= %llx\n", num);
            
            num -= 2;
            HR_LogD("HMIRenderer num p= %p\n", num);
            HR_LogD("HMIRenderer num x= %x\n", num); 
            HR_LogD("HMIRenderer num lx= %lx\n", num); 
            HR_LogD("HMIRenderer num llx= %llx\n", num);

            break;
           
        case HM_CMD_OPENDOOR:
            numArray = (UInt8*)Utils_msgGetPrm(pMsg);
            /* ACK message */ 
            for(i = 0; i < 6; ++i){
                HR_LogD("HMIRenderer numArray[%d] p= %p \n",i , numArray[i]);
                HR_LogD("HMIRenderer numArray[%d] x= %x \n\n",i , numArray[i]);
            }
         
            // /* ACK message */
            Utils_tskAckOrFreeMsg(pMsg, status);
            break;
    .....
    .....
    .....

	
}

 [HOST] [IPU1-0]     61.712743 s: [DEBUG][HM]:HMIManager_linkTskMain: HMIMANAGER sizeof(long) = 4
 [HOST] [IPU1-0]     61.712865 s: [DEBUG][HM]:HMIManager_linkTskMain: HMIMANAGER sizeof(UInt64) = 8
 [HOST] [IPU1-0]     61.712956 s: [DEBUG][HM]:HMIManager_linkTskMain: HMIMANAGER sizeof(num) = 8
 [HOST] [IPU1-0]     61.713078 s: [DEBUG][HM]:HMIManager_linkTskMain: HMIMANAGER num p= abcddbca
 [HOST] [IPU1-0]     61.713170 s: [DEBUG][HM]:HMIManager_linkTskMain: HMIMANAGER num x= abcddbca
 [HOST] [IPU1-0]     61.713292 s: [DEBUG][HM]:HMIManager_linkTskMain: HMIMANAGER num lx= abcddbca
 [HOST] [IPU1-0]     61.713414 s: [DEBUG][HM]:HMIManager_linkTskMain: HMIMANAGER num llx= 13572468abcddbca
 [HOST] [IPU1-0]     61.713536 s: [DEBUG][HM]:HMIManager_linkTskMain: HMIMANAGER buf32[0],buf32[1]= abcddbca, 13572468
 [HOST] [IPU1-0]     61.714024 s: [DEBUG][HM]:HMIManager_linkTskMain: HMIManager_linkTskMain: HMIMANAGER send Cmd: HM_CMD_TURNTO TO hmirenderer

 [HOST] [IPU1-0]     61.763740 s: [DEBUG][HM]:HMIManager_linkTskMain: HMIMANAGER numArray[0] p= 0
 [HOST] [IPU1-0]     61.763862 s: [DEBUG][HM]:HMIManager_linkTskMain: HMIMANAGER numArray[0] x= 0
 [HOST] [IPU1-0]     61.763984 s: [DEBUG][HM]:HMIManager_linkTskMain: HMIMANAGER numArray[1] p= 1
 [HOST] [IPU1-0]     61.764106 s: [DEBUG][HM]:HMIManager_linkTskMain: HMIMANAGER numArray[1] x= 1
 [HOST] [IPU1-0]     61.764198 s: [DEBUG][HM]:HMIManager_linkTskMain: HMIMANAGER numArray[2] p= 8
 [HOST] [IPU1-0]     61.764320 s: [DEBUG][HM]:HMIManager_linkTskMain: HMIMANAGER numArray[2] x= 8
 [HOST] [IPU1-0]     61.764442 s: [DEBUG][HM]:HMIManager_linkTskMain: HMIMANAGER numArray[3] p= 64
 [HOST] [IPU1-0]     61.764564 s: [DEBUG][HM]:HMIManager_linkTskMain: HMIMANAGER numArray[3] x= 64
 [HOST] [IPU1-0]     61.764686 s: [DEBUG][HM]:HMIManager_linkTskMain: HMIMANAGER numArray[4] p= c8
 [HOST] [IPU1-0]     61.764808 s: [DEBUG][HM]:HMIManager_linkTskMain: HMIMANAGER numArray[4] x= c8
 [HOST] [IPU1-0]     61.764930 s: [DEBUG][HM]:HMIManager_linkTskMain: HMIMANAGER numArray[5] p= ff
 [HOST] [IPU1-0]     61.765021 s: [DEBUG][HM]:HMIManager_linkTskMain: HMIMANAGER numArray[5] x= ff
 
 
 [HOST] [DSP1  ]     61.713810 s: [DEBUG][HR]:: HMIRenderer sizeof(long) = 4
 [HOST] [DSP1  ]     61.713841 s: [DEBUG][HR]:: HMIRenderer sizeof(UInt64) = 8
 [HOST] [DSP1  ]     61.713871 s: [DEBUG][HR]:: HMIRenderer sizeof(num) = 8
 [HOST] [DSP1  ]     61.713932 s: [DEBUG][HR]:: HMIRenderer num p= 0
 [HOST] [DSP1  ]     61.713932 s: [DEBUG][HR]:: HMIRenderer num x= 0
 [HOST] [DSP1  ]     61.713963 s: [DEBUG][HR]:: HMIRenderer num lx= 0
 [HOST] [DSP1  ]     61.713993 s: [DEBUG][HR]:: HMIRenderer num llx= abcddbca00000000
 [HOST] [DSP1  ]     61.714024 s: [DEBUG][HR]:: HMIRenderer buf32[0],buf32[1]= 0, abcddbca
 [HOST] [DSP1  ]     61.714024 s: [DEBUG][HR]:: HMIRenderer num p= 1
 [HOST] [DSP1  ]     61.714054 s: [DEBUG][HR]:: HMIRenderer num x= 1
 [HOST] [DSP1  ]     61.714085 s: [DEBUG][HR]:: HMIRenderer num lx= 1
 [HOST] [DSP1  ]     61.714085 s: [DEBUG][HR]:: HMIRenderer num llx= abcddbca00000001
 [HOST] [DSP1  ]     61.714115 s: [DEBUG][HR]:: HMIRenderer num p= ffffffff
 [HOST] [DSP1  ]     61.714146 s: [DEBUG][HR]:: HMIRenderer num x= ffffffff
 [HOST] [DSP1  ]     61.714146 s: [DEBUG][HR]:: HMIRenderer num lx= ffffffff
 [HOST] [DSP1  ]     61.714207 s: [DEBUG][HR]:: HMIRenderer num llx= abcddbc9ffffffff

 [HOST] [DSP1  ]     61.774141 s: [DEBUG][HR]:: HMIRenderer numArray[0] p= 0
 [HOST] [DSP1  ]     61.774202 s: [DEBUG][HR]:: HMIRenderer numArray[0] x= 0
 [HOST] [DSP1  ]     61.774232 s: [DEBUG][HR]:: HMIRenderer numArray[1] p= 1
 [HOST] [DSP1  ]     61.774263 s: [DEBUG][HR]:: HMIRenderer numArray[1] x= 1
 [HOST] [DSP1  ]     61.774293 s: [DEBUG][HR]:: HMIRenderer numArray[2] p= 8
 [HOST] [DSP1  ]     61.774293 s: [DEBUG][HR]:: HMIRenderer numArray[2] x= 8
 [HOST] [DSP1  ]     61.774324 s: [DEBUG][HR]:: HMIRenderer numArray[3] p= 64
 [HOST] [DSP1  ]     61.774354 s: [DEBUG][HR]:: HMIRenderer numArray[3] x= 64
 [HOST] [DSP1  ]     61.774385 s: [DEBUG][HR]:: HMIRenderer numArray[4] p= c8
 [HOST] [DSP1  ]     61.774385 s: [DEBUG][HR]:: HMIRenderer numArray[4] x= c8
 [HOST] [DSP1  ]     61.774415 s: [DEBUG][HR]:: HMIRenderer numArray[5] p= ff
 [HOST] [DSP1  ]     61.774446 s: [DEBUG][HR]:: HMIRenderer numArray[5] x= ff

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    有效载荷大小为4KB、因此发送64位数据没有问题。

    您的问题是 由于使用 uint64_t 数据类型、并且通过取消引用"num"传递的指针没有指向第一个字节。

    应使用数组"uint8_t num[8]"发送8个字节的数据(64位)、num 将指向第一个字节。

    此致、
    斯坦利