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.

[参考译文] TMS320F2800137:获取地址数据

Guru**** 2589245 points


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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1406380/tms320f2800137-get-data-of-the-address

器件型号:TMS320F2800137

工具与软件:

尊敬的专家:

lTemp = 0x735;//adresss

lAddrData =(*(uint32_t*)(lTemp));//获取起始地址的数据

在上面的代码中,我想得到数据,起始地址是0x735,

值0f 0x734为0x1111;

值0f 0x735 为0x2222;

值0f 0x736 为0x3333 ;

我想知道  lAddrData 的值 吗? 0x22221111?0x2222333TM 0x3333332222?

哪些数据是正确的?

使用 CCS 12.4、少校准。

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

    您好!

    关于这一主题的专家目前不在办公室,直到星期二9/3,所以请期待一个延迟的答复。 对此造成的不便、我深表歉意。

    此致、
    Delaney

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

    你(们)好

    期待您的回复。

    在其他 MCU 中、0x33332222是正确的数据、但在这个 MCU 中、数据是不同的、为什么呢?
    最好能解释一下该原理

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

    您好!

    我将在本周设法进行这一调查、但可能会有几天的答复延迟。 感谢您的耐心等待。

    此致、

    Allison

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

    你(们)好

    期待您的回复。

    是否有进展?

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

    您好!

    Allison 目前不在办公室、但会尽快回复您。 对此造成的不便、我深表歉意。

    此致、

    Delaney

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

    您好!

    对于延迟延长、我们深表歉意。 连接到器件时、您是否已在 CCS 中检查数据? 如果转到"视图">"存储器浏览器"、并输入地址位置、您应该能够看到存储在该位置的内容。

    小端字节序对齐将 LSB 存储在最小地址、因此0x735为 LSB、然后是0x736、依此类推 当您说此 MCU 数据不同时、您会看到什么作为数据?  

    Allison

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

    你好

    如果转到"视图">"存储器浏览器"、并输入地址位置、您应该能够看到存储在该位置的内容。

    是的、数据位置正确。

    但当我用指针获取一些被分配地址的数据,这不是我想象的结果。

    如下所示。

    lTemp = 0x735;//adresss

    lAddrData =(*(uint32_t*)(lTemp));//获取起始地址的数据

    值0f 0x734为0x1111;

    值0f 0x735 为0x2222;

    值0f 0x736 为0x3333 ;

    当您说此 MCU 数据不同时、您会看到什么作为数据?  

    我使用了相同的代码,并显示了  lAddrData 的结果 。

    在其他 MCU 中、lAddrData = 0x33332222;它将根据指定的地址转发32位数据

    但在 C2000中、lAddrData =  0x22221111;它是根据偶数地址正向32位传输的数据

    您可以在 C2000中进行测试。

    我想知道为什么?如何处理另一个 MCU?

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

    您好!

    负责这一问题的专家目前不在办公室、于9月16日星期一返回。 请期待您的回复。

    谢谢!

    Luke

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

    你(们)好

    期待您的回复。

    是否有进展?

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

    你(们)好

    您能尽快解决这个问题吗? 现在已经21天了。

    是否只有一位专家可以回答此问题?

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

    尊敬的 Youjun:

    我真诚地对长期拖延不出去表示歉意。

    我认为这可能是我们编译器的一个产品-我正在向另一位专家循环、以获取有关这方面的输入。

    此致、

    Allison

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

    尊敬的 Youjun:

    请参阅指令集手册( 此处提供链接)部分 5.11 32位运算的对齐 以了解 从 奇数地址边界读取32位数据时会发生什么情况。

    在 C28x 上、当您从地址 lTemp 开始对数据进行32位读取时、这正尝试在奇数边界上读取。 本节规定从下一个最高16位地址增量获取高阶位、采用小端字节序格式。  0x735中下一个最高地址为 0x734 (更高地址在存储器中-不是数字地址)、因此抓取到了0x1111。 由于它是在小端字节序中、因此会交换0x2222和0x1111、从而将0x2222放在最高有效字节中。

    以及如何处理另一个 MCU?

    您究竟想用 MCU 做什么? 您是否只是将代码转换到 C28x 架构?  

    此致、

    Delaney

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

    你好、 Delaney

    您究竟想用 MCU 做什么?  

    我想读取一些信息(保存在某些变量中)、例如 DATA[8](16位)、我需要从 DATA[1]读取4个数据(64位)、而不是从 DATA[0]读取;

    使用时、如果不小心、可能会发生错误、并且很难找到原因。

    是否有办法更改此指令设置或避免此设置?

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

    尊敬的 Youjun:

    我认为、避免此处出现任何错误的最佳方法是仅 从偶数地址边界放置和读取数据。 我仍然不确定我是否理解用例、是否有理由需要直接从存储器中读取地址而不是从变量或寄存器读取? 如果您从一个变量中读取、那么您应该不会看到这个对齐问题、因为编译器会自动将它放在偶数地址边界上(据我所知)。

    此致、

    Delaney

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

    你(们)好

    我使用一个 Freemaster 软件, Freemaster 只发送 一个 地址 和长度,所以我 需要直接从内存中的地址读取。

    是否有办法更改此指令设置?

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

    尊敬的 Youjun:

    是否将 Freemaster 软件用于调试目的? 我建议 改用 CCS 软件、因为它将始终与 C28x CPU 兼容。 如果可行、请告诉我。

    此致、

    Delaney

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

    你(们)好

    这只是一个示例。

    在某些情况下、我可能需要直接从存储器中的某个地址读取。

    是否有办法更改此指令设置?

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

    尊敬的 Youjun:

    观察生成的反汇编代码、0x0038fa 处的行内容为0x22221111。 您可以查看指令集、以查看是否 有方法 改变该行、以读取较低的地址而不是较高的地址。 此处提供了指令集指南链接。 如果有办法进行更改、我相信您会 想要创建您自己的 asm 文件、该文件具有执行 这些代码行(lAddrData 生成的所有内容=(*(uint32_t*)(lTemp);C 中的行)的函数、并进行所需的更改。 然后、您可以让您的 C 文件调用此代码来执行。

    此致、

    Delaney

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

    你好

    这对我来说非常困难,专业人士可以 尝试吗?

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

    尊敬的 Youjun:

    遗憾的是、这超出了我们在 E2E 上提供的范围。 您始终可以自由地在数据被读取后以某种方式对其进行操作(例如读取两个 uint32_t 值和进行位移以创建具有预期值的变量)。 我将邀请另一位专家、看看他们是否有任何评论、但据我所知、解决这个问题的方法并不简单。  

    此致、

    Delaney