我如何为不同的 cortex-m 使用相同的 asm 代码
How I can use the same asm code for different cortex-m
我是 asm 的新手。
我想使用一些 asm 函数作为 cortex m0 和 m4 的外部库。
但是 asm 函数的代码包含下一个声明:
.cpu cortex-m0
现阶段我的问题 - .cpu
它是强制性指令吗?
对于 gnu 汇编程序,该行告诉汇编程序要编码的指令集,基本上是 armv-6m(没有 fpu 等),它目前兼容所有 cortex-ms 所以如果你想要 portable 与该汇编语言相关的源代码是一种很好的方法。
但您还需要将高级代码编译为 armv6-m 指令。
.cpu 不是指令,它是 tool/assembly 语言特定指令。
-mcpu=cortex-m0 在 gnu 汇编器和 gnu c 编译器命令行上也表示 cpu 和指令集。 asm 文件中的 .cpu 指令覆盖了 gas 命令行中的 -mcu 选项。
I want to use one asm function (in separate file) to link it to cortex-m0 and cortex-m4 C project. And I would like to remove .cpu at all. May I do it?
你必须告诉汇编程序要使用什么指令集,首先是 arm vs thumb,然后在每一个中都有变化,所以你必须非常清楚,你可以指示 armv4t 或 cortex-m0 以获得兼容的东西在 cortex-ms 中,您必须在代码中放入 .thumb 以指定拇指与手臂。如果您想从 C 中调用代码(想在向量外部或内部使用它 table),请指明标签是一个函数。
最安全的做法是将 .cpu 行放在那里
.cpu cortex-m0
.thumb
.globl myfun
.thumb_func
myfun:
bx lr
是迄今为止所有 cortex-ms 的所有 cortex-ms 从 C 编写的用 gnu 汇编程序调用的函数的完整最小示例。
arm-whatever-whatever-as myfun.s -o myfun.o
和 link 与项目有关。可以删除 .cpu 行,但必须
arm-whatever-whatever-as myfun.s -mcpu=cortex-m0 -o myfun.o
但无法删除任何其他行。 .thumb_func 有一个可供您使用的备用指令,但如果您想从外部对象进行调用,则必须告诉汇编程序将标签标记为函数。
.cpu cortex-m0
.thumb
.globl myfun
.type myfun, %function
myfun:
bx lr
.thumb_func 特定于 gas 当然和 thumb 模式代码并指示下一个标签是一个函数,其中 .type 可以用于 arm 或 thumb 并且像 .globl 不必立即在标签之前。
根据标题为“ARM®Cortex®-M for Beginners”的 Arm 白皮书,您应该使用 .cpu cortex-m0
指令:因为 Cortex-M0 指令集是 Cortex-M4 指令集的子集,恕我直言,这将是确保您的代码将在两个 MCU 上执行的唯一方法:
我是 asm 的新手。 我想使用一些 asm 函数作为 cortex m0 和 m4 的外部库。 但是 asm 函数的代码包含下一个声明:
.cpu cortex-m0
现阶段我的问题 - .cpu
它是强制性指令吗?
对于 gnu 汇编程序,该行告诉汇编程序要编码的指令集,基本上是 armv-6m(没有 fpu 等),它目前兼容所有 cortex-ms 所以如果你想要 portable 与该汇编语言相关的源代码是一种很好的方法。
但您还需要将高级代码编译为 armv6-m 指令。
.cpu 不是指令,它是 tool/assembly 语言特定指令。
-mcpu=cortex-m0 在 gnu 汇编器和 gnu c 编译器命令行上也表示 cpu 和指令集。 asm 文件中的 .cpu 指令覆盖了 gas 命令行中的 -mcu 选项。
I want to use one asm function (in separate file) to link it to cortex-m0 and cortex-m4 C project. And I would like to remove .cpu at all. May I do it?
你必须告诉汇编程序要使用什么指令集,首先是 arm vs thumb,然后在每一个中都有变化,所以你必须非常清楚,你可以指示 armv4t 或 cortex-m0 以获得兼容的东西在 cortex-ms 中,您必须在代码中放入 .thumb 以指定拇指与手臂。如果您想从 C 中调用代码(想在向量外部或内部使用它 table),请指明标签是一个函数。
最安全的做法是将 .cpu 行放在那里
.cpu cortex-m0
.thumb
.globl myfun
.thumb_func
myfun:
bx lr
是迄今为止所有 cortex-ms 的所有 cortex-ms 从 C 编写的用 gnu 汇编程序调用的函数的完整最小示例。
arm-whatever-whatever-as myfun.s -o myfun.o
和 link 与项目有关。可以删除 .cpu 行,但必须
arm-whatever-whatever-as myfun.s -mcpu=cortex-m0 -o myfun.o
但无法删除任何其他行。 .thumb_func 有一个可供您使用的备用指令,但如果您想从外部对象进行调用,则必须告诉汇编程序将标签标记为函数。
.cpu cortex-m0
.thumb
.globl myfun
.type myfun, %function
myfun:
bx lr
.thumb_func 特定于 gas 当然和 thumb 模式代码并指示下一个标签是一个函数,其中 .type 可以用于 arm 或 thumb 并且像 .globl 不必立即在标签之前。
根据标题为“ARM®Cortex®-M for Beginners”的 Arm 白皮书,您应该使用 .cpu cortex-m0
指令:因为 Cortex-M0 指令集是 Cortex-M4 指令集的子集,恕我直言,这将是确保您的代码将在两个 MCU 上执行的唯一方法: