当前位置: 首页 > news >正文

重头开始嵌入式第四十四天(硬件 ARM裸机开发)

目录

裸机开发

一、开发背景

二、开发特点

三、开发流程

四、应用领域

使用的软件硬件

软件:keil 

硬件:三星S3C2440A     JTAG  

开发原理

​编辑

开发步骤

​编辑

点亮小灯

按键控制亮灭


裸机开发

ARM 裸机开发是指在没有操作系统的情况下,直接在 ARM 处理器上进行软件开发。以下是关于 ARM 裸机开发的详细介绍:

一、开发背景

在某些特定的应用场景中,由于资源受限、对实时性要求极高或者为了追求更高的性能和效率,开发者会选择进行 ARM 裸机开发。比如一些嵌入式系统、工业控制设备、传感器节点等,不需要复杂的操作系统功能,只需要专注于特定的任务执行。

二、开发特点

  1. 直接控制硬件

    • 开发者可以直接访问和控制 ARM 处理器的各种硬件资源,如寄存器、内存、外设等。这使得开发人员能够对硬件进行精细的控制,实现高度定制化的功能。
    • 例如,可以直接配置 GPIO(通用输入输出)引脚的状态,实现对外部设备的控制;或者直接读取定时器寄存器的值,实现精确的定时功能。
  2. 高效性

    • 由于没有操作系统的开销,裸机开发可以实现非常高的性能和效率。程序直接在硬件上运行,执行速度快,响应时间短。
    • 对于一些对实时性要求极高的应用,如航空航天、工业自动化等领域,裸机开发能够满足严格的时间约束。
  3. 资源占用少

    • 裸机开发的程序通常比较小巧,占用的内存和存储资源较少。这对于资源受限的嵌入式设备来说非常重要,可以降低硬件成本和功耗。
    • 例如,在一些小型的传感器节点中,内存和存储资源非常有限,使用裸机开发可以确保程序能够在有限的资源下正常运行。

三、开发流程

  1. 硬件选型

    • 根据应用需求选择合适的 ARM 处理器和开发板。考虑因素包括处理器性能、外设资源、功耗、成本等。
    • 例如,如果应用需要高速的数据处理能力,可以选择性能较强的 ARM 处理器;如果需要连接多种外设,可以选择具有丰富外设接口的开发板。
  2. 搭建开发环境

    • 安装 ARM 开发工具链,如编译器、调试器等。常见的开发工具链有 Keil MDK、IAR Embedded Workbench 等。
    • 配置开发环境,包括设置编译器选项、连接开发板等。
  3. 编写代码

    • 使用 C 语言或汇编语言编写裸机程序。程序通常包括初始化硬件、设置中断处理程序、实现主要功能逻辑等部分。
    • 例如,初始化 GPIO 引脚、配置定时器、编写中断服务程序等。
  4. 编译和调试

    • 使用开发工具链对代码进行编译,生成可执行文件。
    • 通过调试器将可执行文件下载到开发板上进行调试。可以设置断点、单步执行、查看寄存器和内存状态等,以便找出程序中的错误。
  5. 优化和测试

    • 对程序进行优化,提高性能和效率。可以优化代码结构、减少内存占用、提高执行速度等。
    • 进行充分的测试,确保程序在各种情况下都能正常运行。测试包括功能测试、性能测试、稳定性测试等。

四、应用领域

  1. 嵌入式系统

    • 广泛应用于各种嵌入式设备,如智能家居、智能仪表、工业控制等。这些设备通常需要高度定制化的功能,并且对资源和成本有严格的限制。
    • 例如,在智能家居中,通过 ARM 裸机开发可以实现对各种传感器和执行器的控制,实现智能化的家居控制功能。
  2. 实时控制系统

    • 在对实时性要求极高的系统中,如航空航天、汽车电子、工业自动化等领域,裸机开发可以确保系统的响应时间满足严格的要求。
    • 例如,在汽车电子中,发动机控制系统需要对各种传感器信号进行实时处理,并及时控制发动机的运行状态,裸机开发可以提供可靠的实时控制功能。
  3. 低功耗设备

    • 对于一些低功耗的设备,如无线传感器节点、可穿戴设备等,裸机开发可以实现高效的电源管理,降低功耗,延长设备的使用寿命。
    • 例如,在无线传感器节点中,通过合理的电源管理和优化程序代码,可以降低设备的功耗,延长电池的使用寿命。

