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

news2024/11/16 23:51:04

目录

裸机开发

一、开发背景

二、开发特点

三、开发流程

四、应用领域

使用的软件硬件

软件: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;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2172145.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

CUDAExample: 波纹示例

需要用到的已经封装好的辅助类&#xff1a; CPUAnimBitmap 定义个grid 和 block 的维度都是二维的 #include"cpu_anim.h" #include "cuda_runtime.h" #include <device_launch_parameters.h>#define DIM 512 static void CheckCudaErrorAux(const …

numpy is not available

在测试第一个程序的时候&#xff0c;出现Numpy is not available的错误&#xff0c;根据博客的办法知道是因为numpy与pytorch版本不一致造成的。 安装的时候&#xff0c;安装的是最新版的numpy&#xff0c;检查numpy的版本为2.1.1版。 根据pytorch与numpy版本对应表。我的pyt…

【Python报错已解决】NameError: name ‘torchvision‘ is not defined

&#x1f3ac; 鸽芷咕&#xff1a;个人主页 &#x1f525; 个人专栏: 《C干货基地》《粉丝福利》 ⛺️生活的理想&#xff0c;就是为了理想的生活! 专栏介绍 在软件开发和日常使用中&#xff0c;BUG是不可避免的。本专栏致力于为广大开发者和技术爱好者提供一个关于BUG解决的经…

AI知识库如何重塑电商行业的产品推荐系统

在数字化浪潮的推动下&#xff0c;电子商务行业正经历着前所未有的变革。其中&#xff0c;产品推荐系统作为连接消费者与商品的桥梁&#xff0c;其智能化与个性化水平直接影响着用户体验、转化率乃至整个平台的竞争力。随着人工智能&#xff08;AI&#xff09;技术的飞速发展&a…

大豆重测序-文献精读53

Natural variation in GmSW17 controls seed size in soybean GmSW17的自然变异控制大豆种子的大小 摘要 种子大小/重量在决定作物产量中起着重要作用&#xff0c;但在大豆中&#xff0c;仅有少数控制种子大小的基因被鉴定出来。在本研究中&#xff0c;我们进行了全基因组关联…

Java项目——苍穹外卖总结

附上本人代码连接&#xff1a;xiaoming325/sky-take-out (github.com) 项目概述 此项目是一个外卖点餐项目&#xff0c;分为商家端&#xff08;管理员端&#xff09;和用户端&#xff0c;商家端是一个网站&#xff0c;用户端是一个微信小程序&#xff0c;由于微信小程序没有上…

Java ERP管理系统源码解析:微服务架构实践Spring Cloud Alibaba与Spring Boot

在当今数字化浪潮的推动下&#xff0c;企业对于高效、稳定且易于扩展的管理系统需求日益增长。为了满足这一需求&#xff0c;我们精心打造了一款基于Java技术的鸿鹄ERP&#xff08;Enterprise Resource Planning&#xff09;管理系统。该系统充分利用了Spring Cloud Alibaba、S…

【刷题5】在排序数组中查找元素的第一个和最后一个位置

目录 一、题目解析二、思路—二分查找(二段性)1、查找最左端区间2、查找最右端区间 三、代码 一、题目解析 题目理解&#xff1a; 返回begin和end&#xff0c;是数组下标 二、思路—二分查找(二段性) 1、查找最左端区间 left和right移动问题&#xff1a; 循环条件问题&…

探索甘肃非遗:Spring Boot网站开发案例

1 绪论 1.1 研究背景 当前社会各行业领域竞争压力非常大&#xff0c;随着当前时代的信息化&#xff0c;科学化发展&#xff0c;让社会各行业领域都争相使用新的信息技术&#xff0c;对行业内的各种相关数据进行科学化&#xff0c;规范化管理。这样的大环境让那些止步不前&#…

2024年中国电子学会青少年软件编程(Python)等级考试(二级)核心考点速查卡

考前练习 2024年03月中国电子学会青少年软件编程&#xff08;Python&#xff09;等级考试试卷&#xff08;二级&#xff09;答案 解析 2024年06月中国电子学会青少年软件编程&#xff08;Python&#xff09;等级考试试卷&#xff08;二级&#xff09;答案 解析 知识点描述 …

