当提到将软件/固件从另一个体系结构移植到某个体系结构时,我仍然对这个概念感到困惑。
例如,如果软件已移植到ARM体系结构,如果是C / C ++代码,则我的理解是不需要更改源代码,我们仅使用ARM特定的编译器将代码编译为指令被ARM芯片理解吗?
如果源代码需要根据体系结构(无论是ARM,PowerPC,X86等)进行更改,您可以举个例子说明为什么吗?
我一直在阅读有关U-Boot的信息,它指出它最初是作为嵌入式PowerPC芯片的引导程序,从那时起便被移植到ARM和其他体系结构。 再次,移植将意味着它只是使用其他编译器进行了编译吗?我几乎可以肯定,它并不是那么简单,所以请解释一下为适应特定体系结构而需要对源代码等进行的更改。
答案 0 :(得分:1)
由于您要求提供一些示例,因此在C
中有两个相对简单的非便携式示例,仅供参考。
(请注意,这些是不可移植的 code 的示例。移植活动还可能包括与现有代码无关的任务,例如为自定义目标/编写接口或新的硬件抽象层/处理器)
sizeof(uint32_t)
容易期望它的值为4
,但是在类似TI C2000的体系结构上,它的值为2
。假设4
(当然首先是越野车)的算法 对于C2000可以很好地编译,并且可以运行,但是,是否会产生预期的结果还是很值得怀疑的
Typecasts
typedef struct _M {
uint32_t a;
uint32_t b;
} M;
uint8_t *p = (uint8_t *)malloc(100);
M *m = (M *)p;
printf("%d", m->b); //may cause hard fault at m->b on Cortex-M0
最后一行将始终在Cortex-M4上运行,但是可能取决于p
与32位的对齐方式,导致Cortex-M0出现硬故障。边界。参见this