嵌入式 - ARM5

一、led点灯代码优化

1. 配置寄存器

volatile

1.​禁止优化
不对该变量的读写操作进行任何优化(如删除“冗余”读取或延迟写入)。

2.​强制内存访问
每次访问该变量时,必须直接从内存(或硬件寄存器)中读取或写入,而不是使用寄存器中的缓存值。

2. 寄存器映射

后续可更新配置为结构体内容

二、SDK配置led

1. sdk

使用提供的I.MAX6ULL库文件, 

路径:IMAX6ULL/SDK/
(1)SDK(Software development tools)移植 
(2)完整开发工具就是一个IDE, 集代码编写、编译、下载于一体的集成开发环境,
类似于keil这种工具,需要额外购买一些设备如下载器、编程器、仿真器
(3)只用它的头文件。

cc.h                                        时钟相关定义;
core_ca7.h                            ARM Cortex-A7 内核相关定义;
fsl_common.h                      通用工具函数定义;
fsl_iomuxc.h                        引l脚复用配置函数定义;
MCIMX6Y2.h                         I.MX6ULL 寄存器映射结构体定义。

2. 更新代码

led.c

实现io复用功能配置 -- 对应sdk fsl_iomuxc.h 部分

实现电气特性配置 -- 对应sdk fsl_iomuxc.h 部分

配置方向寄存器 -- 对应sdk MCIMX6Y2.h 部分

三、sdk配置beep

1. 代码更新

实现灯亮鸣响

beep.c

main.c

四、BSP

BSP(板级支持包)工程管理

1.project :存放必要程序

        main.c     /    start.S

2.imx6ull :存放NXP提供的i.mx6ull头文件

        cc.h   /   core_ca7.h   /   fsl_common.h   /   fsl_iomuxc.h   /   MCIMX6Y2.h

3.bsp :存放硬件外设相关功能模块

        led.c   /   led.h   /   beep.c   /  beep.h

4.Makefile: 需要遍目录

    

管理结果:

五、Makefile

1. Makefile

target        定义最终生成的可执行文件名

 cross_compiler        cc        ld        objcopy        objdump
定义交叉编译工具链前缀以及编译器、连接器、格式转换器和反汇编工具

incdirs        定义头文件目录

srcdirs        定义源代码目录

include        使用patsubst函数将目录转换成编译器可识别的选项

-I                  指定头文件目录

cfiles / sfiles                        使用foreach 和 wildcard 函数在源目录中递归查找 .c .S 文件

cfilenodir / sdilenodir          使用notdir函数去除目录路径只保留文件名

cobjs / sobjs                将所有.c .S 文件转换为 obj/文件名.o 的形式

objs                             汇编所有目标文件

VPATH                        指定Makefile搜索源文件的目录路径

$(sobjs) / $(cobjs)                将.o 文件编译生成 .S文件

        @mkdir -p obj                创建obj目录存放目标文件

        -Wall                              waring all 打开所有警告

        -nostdlib                        不链接标准库

        -c                                   只编译不链接

        $(include)                      包含头文件路径

2.  链接器脚本

. = 0x87800000                    设置当前起始地址

.text                                      代码段定义,放置启动文件,主程序代码

.rodata                                  只读数据段,放置常量

        ALIGN(4)                      4字节对齐

.data                                      初始化数据段,放置初始化的全局变量

.bss                                      未初始化数据段,放置未初始化全局变量

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

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

相关文章

SSH登录管理

两种配置方法-密码 -密钥(免密)ansible 默认 rhel9 禁止 root 用密码登陆,不禁止用密钥登陆 ---修改方式----vim /etc/ssh/sshd_config 修改此文件#PermitRootLogin prohibit-passwordPermitRootLogin yes 改为允许systemctl res…

远程连接--向日葵

下载安装卸载 向日葵语言设置 点击下面的图标,点击"设置": 问题解决 向日葵被连接之后自动黑屏 取消下面的勾选框: 向日葵连接之后黑屏 检查系统的协议: echo $XDG_SESSION_TYPE 如果是: wayland 需要切换为x11. 设置永久默认使用 X11: sudo vi /etc/gdm3/custom…

Liunx执行source /etc/profile 报错, -bash: HISTTIMEFORMAT: readonly variable

今天在配置java环境变量时,执行source /etc/profile报错,系统是统信OS,花了好长时间才解决,在这记录一下,希望能帮助到大家问题截图提示HISTTIMEFORMAT和PROMPT_COMMAND变量时只读变量,不能设置属性值解决办…

什么是达林顿管?

简单来说,达林顿管是一个“电流放大器中的大力士”。它的核心目的是用非常小的输入电流(基极电流)去控制一个非常大的输出电流(集电极电流)。达林顿管是由两个三极管串联而成,放大倍数是两个三极管的放大倍…

嵌入式Linux学习_rk3588移植无线网卡驱动

记录移植无线网卡驱动遇到的各种问题: 从官网上下载8821的驱动源码复制一份上面的CONFIG_PLATFORM_ARM_RK2818,改成3588,然后选项改成y,并把autodetect关掉。 找到CONFIG_PLATFORM_ARM_RK2818,复制一份,改成…

MCP专题五、MCP 的未来趋势与展望

