在阅读有关堆栈溢出的this Embedded Gurus article之后,我有兴趣在嵌入式(裸机ARM)项目中颠倒静态RAM和堆栈的顺序。请参见下图:
当前:所有静态RAM数据都放入整个RAM部分。 "堆栈的开始" address固定在最高RAM地址,并作为链接器定义的符号提供。
反转:如果"静态变量"部分具有固定大小,但随着变量的添加/删除,大小会发生变化。我想要做的是将所有静态RAM数据放入RAM的末尾,然后根据静态RAM数据的大小确定堆栈的起始位置。那"堆栈开始"然后,地址将作为链接器定义的符号提供。
有没有办法让一个可变大小的部分在整个RAM部分的末尾保存静态RAM数据?如果没有,如何在不需要静态RAM数据的固定大小部分的情况下实现这种反转?
答案 0 :(得分:0)
我不认为gcc链接描述符允许你固定一个部分的结尾并让它长大。我认为绿色的山丘允许这样,基尔没有。
但是,你可能并不想做你想做的事。您应该故意调整堆栈大小而不是依靠硬件来解决您的问题,特别是如果它真的很重要(即安全关键)。
此外,当它访问物理RAM外部时,它不能保证你的mcu实际上会出现硬故障。这取决于实施。