总之,ARM 裸机开发是一种直接在 ARM 处理器上进行软件开发的方法,具有直接控制硬件、高效性、资源占用少等特点。它适用于一些特定的应用场景,如嵌入式系统、实时控制系统、低功耗设备等。在进行 ARM 裸机开发时,需要掌握硬件知识、编程语言、开发工具等方面的技能,并且需要进行充分的测试和优化,以确保程序的稳定性和可靠性。

使用的软件硬件

软件:keil 

硬件:三星S3C2440A     JTAG  

三星 S3C2440A 是一款 32 位 CMOS 微控制器1。以下是关于它的详细介绍:

  1. 核心架构14:
    • 基于 ARM920T 内核,这是一款由 Advanced RISC Machines(ARM)公司设计的 16/32 位 RISC(精简指令集)处理器。ARM920T 实现了 MMU(内存管理单元)、AMBA(高级微控制器总线架构)总线和哈佛缓存架构,具有独立的 16KB 指令高速缓存和 16KB 数据高速缓存,每个缓存的字线长度为 8。这种架构设计使得处理器能够高效地获取指令和数据,提高系统的运行效率。
  2. 功能特性34:
    • 丰富的外设接口
      • 存储接口:外部存储器控制器可支持 SDRAM(同步动态随机存储器)控制和片选逻辑,方便与外部存储器进行连接,扩展系统的存储容量。
      • 通信接口:具备 3 通道的 UART(通用异步收发传输器),其中支持 IrDA1.0(红外数据协会 1.0 标准),并且每个通道都有 64 字节的发送 FIFO(先入先出队列)和 64 字节的接收 FIFO,可满足不同的串口通信需求;还有 2 通道 SPI(串行外设接口)、1 通道 IIC(内部集成电路)总线接口(支持多主设备)以及 IIS(集成音频接口)音频编解码器接口等,方便与各种外部设备进行通信。
      • 多媒体接口:AC'97 编解码器接口可用于音频处理;SD 主机接口版本 1.0 及 MMC(多媒体卡)协议版本 2.11 兼容,方便连接 SD 卡或 MMC 卡等存储设备;摄像头接口最大支持 4096×4096 像素输入,并且支持 2048×2048 像素的缩放输入,为图像采集和处理提供了支持。
      • 其他接口:拥有 2 通道 USB 主机和 1 通道 USB 设备(版本 1.1),可连接 USB 设备进行数据传输;8 通道 10 位 ADC(模数转换器)和触摸屏接口,方便进行模拟信号的采集和触摸屏的控制;130 个通用 I/O 端口和 24 路外部中断源,为系统提供了丰富的输入输出和中断控制功能。
    • 电源管理功能:具有正常、慢速、空闲和休眠等多种电源模式,可根据系统的运行状态灵活地选择不同的电源模式,降低系统的功耗34。
    • 时钟管理:片上集成了时钟发生器和 PLL(锁相环),可提供稳定的时钟信号,并能够根据系统的需求对时钟频率进行调整。
  3. 应用场景
    • 由于其低功耗、高性能和丰富的功能特性,S3C2440A 被广泛应用于各种嵌入式系统中,如手持设备、智能家居、工业控制、医疗设备、汽车电子等领域25。例如,在智能家居系统中,可用于控制家电设备、采集传感器数据等;在工业控制领域,可用于监控和控制工业生产过程中的各种参数2。

总之,三星 S3C2440A 是一款功能强大、性能优异的微控制器,在嵌入式系统开发中具有重要的地位,为各种嵌入式应用提供了可靠的解决方案。

开发原理

通过C语言更改寄存器地址,以控制寄存器。

开发步骤

点亮小灯

