avr的应用程序启动我都做了啥(head.S)
来源:互联网 发布:数据类型 js 编辑:程序博客网 时间:2024/04/30 09:50
由于我们的firmware不希望用到C库,所以链接器脚本和c-runtime都需要自己写,其实也没写,无非就是把C库的拿来改了几行。这没什么好说的,就把avr c-runtime主要做了写啥记录记录:
1. 设置中断向量表(vector),这在datasheet中是有定义的,每款芯片不同,向量个数亦不同,为了做到通用,这里定义了100+的向量,实际上,单独芯片通过定义_VECTORS_SIZE来控制最终有多少个向量;
2. 默认中断处理函数,在用户没有注册中断处理函数时,则指向默认的处理函数,这里默认的处理就是RESET;
3. 初始化一些寄存器,如清零;
4. 初始化.data段,从FLASH拷贝数据到RAM;
4.1 堆的初始化,我们程序没用到,不做;
4.2 栈地址设置(可以由外部传入);
5. 初始化.bss段,清零;这是libgcc的功能,直接把一个用avr-libc编译的程序反汇编,抄了__do_clear_bss等几个调用,完成后跳转到main();
6. 跳转到main(),实际上5完成就跳了,这里就不需要了。
avr刚接触几天,细节没有看过,很多东西没有理解,能脱离C库,编译、运行算是第一步成功了,记录着。
- avr的应用程序启动我都做了啥(head.S)
- avr的应用程序启动我都做了啥(enrty.S)
- Bug, Error我都做了啥
- 水木,我为你能做的都做了!
- tomcat启动的时候都做了什么
- Linux启动都做了什么?
- Tomcat 启动都做了什么?
- 近来我都做了什么
- 我都做了些什么
- 2016我都做了什么
- 这个五月我都做了什么
- 1.1 java 虚拟机如何启动的?启动之后都做了什么?
- java 虚拟机如何启动的?启动之后都做了什么
- 工作一年了,我都做了些什么呢?
- “我知道你们都做的很幸苦,但我却不知道你们为我们做了什么”
- 外国小孩做的数学题...笑到我眼泪都飚出来了
- CSDN的好友功能太强大了,别人都知道我在做什么,汗!!
- 这三天低效率开发的总结,我都做了些什么啊?
- 数据访问组件SqlHelper
- 用C实现串匹配的几种方法,kmp和BM
- 东方之珠
- DOS网络命令大全
- Java与C++的浅层次区别
- avr的应用程序启动我都做了啥(head.S)
- Junit 概述
- DynamicResource与StaticResource的区别
- dojo.string模块详述
- [C++]BCD碼轉換問題
- java 查看JDK中底层源码
- UML中几种类间关系总结
- 在使用JavaBean时遇到的问题:The value for the useBean class attribute is invalid
- 命令行操作系统Linux和Unix中 最常用的网络命令