重头开始嵌入式第四十四天(硬件 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;
}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

信号处理: Block Pending Handler 与 SIGKILL/SIGSTOP 实验

1. 信号处理机制的 “三张表” kill -l &#xff1a;前 31 个信号为系统标准信号。 block pending handler 三张表保存在每个进程的进程控制块 —— pcb 中&#xff0c;它们分别对应了某一信号的阻塞状态、待处理状态以及处理方式。 block &#xff1a;通过 sigset_t 类型实现&…

【补充】倒易点阵基本性质

&#xff08;1&#xff09;任意倒易矢量 r h k l ∗ h a ∗ k b ∗ l c ∗ \mathbf{r}_{hkl}^* h\mathbf{a^*} k\mathbf{b^*} l\mathbf{c^*} rhkl∗​ha∗kb∗lc∗必然垂直于正空间中的(hkl)晶面。 正空间中的(hkl)晶面的法向是[hkl]&#xff0c;和坐标轴的交点为A、B、…

Steam黑神话悟空禁止更新进入游戏的解决方案

首先打开该网站&#xff1a;https://steamdb.info/app/2358720/ 2358720即为游戏ID 网页下翻&#xff0c;找到更新历史&#xff1a;https://steamdb.info/app/2358720/history/ 然后在Steam的steamapps下&#xff0c;找到后缀为2358720的文件&#xff0c;右击记事本打开 将St…

解决银河麒麟V10向日葵远程连接断开问题

解决银河麒麟V10向日葵远程连接断开问题 方法一&#xff1a;重启系统方法二&#xff1a;执行xhost 命令 &#x1f496;The Begin&#x1f496;点点关注&#xff0c;收藏不迷路&#x1f496; 当你在银河麒麟桌面操作系统V10上使用向日葵进行远程连接时&#xff0c;如果遇到频繁断…

Vue项目快速整合WangEditor富文本编辑器

Vue项目快速整合WangEditor富文本编辑器 一、安装依赖 npm i wangeditor --save //富文本编辑器 npm install highlight.js -S //代码高亮 npm install dompurify vue-dompurify-html // 防xss 库二、app.vue代码案例 已对接图片、视频接口 &#xff0c;具体看如下代码…

基于飞腾平台的OpenCV的编译与安装

【写在前面】 飞腾开发者平台是基于飞腾自身强大的技术基础和开放能力&#xff0c;聚合行业内优秀资源而打造的。该平台覆盖了操作系统、算法、数据库、安全、平台工具、虚拟化、存储、网络、固件等多个前沿技术领域&#xff0c;包含了应用使能套件、软件仓库、软件支持、软件适…

景联文科技精准数据标注:优化智能标注平台,打造智能未来

景联文科技是一家致力于为人工智能提供全面数据标注解决方案的专业公司。 拥有一支由经验丰富的数据标注师和垂直领域专家组成的团队&#xff0c;确保数据标注的质量和专业性。 自建平台功能一站式服务平台&#xff0c;提供从数据上传、标注、审核到导出的一站式服务&#xff0…

Linux安装tomcat及配置环境变量超详细教程

微服务Linux解析部署使用全流程 linux系统的常用命令 Linux安装vim超详细教程 Linux安装JDK及配置环境变量超详细教程 1、上传压缩包 统一创建目录&#xff1a;/usr/local/tomcat&#xff0c;将压缩包上传到这个目录下。拖动文件到这个目录下即可。 2、执行解压命令 先进…

Sentinel-1 数据处理时如何手动下载高程数据

在Sentinel-1 数据数据预处理时&#xff0c;会使用高程数据进行地形校正。但选择自动下载高程时&#xff0c;由于网络原因经常会卡死&#xff0c;造成预处理过程不能正常进行&#xff01; 这个问题经过我的反复实践&#xff0c;可以通过手动下载高程数据来解决。下面是具体方法…

章管家 listUploadIntelligent.htm SQL注入漏洞

漏洞描述&#xff1a; 章管家 listUploadIntelligent.htm 接口处存在SQL注入漏洞&#xff0c;未经身份验证的远程攻击者除了可以利用 SQL 注入漏洞获取数据库中的信息&#xff08;例如&#xff0c;管理员后台密码、站点的用户个人信息&#xff09;之外&#xff0c;甚至在高权限…