#ifndef __LIB_H__
#define __LIB_H__#include <stdio.h>#define GPBCON  (*(volatile unsigned long*)0x56000010UL)
#define GPBDAT  (*(volatile unsigned long*)0x56000014UL)#define GPGCON  (*(volatile unsigned long*)0x56000060UL)
#define GPGDAT  (*(volatile unsigned long*)0x56000064UL) #define WTCON   (*(volatile unsigned long*)0x53000000UL)
#define WTDAT   (*(volatile unsigned long*)0x53000004UL) 
#define WTCNT   (*(volatile unsigned long*)0x53000008UL) #endif
#include "led.h"void sleep(int i)
{					  while(i){i--;}
}void led_init(void)
{int i;for(i=10;i<=16;i+=2){GPBCON &= ~(0x3 << i);GPBCON |=  (0x1 << i);}for(i=5;i<9;i++){GPBDAT |= (0x1 << i);}	 	 	 
}void led_on(void)
{
int i=5;
for(i=5;i<9;i++)
{GPBDAT &= ~(0x1 << i);sleep(8000);
}
}
void led_off(void)
{
int i=5;
for(i=5;i<9;i++)
{
GPBDAT |= (0x1 << i);sleep(8000);
}
}

按键控制亮灭

void key_init(void)
{GPBCON &= ~(0x3 << 0);
}
#include "key.h"
#include "led.h"
#include "lib.h"
#include "wtdog.h"int main(void)
{ disabled_wtdog();+led_init();key_init(); while(1){if((GPGDAT & 0x1)!=0x1){GPBDAT |= 0x1;led_on(); 	  }else{GPBDAT &= ~0x1;led_off();		  }}return 0;
}

相关文章:

  • 外国电影演员识别系统源码分享
  • 当大语言模型应用到教育领域时会有什么火花出现?
  • SD(Stable Diffusion)模型的基本工作数据流
  • 批量发送邮件:性能优化与错误处理深度解析
  • 基于微信小程序爱心领养小程序设计与实现(源码+定制+开发)
  • 算法刷题笔记 约数个数(详细注释的C++实现)
  • 【Java】单元测试【主线学习笔记】
  • 通俗易懂的Latex使用步骤
  • RNA-seq通用代码-生物信息学pipeline001
  • 从博客到ICT社区:深化学习与交流的桥梁
  • 端上自动化测试平台实践
  • 不再兼容安卓,鸿蒙系统未来胜算几何?
  • 智能工厂的设计软件 设计目标:关乎对象的实践法则的认识论原则
  • 《论文阅读》 用于产生移情反应的迭代联想记忆模型 ACL2024
  • 物理学基础精解【30】
  • 【EOS】Cleos基础
  • 345-反转字符串中的元音字母
  • android 一些 utils
  • Android开发 - 掌握ConstraintLayout(四)创建基本约束
  • Debian下无root权限使用Python访问Oracle
  • ES6简单总结(搭配简单的讲解和小案例)
  • ESLint简单操作
  • exports和module.exports
  • gcc介绍及安装
  • Linux各目录及每个目录的详细介绍
  • MYSQL如何对数据进行自动化升级--以如果某数据表存在并且某字段不存在时则执行更新操作为例...
  • SwizzleMethod 黑魔法
  • 机器学习学习笔记一
  • 前端存储 - localStorage
  • 前嗅ForeSpider中数据浏览界面介绍
  • 如何设计一个微型分布式架构?
  • 网页视频流m3u8/ts视频下载
  • 为物联网而生:高性能时间序列数据库HiTSDB商业化首发!
  • 好程序员大数据教程Hadoop全分布安装(非HA)
  • #Lua:Lua调用C++生成的DLL库
  • (NSDate) 时间 (time )比较
  • (poj1.3.2)1791(构造法模拟)
  • (二)七种元启发算法(DBO、LO、SWO、COA、LSO、KOA、GRO)求解无人机路径规划MATLAB
  • (附源码)spring boot儿童教育管理系统 毕业设计 281442
  • (附源码)计算机毕业设计ssm基于Internet快递柜管理系统
  • (六)软件测试分工
  • (转载)深入super,看Python如何解决钻石继承难题
  • * CIL library *(* CIL module *) : error LNK2005: _DllMain@12 already defined in mfcs120u.lib(dllmodu
  • *算法训练(leetcode)第四十五天 | 101. 孤岛的总面积、102. 沉没孤岛、103. 水流问题、104. 建造最大岛屿
  • .Net IE10 _doPostBack 未定义
  • .Net mvc总结
  • .net MySql
  • .net 开发怎么实现前后端分离_前后端分离:分离式开发和一体式发布
  • .net 受管制代码
  • .NetCore 如何动态路由
  • .NET面试题(二)
  • .NET运行机制
  • .net最好用的JSON类Newtonsoft.Json获取多级数据SelectToken
  • @Autowired @Resource @Qualifier的区别
  • @Bean有哪些属性