摘要:
1、Memory Management Unit(存储器管理单元) 单片机与ARM在硬件体系上的一些区别:其中就有MMU的区别。 虚拟地址的使用 把p1.c复制成P2.c,把变量a改成b,再进行编译看看情况如何 可以看出两个程序在同样地址读出不同的值,在这里就用到了MMU。 在这里程序当中的地址都是 阅读全文
摘要:
1、为什么要混合编程 汇编语言:执行效率高;编写繁琐; 执行效率高;能够更直接地控制处理器。 c语言:可读性强,移植性好,调试方便。 1、汇编调用c函数 2、c调用汇编函数 汇编语言定义的函数(标号),需要把它定义为全局的。 在start.s中修改 在main.c中修改 3、c内嵌汇编 1、格式 输 阅读全文
摘要:
1、跳转到c代码 因为内存中的代码来自于垫脚石SRAM,他们是相同的。 采用绝对跳转方式来完成。 因为我们是从汇编代码跳转到c语言的程序,所以我们要提前准备一个main.c文件。 修改makefile 2、验证看跳转成功没有 使用c语言来点亮led 汇编中的led点亮 在c语言当中地址一定要有类型的 阅读全文
摘要:
1、BSS段的作用 初始化的全局变量存放在数据段; 局部变量存放在栈中; malloc的存放在堆; 未初始化的全局变量存放在BSS段; 找到bss段的起始与结束地址,往里面添加0,便初始化好了。 打开连接器脚本 阅读全文
摘要:
1、概念解析 ARM系统使用的是满栈! ARM采用降栈!!! 栈帧 每一个进程会有一个栈,该进程中的每一个函数会分割栈的一部分,那么每一个函数使用的那部分栈就叫做栈帧。那么所有栈帧组成了整个栈。 子函数func里面保存了main函数的上边界FP和下边界SP。 2、栈的作用 保存局部变量 代码样例 编 阅读全文
摘要:
1、回顾ARM启动流程就可知道需要执行代码搬移 2、代码搬移 1)起点:NAND FLASH,今天的起点是SRAM垫脚石。为什么?因为我们要从nandflash取搬移数据需要先对其进行初始化,二而我们并没有初始化;垫脚石SRAM起始地址:2440为0,6410为0x0c000000,210为0xd0 阅读全文