软件功能测试需进行哪些测试?第三方软件测评机构有哪些测试方法?

在信息化社会迅速发展的今天&#xff0c;软件功能测试在软件开发生命周期中占据着不可或缺的地位。软件功能测试是评估软件系统是否符合预期功能和用户需求的过程。其重要性体现在提升软件质量、确保用户满意度以及降低维护成本等方面。 软件功能测试是对软件应用程序进行的一…

robomimic应用教程(二)——策略运行与评估

得到训练好的pth后&#xff0c;下一并将其进行部署及效果评估 可以在jupyter notebook中进行此操作&#xff0c;文件为robomimic文件夹中的examples/notebooks/run_policy.ipynb 本文采用pycharm调试 该脚本用于在环境中评估策略&#xff0c;主要包括从model zoo下载checkpoi…

【web开发】Spring Boot 快速搭建Web项目(三)

Date: 2024.08.31 18:01:20 author: lijianzhan 简述&#xff1a;根据上篇原文Spring Boot 快速搭建Web项目&#xff08;二&#xff09;&#xff0c;由于已经搭建好项目初始的框架&#xff0c;以及自动创建了一个启动类文件&#xff08;TestWebApplication.java&#xff09; …

【Python】Daphne:Django 异步服务的桥梁

Daphne 是 Django Channels 项目的一部分&#xff0c;专门用于为 Django 提供支持 HTTP、WebSocket、HTTP2 和 ASGI 协议的异步服务器。Daphne 是一个开源的 Python 异步服务器&#xff0c;它可以帮助开发者运行异步应用程序&#xff0c;并且非常适合与 Django Channels 一起使…

电子电路的基础知识

电子电路是现代电子技术的基础&#xff0c;由电子元件&#xff08;如电阻、电容、电感、二极管、晶体管等&#xff09;和无线电元件通过一定方式连接而成的电路系统。 以下是对电子电路的详细概述&#xff1a; 一、定义与分类 定义&#xff1a;电子电路是指由电子器件和有关无…

解压视频素材下载网站推荐

在制作抖音小说推文或其他短视频时&#xff0c;找到合适的解压视频素材非常重要。以下是几个推荐的网站&#xff0c;可以帮助你轻松下载高质量的解压视频素材&#xff1a; 蛙学网 蛙学网是国内顶尖的短视频素材网站&#xff0c;提供大量4K高清无水印的解压视频素材&#xff0c;…

【记录】Excel|不允许的操作:合并或隐藏单元格出现的问题列表及解决方案

人话说在前&#xff1a;这篇的内容是2022年5月写的&#xff0c;当时碰到了要批量处理数据的情况&#xff0c;但是又不知道数据为啥一直报错报错报错&#xff0c;说不允许我操作&#xff0c;最终发现是因为存在隐藏的列或行&#xff0c;于是就很无语地写了博客&#xff0c;但内容…

如何使用Flux+lora进行AI模型文字生成图片

目录 概要 前期准备 部署安装与运行 1. 部署ComfyUI 本篇的模型部署是在ComfyUI的基础上进行&#xff0c;如果没有部署过ComfyUI&#xff0c;请按照下面流程先进行部署&#xff0c;如已安装请跳过该步&#xff1a; &#xff08;1&#xff09;使用命令克隆 ComfyUI &…

【友元补充】【动态链接补充】

友元 友元的目的是让一个函数或者类&#xff0c;访问另一个类中的私有成员。 友元的关键字friend是一个修饰符。 友元分为友元类和友元函数 1.全局函数作友元 2.类作友元 3.类的一个成员函数作友元 好处&#xff1a;可以通过友元在类外访问类内的私有和受保护类型的成员 坏处…

Python画笔案例-068 绘制漂亮米

1、绘制漂亮米 通过 python 的turtle 库绘制 漂亮米,如下图: 2、实现代码 绘制 漂亮米,以下为实现代码: """漂亮米.py注意亮度为0.5的时候最鲜艳本程序需要coloradd模块支持,安装方法:pip install coloradd程序运行需要很长时间,请耐心等待。可以把窗口最小…