×
单片机 > 单片机程序设计 > 详情

ARM 启动代码笔记

发布时间:2020-12-31 发布时间:
|

1、汇编启动代码之看门狗

    看门狗其实就是一个定时器,硬件上就是SOC内部的一个内部外设

    看门狗不用分析原理图,

    关键性操作寄存器

    WTCON(xE270_0000) bit5 是开门狗的开关  1代表开,0代表关


2、汇编写启动代码之设置栈和调用C语言1

   1、C语言运行需要和栈的意义

      “C语言运行需要” 需要一定的条件,这些条件都是由汇编提供的。

      C语言运行需要栈

      栈的特点:自动进入,自动退出,C语言的局部变量,都是在栈中运行的。

      如果我们汇编部分没有给C设置 合理的栈地址,那么C语言中的局部变量地址就会螺孔,整个程序就死掉了。


   2、CPU模式各模式下的栈

      每种模式下都有自己独立的sp寄存器(sp),为什么这么设计?

      如果各个模式都使用用一个寄存器SP,那么就意味做成个程序都是一个栈,如果你的应用程序一旦出错,(譬如栈溢出),就会连累操作系统的栈。


      解决方案,各个模式下使用不同的栈,操作内核使用自己的栈,每个应用程序也使用自己独立的栈,这样各设置各的,一个损坏不会连累其他。

      

      系统复位后,默认是进入SVC模式

      如何访问SVC模式下的栈?

        先将模式设置为SVC,再直接操作SP。


   3、查阅文档并设置栈指针至合法位置

        栈必须是当前可用的一段内存地址

        当前CPU刚复位,外部SRAM尚未初始化,目前可用内存只有内部的SRAM。(因为他不需要初始化即可使用),

        SVC Stack 1.5k D0037780---D0037D80

        栈有4中:

            满减栈

            满曾栈

            满栈: 进栈:先移动指针,再存 出栈:先出数据,再移动指针

            空减栈

            空曾栈 :进栈:先指针向下移动,再存 处栈:指针先上移动

            在ARM中,ATPCS(ARM关于程序应该怎么实现的规范)要求使用满减栈

            结iROM_application_note 中的menory map


    4、汇编语言和c 语言的互相调用

            吧 cfunction

3、    汇编写启动代码之设置栈和调用C语言2

     1、C函数的表写和被汇编语言调用

     在工程中新建并且添加一个C语言的源文件,

4、 汇编写启动代码之开启icache

    1、什么是cache ,有什么用

       cache是一种内存,叫高速缓存

       从容量来说 CPU < 寄存器 < cache < DDR

       从速度来说 CPU > 寄存器 > cache > DDR

       210内部有32kB ichche 和 32KB dcache ,ichche 是用来缓存指令的;dcache 是用来缓存数据的。

       CPU是不能读内存的,需要通过寄存器中转。

    2、iROM中BL0对cache操作

        mrc p15,0,r0,c1,c0,0;            // 读出cp15的c1到r0中

        //bic r0, r0, #(1<<12)            // bit12 置0  关icache

        orr r0, r0, #(1<<12)            // bit12 置1  开icache

        mcr p15,0,r0,c1,c0,0;



『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
51单片机中断源的扩展方法