ARM 启动代码笔记

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;

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小相619

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值