首先,在ARM组装方面,我是新手。我实际上有一些为ARM指令集编写的代码片段,但我的目标是使用Thumb-2指令集的Cortex-M4架构。我是否必须重新编写整个代码,更改一些代码或保持原样?
实际上我有几个大约250行的文件。这是一个样本
msr cpsr_c, #(CPSR_IRQ_LOCKED | CPSR_SVC_MODE)
stmfd sp!, {r0-r2,lr}
mrs r1, spsr
stmfd sp!, {r1}
ldr r1, =nested_kernel_entrance_counter
ldr r2, [r1]
add r2, r2, #1
str r2, [r1]
cmp r2, #1
bhi skip_kernel_enter
#if WITH_MEMORY_PROTECTION == YES
stmfd sp!, {r3}
bl tpl_mp_kernel_enter
ldmfd sp!, {r3}
#endif
ldr r1, =tpl_kern
mov r2, #NO_NEED_SWITCH
strb r2, [r1, #TPL_KERN_OFFSET_NEED_SWITCH]
答案 0 :(得分:1)
您可能不需要重写太多,具体取决于您使用的ARM指令集和ARM变体的哪些功能。您的ARM代码也可能与Thumb-2兼容。
一旦引入了Thumb-2,ARM就会创建统一汇编语言,以提高代码的可移植性。您可以在此处找到相关信息:ARM UAL。我发现它与过去的ARM组件没有明显的偏差,最大的变化是引入了条件执行的IT(E)
指令。维基百科有一个例子here。
还有一些其他构造不能直接移植,如果你使用的是Cortex-M4没有的更先进或更复杂的ARM内核的功能,那么需要重写那部分。
我认为如果代码还没有在ARM UAL中编写,虽然需要时间,但在代码上运行脚本可以相对简单,该代码可以标记未正确为UAL编写的功能的使用。一个简单的正则表达式可以检查指令末尾的条件,然后将这些构造转换为使用IT(E) <cond>
甚至可能相对容易。