如何利用 Kafka,实时挖掘企业数据的价值?

首先&#xff0c;问读者老爷们一个简单的问题&#xff0c;如果你需要为你的数据选择一个同时具备高吞吐 、数据持久化、可扩展的数据传递系统&#xff0c;你会选择什么样的工具或架构呢&#xff1f; 答案非常显而易见&#xff0c;那就是 Kafka&#xff0c;不妨再次套用一个被反…

vue el-cascader 级联选择器 多选实现默认勾选并回显前子项

文章目录 前言代码实现总结 前言 最近实现一个需求 接收传递过来的值 并在 el-cascader级联选择器 上 勾选回显出来 记录下代码实现 代码实现 <template><div id"app"><el-card class"box-card"><el-formref"form2"label…

YOLOv7改进之MAE主干: 超强ConvNeXtV2 升级版结构,当MAE+YOLO卷积高效涨点

目录 1,原理概述 2,代码改进 新增一个convnextv2.py文件,增加以下代码 修改部分 第二步:在yolo.py中加入以下代码 然后在 在yolo.py中配置找到./models/yolo.py文件下里的parse_model函数,将类名加入进去 参考代码 YOLOv7网络配置文件 1,原理概述 原文:https://…

MATLAB绘图基础9:多变量图形绘制

参考书&#xff1a;《 M A T L A B {\rm MATLAB} MATLAB与学术图表绘制》(关东升)。 9.多变量图形绘制 9.1 气泡图 气泡图用于展示三个或更多变量变量之间的关系&#xff0c;气泡图的组成要素&#xff1a; 横轴( X {\rm X} X轴)&#xff1a;表示数据集中的一个变量&#xff0c…

LED显示屏如何通过FMEA进行风险分析:打造无忧显示新境界

LED显示屏作为高科技产品&#xff0c;其性能受到多种因素的影响&#xff0c;包括但不限于设计缺陷、材料质量、制造工艺、使用环境等。任何环节的疏漏都可能导致显示屏出现亮度不均、色彩失真、故障频发等问题&#xff0c;进而影响用户体验和品牌形象。因此&#xff0c;通过FME…

信息安全工程师(23)网络安全体系相关模型

前言 网络安全体系相关模型是描述网络安全体系如何实现的理论框架和抽象模型&#xff0c;它们为理解和设计网络安全解决方案提供了系统化的方法。 1. PDR模型 提出者&#xff1a;美国国际互联网安全系统公司(ISS)核心内容&#xff1a;保护(Protection)、检测(Detection)、响应(…

WWW 2024最新论文分享┆用于用户响应预测的时间兴趣网络

目录 论文简介 1. 团队介绍 2. 研究背景及主要贡献 3. 方法 4. 实验及结果 5. 总结与展望 6. 参考文献 论文简介 本推文详细介绍了一篇上海交通大学高晓沨教授和陈贵海教授团队发表在顶级学术会议WWW 2024的最新论文《Temporal Interest Network for User Response Pre…

MySQL—索引机制详解

索引介绍 基本介绍 MySQL 官方定义索引为一种帮助数据库高效获取数据的结构&#xff0c;其本质是排好序的快速查找数据结构。数据库除了存储表中的数据&#xff0c;还维护一些额外的满足特定查找算法的数据结构&#xff0c;这些数据结构以某种方式指向实际的数据&#xff0c;…

Visual Studio使用与“Hello Word“的编写

1.打开Visual Studio点击"创建新项目" 2.点击"空项目"&#xff0c;并点击"下一步" 3.设置"项目名称"并"设置地址" 4.打开项目后&#xff0c;右击"源文件"并选择"添加"的"新建项" 5.点击"…

SylixOS网络之DMA(Direct Memory Access)

目录 DMA 模块在网络设备中的作用Buffer Description (BD) 结构BD 结构定义&#xff1a;BD 结构字段解释BD 结构的工作流程 总结 在嵌入式系统和实时操作系统&#xff08;RTOS&#xff09;中&#xff0c;DMA&#xff08;Direct Memory Access&#xff09;模块是一种非常重要的硬…