MCP专题五:MCP 的未来趋势与展望 5.1 引言 本专题前四章我们系统性地学习了 MCP(Model Context Protocol)的 发展背景、核心机制、Python 实战方法以及典型应用场景。可以看到,MCP 并不仅仅是一个技术标准,它更像是 大模型与外部世界沟通的桥梁,推动了 AI 应用从“实验…

C++ Dijkstra堆优化算法

时间复杂度为&#xff1a;O((nm)logn)算法特点&#xff1a;非负边权、单源最短路、顶点数、边数<1000000&#xff0c;数据结构前置&#xff1a;领接表、哈希表、二叉堆算法&#xff1a;第一步&#xff0c;建图&#xff0c;任何算法我们都要去思考&#xff0c;用什么数据结构…

网页设计作业02

<!DOCTYPE html> <html> <head><meta charset"utf-8"/><title>网页设计作业</title> </head> <body><h2>问卷调查</h2><p><strong>1、你是通过什么途径来到绿叶学习网的&#xff1f;</s…

每日算法题推送-->今日专题——双指针法

题目1&#xff1a;https://leetcode.cn/problems/move-zeroes 小编刚看到这道题的时候&#xff0c;想到的第一个方法就是建立一个与原数组等大的新的数组&#xff0c;然后遍历原数组&#xff0c;如果遇到元素值不为0的元素&#xff0c;就将这个元素放到新数组中&#xff0c;直到…

告别单次对话:上下文工程如何重塑AI应用架构

1. 前言人工智能应用开发领域正在经历一场静悄悄的变革。去年此时&#xff0c;提示工程&#xff08;Prompt Engineering&#xff09;还是各大技术论坛的热门话题&#xff0c;开发者们热衷于分享各种精心设计的提示词模板&#xff0c;试图通过单次交互获得理想的大模型输出。然而…

PM2 管理后端(设置项目自启动)

查看pm2管理pm2 list ┌────┬──────────────┬─────────────┬─────────┬─────────┬──────────┬────────┬──────┬───────────┬──────────┬──────────┬──…

CCN中商再获三项知识产权,为数字化服务添动能

上海中商网络股份有限公司&#xff08;CCN中商&#xff09;依托持续的研发投入与深厚的技术积淀&#xff0c;在知识产权领域再获重要突破——成功收获三项知识产权&#xff0c;囊括实用新型专利《一种3D霓彩智感双条光柱印刷用全自动生产线》、发明专利《一种一物一码关联系统及…

使用LTspice仿真一个异步BUCK电路

确定异步BUCK的规格 输入电压&#xff08;Vin&#xff09;&#xff1a;12V 输出电压&#xff08;Vout&#xff09;&#xff1a;6V 最大输出电流&#xff08;Iout&#xff09;&#xff1a;3A 开关频率&#xff08;fsw&#xff09;&#xff1a;400kHz 输出电压纹波&#xff08;Δ…

R语言对excel中多个sheet子表批量进行地理探测器计算

## 基本设置 ## 1) 设定你的工作目录&#xff08;保持你的原路径不变&#xff09; setwd("D:/*****/*****/******")## 2) 文件名&#xff08;与xlsx实际名字保持一致&#xff09; xlsx_file <- "驱动因素&#xff08;中低收入&#xff09;.xlsx"## 依…

C++ JSON 数据库:jsoncpp

jsoncpp1. JSON数据1.1 JSON 的基本语法规则1. 基础语法要求两种核心数据结构JSON 与其他数据格式的对比1.2 JSON 的典型应用场景1.3 JSON 解析与生成工具2. 编程语言库&#xff08;解析/生成&#xff09;1.4 常见错误与注意事项2. jsoncpp2.1 基本用法1. 安装与集成2. 核心类与…

《苍穹外卖》项目日记_Day9

前言&#xff1a; 上午就把今天任务完成了&#xff0c;就继续往后学了一些知识&#xff0c;晚上写下笔记总结一下。 今日完成任务&#xff1a; 调用百度地图开放平台&#xff0c;优化用户下单业务学习SpringTask&#xff0c;定时处理超时、派送中订单学习WebSocket&#xff0c;…

人工智能学习:Transformer结构中的编码器层(Encoder Layer)

Transformer结构中的编码器层(Encoder Layer) 一、编码器层介绍 概念 编码器层(Encoder Layer)是Transformer编码器的基本构建单元,它重复堆叠形成整个编码器,负责逐步提取输入序列的特征。每个编码器层由两个核心子层组成: 多头自注意力机制(Multi-Head Self-Attentio…

2018年下半年 系统架构设计师 综合知识

1.在磁盘调度管理中&#xff0c;应先进行移臂调度&#xff0c;再进行旋转调度。假设磁盘移动臂位于21 号柱面上&#xff0c;进程的请求序列如下表所示。如果采用最短移臂调度算法&#xff0c;那么系统的响应 序列应为(D )。A. ②⑧③④⑤①⑦⑥⑨ …

数据库的连接_qt

数据库的连接形式可以通过cmd查看 1.获取 UI 输入的连接参数 // 获取主机名&#xff08;如"localhost"或IP地址&#xff09; QString hostStr hostEdit->text(); // 从hostEdit控件获取文本 QByteArray hostBa hostStr.toUtf8(); // 转换为UTF-8编码的字节数…

HTML 设计与使用入门

HTML 设计与使用入门 一、完整示例&#xff08;基础页面模板&#xff09;这是一个结构清晰、可直接拷贝运行的最小 HTML 模板&#xff1a;<!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"utf-8"><meta name"vie…