StackSpace SVC_STACK_LEGTH - 1 4StackIrq DCD IrqStackSpace IRQ_STACK_LEGTH - 1 4StackFiq DCD FiqStackSpace FIQ_STACK_LEGTH - 1 4StackAbt DCD AbtStackSpace ABT_STACK_LEGTH - 1 4StackUnd DCD UndtStackSpace UND_STACK_LEGTH - 1 4可以看到,没有””的标号都已经用 DCD 初始化了 而 StackUsr 到底是什么呢 它是由下面的语句决定的startup.s 文件AREA Stacks DATA NOINITStackUsr 这样就明白了 StackUsr 肯定是 0x400000000x400020000 之间的某个数. 用户模式下的堆栈空间就是它了.ResetInit BL InitStack BL TargetResetInit B __main处理器上电复位后通过中断向量表进入该函数,__main 函数主要工作是初始化 C 的库函数并由它进入 C 的 main 函数.__user_initial_stackheap LDR r0bottom_of_heap LDR r1StackUsrMOV pclr__user_initial_stackheap 函数是 ADS 的一个库函数 如果程序中用到的分散加载文件 这个函数必须要被实现. 应用程序的栈和 heap 是在 C 库函数初始化过程中建立起来的。
可以通过重定向对应的子程序来改变堆栈和 heap 的位置. 堆栈的地址在分散加载文件里已经指定好,本函数不应该修改它们的值. 用 r0r1 分别返回 heap 和 stack 的基址. 关于 ADS 的存储器机制大家可以去网上查更详细的资料.StackSvc DCD SvcStackSpace SVC_STACK_LEGTH - 1 4StackIrq DCD IrqStackSpace IRQ_STACK_LEGTH - 1 4StackFiq DCD FiqStackSpace FIQ_STACK_LEGTH - 1 4StackAbt DCD AbtStackSpace ABT_STACK_LEGTH - 1 4StackUnd DCD UndtStackSpace UND_STACK_LEGTH - 1 4AREA MyStacks DATA NOINIT ALIGN2SvcStackSpace SPACE SVC_STACK_LEGTH 4Stack spaces for Administration ModeIrqStackSpace SPACE IRQ_STACK_LEGTH 4Stack spaces for Interrupt ReQuest ModeFiqStackSpace SPACE FIQ_STACK_LEGTH 4Stack spaces for Fast Interrupt reQuest ModeAbtStackSpace SPACE ABT_STACK_LEGTH 4Stack spaces for Suspend ModeUndtStackSpace SPACE UND_STACK_LEGTH 4Stack spaces for Undefined Mode上面几行代码是为各个模式下的堆栈分配空间.IF :DEF: EN_CRP IF . 0x1fc INFO 1nThe data at 0x000001fc must be 0x87654321.nPlease delete some sourcebefore this line. ENDIFCrpData WHILE . 0x1fc NOP WENDCrpData1 DCD 0x87654321 /When the Data is 为 0x87654321user code be protected. 当此数为 0x87654321 时,用户程序被保护 / ENDIF 上面这几行其实是加密芯片用的 lpc21xx 和 lpc22xx 系列的 ARM7当你的工程选择RelInFlash 时 代码写进 flash芯片也同时被加密 加密状态下 JTAG 也读不到芯片 也不能单步调试 要解密的话必须要用 ISP 完全擦除一下. 上面的代码的意思就是在地址 0x1fc 处放数据 0x87654321 从而实现加密的功能 但前提是 IF :DEF: EN_CRP 也 就是定义了EN_CPP 这个宏. 而这个宏是在当选择了 RelInFlash 时 ADS 自动定义的. 然后,再说一下0x87654321 的问题. LPC2100 系列 ARM7 微控制器是世界首款可加密的 ARM 芯片,对其加密的方法 是通过用 户程序 在指定地 址上设置 规定的数 据。
PHILIPS 公司 规定,对于LPC2100 芯片除 LPC2106/2105/2104 外,当片内 FLASH 地址 0x000001FC 处的数据为0x87654321 时,芯片即被加密. 所以问题搞定. AREA Heap DATA NOINIT bottom_of_heap SPACE 1 AREA Stacks DATA NOINIT StackUsr END 启动代码部分的结束。
上一篇:
项目目的
下一篇:
凉凉的清晨