EDN首页   博客首页

日志档案

发表于 2007-3-30 23:13:01

9

标签: ARM_00_OS之LPC213X版  嵌入式操作系统  

ARM_00_OS之LPC213X版

现在使用的是LPC2132 MCU,如果您使用其它型号的CPU的话,只要在选项中选择合适的CPU型号,并在CPU.h文件中修改MCU型号即可。

ARM_00_OS原本是在ADuC702x上写的,该芯片上可以检测电源电压以及芯片温度,而LPC没有。我想ADuC用的人可能比较少,所以还是花了点时间弄到LPC上来了,感兴趣的朋友可以下载来玩一玩^_^。当然,您也可以在上面改进或者给我提一些意见和建议。

如果您要将重新编译过的hex文件下载到板上运行的话,请先确认选项中的创建HEX文件是否勾上,否则并未创建hex文件,烧入的而是圈圈编译的hex文件。

(已知一个致命的bug,在软件任务切换中,如果发生定时器切换任务,会导致程序跑飞,等有空了我再来换换结构修正一下。)

ARM_00_OS(LPC213x版)下载地址:rar

实际运行的效果:

点击看大图

keil仿真图:

点击看大图

系统分类: ARM   |   用户分类: 初学ARM   |   来源: 原创   |   【推荐给朋友】   |   【添加到收藏夹】

    阅读(1132)    回复(2)  

投一票您将和博主都有获奖机会!

最新评论

  • KJH

    2008-4-6 17:28:16

    00你好,这里面你用ARM指令写的一些程序我不是很明白,还请指点: 1、你用ARM指令写切换任务、设置堆栈、FIQ等子函数的思路是怎么样的?我怎么看得一头雾水呢? 比如:你设置堆栈子函数里有几句: __asm STMDB R12!,{R8} //该位置保存的是R3。将其清0。 //请问是怎么知道该位置保存的是R3??? __asm STMDB R12!,{R8} //该位置保存的是R2。将其清0。 //请问是怎么知道该位置保存的是R2??? __asm STMDB R12!,{R8} //该位置保存的是R1。将其清0。 __asm STMDB R12!,{R8} //该位置保存的是R0。将其清0。 __asm LDMIA SP,{R8} //将刚压入的SPSR(见SWI_VEC.S文件)出栈至R8中。 Mode|=~(0x20); //将Mode的其它位置1,只保留T位。 __asm ORR R8,R8,#0x20 //将SPSR中的T位置1。 __asm AND R8,R8,R2 //将SPSR的值与Mode相与。从而T位跟Mode的T位相同{} __asm STMDB R12!,{R8} //将SPSR压栈。任务被调度时,SPSR将被返回至CPSR。 __asm MOV R8,#0 //R8清0{} __asm STMDB R12!,{R8} //该位置保存的是用户模式下的R14。将其清0。 __asm STMDB R12!,{R8} //该位置保存的是R12。将其清0。 __asm STMDB R12!,{R8} //该位置保存的是R11。将其清0。 __asm STMDB R12!,{R8} //该位置保存的是R10。将其清0。 __asm STMDB R12!,{R8} //该位置保存的是9。将其清0。 __asm STMDB R12!,{R8} //该位置保存的是R8。将其清0。 __asm STMDB R12!,{R8} //该位置保存的是R7。将其清0。 __asm STMDB R12!,{R8} //该位置保存的是R6。将其清0。 __asm STMDB R12!,{R8} //该位置保存的是R5。将其清0。 __asm STMDB R12!,{R8} //该位置保存的是R4。将其清0。 请问你是怎么知道这个位置保存的保存的各是什么寄存器的值?

  • computer00

    2008-4-7 1:57:37

    思路就是构建好堆栈,方便在不同模式下进行压栈和出栈操作。我为何会知道?因为我压栈时就将它们压到了那里,我当然知道了。有些是编译器自动生成的压栈指令,这些就需要看编译后的汇编代码了。