When I use the link_control() function to send 64 bits of data from IPU to DSP, why is 32 bits lost?
If the data transmitted between IPU and DSP can only be controlled within 32 bits, why can a total size of 64 bits array be accurately transmitted to DSP?
In addition, in the daily debugging, the problem of log loss often occurs, I would like to ask why this is, is there any way to improve?
Below is the validation code and the corresponding log:
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