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.
工具/软件:TI C/C++编译器
尊敬的支持团队:
我们在 ARM Cortex A53上遇到指针问题。
问题如下:分配指针值时、执行的代码返回64位交换指针。
u8_g_tmp_ptr=(u8_t *) gFgNrtIdnValues.MACAddr.pData;
例如、当指针为0x000012345678时、 u8_g_tmp_ptr 将变为0x12345678000000。
我们在下面的屏幕截图中捕获错误。
pData 是一个空指针。
typedef 结构体 tagELEMENTDATA
{
word_a wLen; //<元素的实际长度
word_a wMaxLen; //<元素的最大长度
void *pData; //<指向元素数据的指针
}ELEMENTDATA; //<结构#tagELEMENTDATA 的类型定义
您能否检查这是否是错误、或者我们是否需要以其他方式使用它。
此致、
Thomas
我想看看编译器生成的汇编代码。 从命令行运行...
% arm-none-eabi-objdump -drwS final_execute.out > disassembly.txt
然后将生成的文本文件附加到下一个帖子。
谢谢、此致、
乔治
尊敬的乔治:
这是提取的段。
if (xstrncmp ((char *)&ptr[0x2C]、(char *) UCC_TEST_MSG_ID、xstrlen (UCC_TEST_MSG_ID))= 0)
8007a288:f9401ba0 LDR x0、[X29、#48]
8007a28c:9100b013添加 x19、x0、#0x2C
8007a290:58000b00 LDR x0、8007a3f0
8007a294:97fe91b0 BL 8001e954
8007a298:12003c00和 W0、W0、#0xFFFF
8007a29c:2a0003e1 mov W1、W0
8007a2a0:58000a80 LDR x0、8007a3f0
8007a2a4:2a0103e2 mov w2、w1
8007a2a8:aa0003e1 mov x1、x0
8007a2ac:aa1303e0 mov x0、x19
8007a2b0:97fe920a BL 8001ead8
8007a2b4:7100001f CMP W0、#0x0
8007a2b8:54000641 b.ne 8007a380 // b.any
{
U8_g_tmp_ptr=/*(u8_t *)&gFgNrtIdnValues.bArrMACAddr[0];*/
(U8_t *) gFgNrtIdnValues.MACAddr.pData;
8007a2bc:580009e0 LDR x0、8007a3f8
8007a2c0:b9400401 LDR W1、[x0、#4]
8007a2c4:b9400800 LDR W0、[x0、#8]
8007a2c8:d3607c00 LSL x0、x0、#32
8007a2cc:aa010000 Orr x0、x0、x1
8007a2d0:aa0003e1 mov x1、x0
U8_g_tmp_ptr=/*(u8_t *)&gFgNrtIdnValues.bArrMACAddr[0];*/
8007a2d4:58000960 LDR x0、8007a400
8007a2d8:f9000001 str x1、[x0]
对于(int i= 2;i < 8;i++)// MAC:dest。 =>发送和发送到主设备
8007a2dc:52800040 mov W0、#0x2 //#2
8007a2e0:b9004fa0 str W0、[X29、#76]
8007a2e4:14000018 b 8007a344
{
ptr [i]= ptr [i+6];
8007a2e8:b9804fa0 ldersw x0、[X29、#76]
8007a2ec:91001800添加 x0、x0、#0x6
8007a2f0:f9401ba1 LDR x1、[X29、#48]
8007a2f4:8b000021添加 x1、x1、x0
8007a2f8:b9804fa0 ldersw x0、[X29、#76]
8007a2fc:f9401ba2 LDR x2、[X29、#48]
8007a300:8b000040添加 x0、x2、x0
8007a304:39400021 ldrb W1、[x1]
8007a308:39000001 strb W1、[x0]
ptR[i+6]=* u8_g_tmp_ptR++;
此致、
Thomas
汇编代码看起来正确。 但是、我在 ARM 汇编方面的专业知识比我想的要少。 因此、我仍然希望向适当的团队提交错误。 遗憾的是、在 GCC ARM 编译器的支持下、最近发生了变化。 我正在询问将此错误归档到何处。
谢谢、此致、
乔治
假设您使用 Processor SDK 随附的 GCC ARM 编译器。 它有一个类似的位置
C:\ti\gcc-linaro-7.2.1-2017.11-i686-mingw32_Aarch64-elf
请收集测试案例、然后我很乐意将其提交给 Linaro 进行分析。
对于包含问题指针分配的源文件,请按以前的方式进行编译,但添加以下选项:-E -o name_of_file.txt。 它会对文件进行预处理、并将其写入使用-o 选项命名的文件中。 将该文件附加到下一个帖子。
仅使用--version 选项运行编译器并显示输出。
显示如何在问题源文件上调用编译器。 请复制并粘贴文本、不要使用屏幕截图。
如果您不愿意发布这些详细信息、欢迎您将其私下发送给我。
谢谢、此致、
乔治