我在想既然是将程序下载到芯片内部的Flash中的,并且程序是bin格式二级制的,没有地址信息的,那复位后,是怎么样知道将这些变量放到RAM 具体位置的?
二进制数据中,包含了命令字,执行参数,参数包括地址、变量值等信息。
堆是从RAM中划出的一部分区域,用来存放程序运行中的各种变量。
变量是放在堆中的,对于全局变量上电后会有堆的初始化代码,将Flash中存放堆的初始值数据(即变量初值)全部搬移到堆中。
对于局部变量,只有在程序执行到相应子程序后,才从Flash取初始值放到RAM中。
局部变量是放在堆中,全局变量是放在外面的,我是在想,就像全局变量,放在RAM中的位置,是怎么实现的?因为Bin文件中,没有变量的地址信息。
比方说,你如果在代码中定义了一个很大的数组,如果你没有赋初值,那么对于芯片来说,FALSH空间不变,因为FLASH只有头地址和尾地址,两个地址值。只是RAM会被占用的大些,如果你给了初始值,那么就要为这个初值分配地FLASH空间,这样会撑大flash.