前言:1年前就萌生了学习嵌入式的想法,当时买了一个ARM9(mini2440)的
开发板,由于种种原因,拖了一年都没学成,今年7月份终于暗下决心,趁着还不算太老,趁着对嵌入式还有很强的兴趣,还不快拼一把,不然等着老了后悔。
上一周咨询了资深的嵌入式工程师学习嵌入式的路线和方法,他建议从裸机开始,因为之前有一些51
单片机和C语言的基础,于是一周内猛看,打算一周把mini2440的硬件裸机都搞懂,没想到事与愿违,ARM裸机还是和51单片机有很大的差别的,如下附上学习笔记:
20160711:ARM汇编中,进入子函数的指令是BL(自动保存返回指针至LR),2440init.s中是这么写的:
[ :LNOT:THUMBCODE ;if thumbcode={false} bl main L代表logic变量
bl Main ;Don't use main() because ......
b . ;注意小圆点
]
;//if thumbcod={ture}
[ THUMBCODE ;for start-up code for Thumb mode
orr lr,pc,#1
bx lr
CODE16
bl Main ;Don't use main() because ......
b . ;注意小圆点
CODE32
]
首先判定是否是ARM模式还是Thumb模式,然后进入Main。本以为这应该就没问题了,可是点击Make,发现主函数没有被编译,仅编译了init.s和lib.c文件,最后没办法,和正常运行的init文件作对比,发现在最开头有这么一句IMPORT Main,意思应该是告诉编译器,下面要有可能要调用Main函数,编译器才会知道,类似于C语言,如果子函数放在Main函数下面,编译会出错,必须在Main函数之上也要声明一下。搞定了,LED,按键,Uart终于可以跑起来,下一步搞中断。
0