|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?注册
x
最近很想约做嵌入式软件的朋友为兼容ARM9的软核处理器写一些很炫的应用。可是该朋友只对基于cortex-m3的STM32熟悉,对于ARM9不是很了解。在交谈的过程中忽然想到,有没有可能指令集用ARM9的,但中断处理完全按照cortex-m3。大家都知道Cortex-M3在中断处理上做了很大的创新,它通过压栈的方式保存寄存器,而ARM9是通过banked register来保存部分寄存器。使用banked register可以节省压栈的时间,但缺点在于banked register会让处理器内核占用面积较大。两相结合起来,就是一套新的处理器架构。欢迎众多设计者参与这个新处理器架构的讨论过程。
话说这种掐头去尾、张冠李戴的结合方式要拜马克思所赐。我们让政治课都学过“辩证唯物主义”。最开始,唯物主义有,不过那是机械的;辩证也有,不过那是辩证唯心主义。马克思两相取其长处,这就成了我们学到的“辩证唯物主义”。ARM推行了很久的ARM9处理器架构,又针对最新的软件设计流程,搞了很不错的cortex-m3的中断方式,不过这一套方式没有用在流行很久的ARM9的处理器架构上。现在,我们在有了兼容ARM9的软核处理器后,完全可以这个非常棒的中断处理移植到这个软核处理器上面了。
可能很多人担心,这样做会不会影响到使用ARM的生态系统。这个完全不用担心,做嵌入式软件的朋友说了,他在某处放一个中断handler,只要你硬件按照这种方式做,软件按照这种方式搞,编译器只会按照你编写的软件为你服务,绝对不会怀疑你搞张冠李戴,就拒绝罢工。唯一一个不同的是不能使用keil自带的debug工具仿真调试了——因为这种架构keil根本就无从得知。他这样说,让我增加这样修改的信心了。也就是是说只要软件支持,硬件也支持,那么编译器就只是达成两方面合作的工具而已。这让我们自定义处理器架构成为可能。
很多人需要一个又小又灵活的软核处理器。最近发布的两个软核处理器已经比较精简了,但囿于ARM公司规定的固有架构,还是不够精简,阅读有困难。下一步,我会去掉它固有的各种模式以及各种中断,精简成更小的软核。那么我们在使用时,只要我们不使用这种模式和中断,那他就能很好的为我们服务。如果大家需要中断,如果是简单的中断,可以是51式的,就给出一个handler,软件来保存寄存器;也可以是高效复杂的cortex-m3式的,硬件来保存寄存器。这样,丰俭由人,让硬件设计工程师和软件工程师达到完美的配合。
在做之前,要确保keil支持。因此,根据http://code.google.com/p/risclite里面的hello工程,修改了启动的startup.s这个汇编启动程序。在这个程序里面,对MCU做了初始化,为各个模式的堆栈设置有效指针。但如果我们去掉了中断和模式,那么在startup.s中,就没有必要设置每个模式的堆栈了,原因很简单,既然都没有模式了,也就不用初始化了。
下面是我修改的新的startup.s文件。很短,只有寥寥数行。这个startup.s的目的很简单,如果我们修改后,只支持一种模式,那么它就必须很快的把系统引导到main函数上去,让我们编写的c程序迅速发挥效果。
- AREA STACK, NOINIT, READWRITE, ALIGN=3
- Stack_Mem SPACE 0x400
- __initial_sp SPACE 0x000
- Stack_Top
- EXPORT __initial_sp
- AREA RESET, CODE, READONLY
- ARM
- LDR SP, =Stack_Top
- ; Enter the C code
- IMPORT __main
- LDR R0, =__main
- BX R0
- END
复制代码 这段代码的主要意思是定义堆栈的大小,为sp设置堆栈指针,然后跳转到main函数中。
现在软件已经支持,下面我会精简软核处理器,把这些模式和中断去掉,让它直接支持Keil编写的代码。请大家拭目以待,看看这个更加精简的软核处理器的表现效果吧。看看它和8051编程相比,会有更好的优点。 |
|