公告

大中华汽车电子生态圈社区并入开发者社区- 更多资讯点击此

Tip / 登入 to post questions, reply, level up, and achieve exciting badges. Know more

cross mob

XMC实验分享之八十六: 再论XMC工程中的Stack,Heap配置与使用

XMC实验分享之八十六: 再论XMC工程中的Stack,Heap配置与使用

User12775
Level 5
Level 5
First solution authored First like received

stack, heap是所有嵌入式工程中要用到的概念, 或者说所有应用都会用到的概念. 但是也是很容易出问题的知识点. 比如Stack Overflow就是很经典的问题. 如果不把嵌入式工程的stack,heap配置使用完全搞通, 在这种问题定位上经常会费很多时间.


这个属于基础知识, 但是很多人没有掌握好, 最近又遇到好几个工作几年的工程师在这些问题上搞不清楚. 我就想, 如果让他们来仔细看看这方面的理论, 再做点实验, 其实一天半天就可以掌握的很好. 但是这种人又会觉得这么花时间不值得. 确实没办法, 把基础知识打牢, 和得过且过是区分工程师的水平的一个分水岭, 可惜很多工程师不愿意花这点时间, 要是说他不懂他还很气愤, 认为你们这些人钻牛角尖.


所以也不想多说了, 再来发一贴, 以后还会经常发这种基础知识的贴子, 希望愿意学的人能够从我的贴子得到一些有用的体会.


所有处理器, 包括嵌入式处理器的编程模型其实差不多, 不管是Von Nuemann, 还是Harvard架构. 不管是RISC还是CISC. 硬件上都有对Stack的支持,比如Stack Pointer这种寄存器至少一个, 至于Heap则是纯软件概念, 事实上很多嵌入式工程为了简洁为了稳定, 根本不使用Heap都有. 但是我知道的趋势是嵌入式软件的复杂度不断提升, 硬件本身的价值不断降低, Heap的使用也是越来越常规化. 从本质上来讲heap管理内存的方式比Stack管理内存的方式要更加高效. 但是heap管理上也更复杂, 更容易出错.


本贴为了简洁, 把话题进行限定:

  1. 不讨论有OS,或者复杂软件库的应用. RTOS, 复杂的软件库往往有自己的内存管理模型, 你把基础的模型搞通了,再理解特有模型也不难

  2. 仅仅讨论XMC4系列,以XMC4700为例子, 其他处理器也非常类似, 读者应该可以做到举一反三

  3. 仅仅讨论Keil MDK和GCC两种工具链,  这也是目前使用比较多的开发工具. 至于IAR, Tasking等等往往跟GCC的管理方式非常类似.

0 点赞
1248 次查看
4 评论