【ARM原理学习】-C语言版驱动准备工作

什么是看门狗?

现实中因为一些外部因素,电子设备经常会跑飞或者死机(譬如极端温度、工业复杂场景)。在这种场景下我们希望设备自动复位而不需要人工干预。看门狗就是完成这个工作的。它其实就是我们Soc内部的一个定时器,(类似于闹钟或者门口的狗)。定好时间之后看门狗定时器会去计时,时间到之前(狗饿了之前)必须去重新置位看门狗定时器(喂狗),如果没有喂狗系统则会强制复位。

系统一般正常工作时,系统软件自己会去喂狗,所以看门狗定时器不会复位,但是系统一旦故障跑飞啥的,看门狗就没人喂了,然后下一个周期就会自动复位,达到我们预期的效果。

类似场景:家门口有一只狗,这个狗定时会饿(譬如说是两个小时一饿),够饿的时候会胡乱咬人,人们进出家门前必须提前喂狗(必须在上次喂狗后的两小时内喂狗才行),防止发生危险(程序跑飞),如果提前喂狗没有关系,但是此次喂狗时间就会从这里开始算。

三星210的开发板由于内部设定需要在功能代码之前进行关看门狗,阿尔法的板子不用;

在上面的代码后面增加 b. led_blink //在此处调用C语言,后面的程序就可以用C语言进行编写了。

汇编代码设置栈和调用C语言

为甚需要设置栈?

因为C语言在运行时,需要一定的运行环境,也就是栈(c语言中需要存局部变量的),这一部分的工作时是需要用汇编程序来做的。

例如:在51单片机中,栈的设置是由硬件进行预留的,在STM32单片机中使用C语言编程时,在启动文件中就做了这一部分的工作,启动文件中就是用汇编写的。

除此之外,不同的模式下我们所设置的栈也不同,基本就是各设置各的,比如内核和应用程序;CPU复位(刚启动)后,系统处于SVC(管理模式),所以此时我们需要设置SVC模式下的栈。此时因为外部内存还没有初始化,所以此时的栈在内部RAM.

void delay(void)//此处对后面的延时函数进行声明;

什么是volatile?

volatile的作用是程序在编译时,编译器不对程序做优化,优化有时候是没有问题的,但有时候会出现一些没办法解决的问题,取决于编译器,如果编译器做了优化则有差异,如果编译器本身没做优化,那就没有差异

什么是icache?起什么作用?

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

从容量来说:DDR>cache>寄存器>CPU 

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

因为寄存器与DDR之间的速度相差太大了,所以才会有cache存在,

指令正常执行的过程指令平常放在硬盘/flash中,当使用的时候,从flash/硬盘中读到DDR,然后从DDR读取到寄存器中,(寄存器与CPU离得最近,假使他们两速度差不多),但是DDR和寄存器速度相差太大,所以有时候读取的速度跟不上CPU处理指令的速度,因此就需要cache的存在(icache工作时,会把CPU正在执行的指令的旁边的指令读取到cache中),当DDR中的指令跟不上CPU处理的速度时,可以从cache中读取,当CPU需要指令时,cache先看看自身有没有这个指令,若有,很方便,直接拿给用,如果没有,则从DDR中去读取,与此同时cache需要删除自身存储,重新缓存。

打开cache 和关闭cache 的流水灯的闪烁现象是不同的:

关闭cache 时,灯的闪烁速度变慢,由此可以验证以上原理!

重定位引入和链接脚本

链接地址:链接时指定的地址(指定方式为:Makefile中用-Ttext,或者链接脚本)

运行地址:程序实际运行时的地址(指定方式:由实际运行时呗加载到内存的哪个位置说了算)

链接脚本的理解:

在编程工作区新建一个文件,在此文件中利用链接脚本的特有格式进行地址声明,在此声明之后,可以在Makefile中的链接语句中,将text之后的地址省略掉。直接用此文件代替。

 以上是正点原子阿尔法板链接脚本的写法!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
一、实验目的   1、了解实时时钟的硬件控制原理及设计方法。   2、掌握S3C44B0X 处理器的RTC 模块程序设计方法。     二、实验设备   1、硬件: Embest EduKit-III 实验平台, Embest ARM 标准/ 增强型仿真器套件,PC 机。   2、软件: Embest IDE Pro ARM 集成开发环境, Windows 98/2000/NT/XP。   三、实验内容   学习和掌握 Embest EduKit-III 实验平台中RTC 模块的使用,进行以下操作:   1、编写应用程序,修改时钟日期及时间的设置。   2、使用EMBEST ARM教 学系统的串口,在超级终端显示当前系统时间。     四、实验原理   1. 实时时钟( RTC )   实时时钟( RTC)器件是一种能提供日历/ 时钟、数据存储等功能的专用集成电路,常用作各种计算机系统的时钟信号源和参数设置存储电路。RTC 具有计时准确、耗电低和体积小等特点, 特别是在各种嵌入式系统中用于记录事件发生的时间和相关信息, 如通信工程、电力自动化、工业控制等自动化程度高的领域的无人值守环境。随着集成电路技术的不断发展, RTC 器件的新品也不断推出, 这些新品不仅具有准确的RTC,还有大容量的存储器、温度传感器和A/D 数据采集通道等,已成为集RTC、数据采集和存储于一体的综合功能器件,特别适用于以微控制器为核心的嵌入式系统。     RTC 器件与微控制器之间的接口大都采用连线简单的串行接口,诸如I2C、SPI、MICROWIR和ECAN 等串行总线接口。这些串口由 2~3 根线连接,分为同步和异步。     2. S3C44B0X 实时时钟( RTC )单元   S3C44B0X 实时时钟( RTC)单元是处理器集成的片内外设。由开发板上的后备电池供电,可以在系统电源关闭的情况下运行。RTC 发送8 位BCD 码数据到CPU。传送的数据包括秒、分、小时、星期、日期、月份和年份。RTC 单元时钟源由外部32.768KHz 晶振提供,可以实现闹钟(报警)功能。S3C44B0X 实时时钟( RTC)单元特性:BCD 数据:秒、分、小时、星期、日期、月份和年份   1、闹钟(报警)功能:产生定时中断或激活系统   2、自动计算闰年   3、无2000 年问题   4、独立的电源输入   5、支持毫秒级时间片中断,为RTOS 提供时间基准读/ 写寄存器   访问 RTC 模块的寄存器, 首先要设 RTCCON的 bit0 为1。CPU 通过读取 RTC 模块中寄存器 BCDSE、CBCDMIN、BCDHOU、RBCDDA、YBCDDAT、EBCDMON和 BCDYEAR的值,得到当前的相应时间值。然而,由于多个寄存器依次读出,所以有可能产生错误。比如:用户依次读取年(1989)、月(12)、日(31)、时(23)、分(59)、秒( 59)。当秒数为1 到59 时,没有任何问题,但是,当秒数为0 时,当前时间和日期就变成了1990 年1 月1 日0 时0 分。这种情况下(秒数为0),用户应该重新读取年份到分钟的值。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值