我已经阅读了几个嵌入式项目,并且在所有这些项目中,引导加载程序是用汇编而不是C编写的。这有什么理由吗?
答案 0 :(得分:6)
通常至少入口点存根以及可能转换到真实内核需要在汇编中编写,因为它们涉及在C中无法表示的控制传递/调用约定约束。例如,如果引导加载程序需要在堆栈可用之前初始化堆栈指针指向ram,这不能用C表示,没有笨拙的编译器扩展。然而,通常可以将写入的数量保持为非常小并且与这些类型的边界隔离。如果引导加载程序的其余部分也是用asm编写的,那通常表明作者很难评估成本(维护,错误等)与收益(可能更小的尺寸)。
答案 1 :(得分:3)
使其尽可能小。您不希望引导加载程序占用您可能用于实际程序的所有空间,而在某些芯片中,为引导加载程序保留的内存空间相对较小。这些小程序仍然是大会手动优化的可行目标。
你可能会在C中非常接近。