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

【ARM裸板】内存控制器、SDRAM基础与代码重定位

发布时间:2020-08-21 发布时间:
|

1.CPU如何控制外设?

CPU控制相应外设的寄存器,有外设控制器发出特定的波形


2.CPU如何选择寄存器?

CPU通过内存控制器选择

发出地址addr

根据地址选择不同的模块

CPU

内存控制器

读写数据


3.外设共用地址、数据总线,如何互不干扰?

通过片选CS引脚,选择不同的外设


4.谁控制片选引脚

发出地址addr

根据地址发出片选信号

CPU

内存控制器

使能相应的外设

由芯片手册得知:当CPU发出地址是0x00000000时 nGCS0为低电平选择(有效)

  • 9.代码重定位

    1.Nand启动时,一上电,硬件会把前4K数据复制到SRAM

    2.CPU从0地址运行


    如果程序大于4K,前4K的代码需要把整个程序读取出来放到SDRAM【重定位:重新确定程序地址】


    9.1 Nor Flash特点

    可以像内存一样的读取

    不可以像内存一样直接写入(写入有保护)


    9.2 Nor直接写入的结果

    程序中含有需要修改(写入)的变量,写在Nor上,直接修改变量是无效的

    因此需要重定位,放到SDRAM上


    9.3 实验

    以Nor Flash 启动,修改一变量,改变量并不会被修改,即无效


    以Nand Flash 启动,修改一变量,改变量会被修改


    9.4 程序包含哪几部分

    代码段text 代码

    数据段data (一般的全局变量)

    只读数据段rodata const 全局变量

    bss 初值为0或无初值的全局变量 不保存在bin文件中

    comment 注释 不保存在bin文件中

    bss:是“Block Started bySymbol”的缩写,意为“以符号开始的块”。 BSS是Unix链接器产生的未初始化数据段。

    bss段与注释段不保存在bin文件中

    char g_Char = 'A'; //定义全局变量

    const char g_Char2 = 'B'; //只读全局变量

    int g_A = 0; //初值为0的全局变量

    int g_B; //未定义初值的全局变量




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

    热门文章 更多
    关于89C52单片机11.0592M晶振产生115200波特率的方法