学习STM32中的疑惑,希望小伙伴能帮忙看看

2019-07-20 08:28发布

    各位小伙伴,最近学习STM32F407遇到了很多的问题,有的问题被我解决了,有点还迟迟没有解决。通过遇到的这些问题,我有很多疑问,希望有知道的小伙伴能够解惑,谢谢各位啦。 内存管理1.png 内存管理2.png 内存.png

1、在学习了内存管理一节当中,为什么要管理STM32内部的内存(SRAMIN和SRAMCC)?  难道STM32内部管理机制不好么?  STM32内部是怎么管理这些内存的?  在哪里可以看到呢?

2、汇编文件startup_stm32f40_41xxx.s中分配的堆和栈是分配在那一片内存上的呢?  SRAMCC还是SRAMIN呢?  全局变量和静态变量又是在哪里?

3、SRAMIN一共有128KB的大小,内存池占用了100KB,内存管理表大概占用了将近7BK,也就是说对于SRAMIN这片内存,用户自己使用了107KB的空间,只能使用mymalloc函数来申请空间。值留下了20KB左右的空间。如果第二个问题中的堆栈是在这里分配的,那么岂不是那个汇编文件就只有20KB的空间可以给堆栈使用。

4、SRMCC主要是用来干什么的? 从原子哥的注释可以看到是给CPU使用的,但是具体作用呢?  ·

5、既然SRAMCC(共64KB)主要是给CPU使用的,意思是不是说用户不能使用呢?  还是说用户根本就访问不到这里的存储空间?    SRAMCC分配了60KB的内存池,内存管理表使用了3.75KB,将近4KB,也就是说我们把SRAMCC全部都自己管理了。

6、Execution Region指的是哪个地方呢? 是内存么?  如果是,那么指得是SRAMCC还是SRMIN呢?

7、STM32的flash采用总线是的总线接入,那么它的flash的存储空间是可以任意访问的。也就是说我们下载进入flash中的代码是可以直接在flash中执行的,不用加载到ram。从网上博客了解到,其实代码需不需要加载到RAM,其实是可以自己控制的,分散加载脚本就是用来干这个的。那么,MDK是怎么判断用户的代码是否需要加载到RAM中呢?  还是所有的都不加载?  

   暂时先这些问题吧,希望知道的朋友能够答疑解惑,谢谢各位小伙伴了

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。