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.

[参考译文] TM4C1294NCPDT:如何在 TI 汇编语言中创建和使用变量?

Guru**** 2468460 points


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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/671162/tm4c1294ncpdt-how-to-create-and-use-a-variable-in-ti-assembly

器件型号:TM4C1294NCPDT

我不确定这是不是我应该问这个问题的论坛、但我发现的越近。

我想在汇编语言中创建一个变量、并将其用于同一汇编文件中的两个函数中。 阅读《ARM 汇编语言工具用户指南》 、我可以使其像下面的示例代码一样工作:

;创建一个名为变量4字节的未初始化段
;这是如何创建变量的 TI 汇编语言吗?
.bss 变量、4.

;我编写了这篇文章,但我不知道它是如何工作
的;如果没有这行代码,则不能使用
variable_addr .field 变量,32

.text
全局 foo
全局栏

;这些函数只是为了显示我如何尝试使用该变量

Foo:
ldr r1,variable addr;将变量地址加载到 r1中
LDR R2、#0x01
STR R2、[R1] ;在变量中保存0x01
BX LR

条形图:
LDR R1、variable _addr
;
;对变量执行一些操作
;
BX LR

我是否以正确的方式创建和使用变量? 我阅读了这些文档、我阅读了很多论坛问题、但我仍然不知道如何操作。

我知道变量是在第3行中创建的、如果没有.field 变量、我就不知道如何使用它。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我想我可以在错误的论坛上发帖。 是否有人可以将此问题移至适当的论坛或将我引导至正确的论坛、以便我可以在那里提出此问题?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    [引用 USER="RRD"]引导我找到正确的 一个[论坛][/引用]

    请注意、该供应商提供了高级的、基于 C 语言的 API、并已将其工作重点正确地放在 API 中。    使用(其他)编码方法会增加"复杂性-时间支出-细节"、从而降低论坛的有效性。

    从论坛页面顶部-在供应商的"红色样式栏"中-单击 :"论坛">"开发工具">"Code Composer Studio"。

    我注意到(一些) ASM 问题、如果不是最佳问题、这至少会让您"接近"。

    对 CCS 的审查是否揭示了(必要的)"ASM 用法"的表述、这一点仍然不清楚。   (公司/我使用"IAR"、因此我无法提供进一步的建议。)   请注意 、在 PRO IDE (IAR、Keil)中、有许多页面(填充为"详细信息")专门用于 ASM。   (即使在"免费"代码大小受限版本中-此类"asm 详细信息"可能会与您的工作重叠-(甚至)在此处与(有限)供应商产品重叠。)

    虽然不是"特定于供应商"(这是一个关键考虑因素-是否不是)、但 Joseph Yiu 的著作 《ARM Cortex M3/M4的最终指南》-提供了"指导和方向"、回复:asm。   (虽然不包含 IAR 提供的详细信息。)

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您所做的是正确的。 .bss (以符号开头的块)保留4个字节、链接器将这些字节放入 RAM 中。 第7行、在闪存(.text 段)中、在汇编代码附近创建一个包含"变量"地址的位置。 在第16行中、汇编器将该指令转换为加载到 R1中、存储在 PC 位置的值减去偏移量。 偏移会导致存储在"variable_addr"的值加载到 R1中。

    您的逻辑问题可能是、为什么我们不能直接加载存储在"variable"中的值、为什么我们需要首先加载地址? 答案在于、汇编语言指令受硬件限制。 在这种情况下、偏移的大小受到限制。 RAM 可能(实际上)离 LDR 操作码内分配的位数所表示的偏移量太远。 有关 Cortex M4汇编语言的更多信息、请参阅 :static.docs.arm.com/.../DDI0403E_B_armv7m_arm.pdf
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Bob -再说一次-我相信你已经"超越/超越"了。

    该 ARM 文档为916页-涵盖 ARM v7-A 和 v7-R (更高级的 MCU)以及 "v7-M" (此处为 MCU)

    海报必须将他的"发现"限制 v7-M 手册的章节中。   (除非数据特别注明为"通用-适用于所有变体"。)   这让其他人"跳过"了-因此我的注释...