嵌入式应用开发之模块驱动移植教程

        前言:本篇主要面向小白的小伙伴,提供一些基础的模块移植教程,不涉及预处理指令类的移植教程。

#为什么要移植驱动

        这个问题,可以来说是显而易见的,在标准库的开发过程中,如果重新写一个模块的驱动,从串行通信开始写起,这是一个非常浪费时间的过程。

        于是这个操作就来了,移植别人已经写好的,模块驱动程序直接调用,现有驱动里面的库,去对模块进行开发,也就是占在巨人的肩膀上。

      这个移植使用标准库的话,能很大程度的节省写码时间,当然如果需要,熟悉这些通信的底层流程,不建议搞移植。

#移植有什么缺点  

        这种模块移植,是有缺陷的,讲个比方,就像连连看,找相同,相同芯片型号的可以移植,或者对标系列芯片的也可以移植,因为底层寄存器都是一样的。

        但是不同系列芯片,硬件驱动是不能移植的,移植程序也是这个样子的,同系列或者对标系列的芯片可以移植,不同系列芯片,有着不同的寄存器,不同的配置,不能进行相互移植驱动。

        不仅仅芯片需要对标,模块型号也需要进行对标,相同的才能进行相互移植驱动,通常会将模块商家,或者同行,提供的驱动进行移植应用。

        可能有的小伙伴会问不同系列的怎么移植,这种没有商家提供资料,找不到资料的,要么自己写,要么找型号有一点点差异的现有驱动,去改驱动里面的指令拿着数据手册定义的寄存器地址,还有一些预处理带位操作。

#移植涉及概念

        hardware文件:这个文件通常用来放置模块的驱动,这里有每个模块对应的  源文件(.c) 头文件(.h),这些文件里面放置着模块的驱动函数,当然有的工程模版不这样命名,命名虽然不一样,大家要有这么的一个概念。

       KEIL5中添加源文件:这里笔者个人习惯只添加,源文件不添加头文件,同时添加源文件还有头文件都可以的,或者只添加源文件,在KEIL5中添加源文可以看到源文件还有头文件里面的代码。

        引入头文件路径:每个模块的驱动,在hardware文件夹下都是,小的文件夹,每个文件夹的路径都要被引入,如果没有引入驱动文件目录就会进行报错,如下图所示。     

原文:..\..\app\main.c(11): error:  #5: cannot open source input file "rtc.h": No such file or directory

#移植外设驱动的过程

        首先准备好,被移植驱动的工程,开发的工程

        

        然后打开被移植工程文件,在hardware文件夹下,找到存放模块外设驱动的文件,一般是hardware(翻译硬件)文件,这里移植的是嘉立创的驱动,是放在bsp这个文件夹下面的, 这里笔者移植的是一个舵机驱动板的驱动

        打开文件复制,头文件(.c)还有源文件(.h),在开发工程bsp文件夹目录下,创建一个相同的文件夹名字(pca),放置复制过来的文件

      在工程文件的MDK文件夹目录下打开项目工程,在KEIL5的左侧添加源文件,同时添加头文件目录。

        右键之后,添加对应的源文件,添加源文件头文件都行,个人习惯添加源文件。

        添加完成之后,最后关闭。

        然后添加头文件路径

        选择玩之后,我们一路点ok  ok  编译完成之后,没有报错,就能进行调用,这个是简单的模块移植过程

                        欢迎指正,希望对你,有所帮助!!!

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

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

相关文章

Autosar Dcm配置-0x28服务ComControl-基于ETAS软件

文章目录 前言DcmDcmDsdDcmDspBswMBswMModeRequestPortBswMModeConditionBswMLogicalExpressionBswMActionBswMActionListBswMRule总结前言 0x28服务主要用来控制非诊断报文的通讯,一般在刷写预编程过程中,用来禁止APP的通信报文,可以减少总线负载率,提高刷写成功率。本文…

【Orange Pi AI Pro】开箱体验完,发现是真的强!!!

最近香橙派联合华为出了一款新的AI开发板——Orange Pi AI Pro,关键是搭载了昇腾AI处理器提供了8TOPS INT8的算力,作为一个嵌入式的CSDN博主,当然得体验一下这款新产品。 文章目录 1 开箱2 硬件介绍2.1 开发板硬件详情:2.2 顶层视…

分享浏览器被hao123网页劫持,去除劫持的方式

昨天看python相关的自动化工作代码时,发现谷歌浏览器被hao123劫持了,把那些程序删了也不管用 方法1:删除hao123注册表,这个方式不太好用,会找不到注册表 方法2:看浏览器快捷方式的属性页面,一…

keil5新建stm32工程的基本

1、建立工程文件夹,keil中新建工程,选择型号; 2、工程文件夹里建立自己所需要的文件夹等,复制固件库里面的文件到工程文件夹里; 3、将工程里建立对应的同名的分组,并将文件夹内的文件添加到工程分组中。 点…

MQTT——Mosquitto使用(Linux订阅者+Win发布者)

前提:WSL(Ubuntu22)作为订阅者,本机Win10作为发布者。 1、Linux安装Mosquitto 命令行安装。 sudo apt-get install mosquitto 以上默认只安装了mosquitto的服务,不带测试客户端工具mosquitto_sub和mosquitto_pub。如…

IC5000_IC5700 License激活步骤

文章目录 前言连接硬件License RequestLicense Progam 前言 用过的调试器除了Lauterbach之外,iSystem的应该是比较好用的,比Lauterbach也便宜一些。本文介绍IC5000的License激活说明,前提是正版采购了IC5000及对应的license 连接硬件 电源…

鸿蒙瀑布流和欢迎页(1)

1.瀑布流 https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/reference/apis-arkui/arkui-ts/ts-container-waterflow.md他有官网文档,有个瀑布流的案例 自定义一类实现官方瀑布流接口 // WaterFlowDataSource.ets// 实现IDataSource接口的…

开源项目:机遇与挑战共存的创新之路

开源项目:机遇与挑战共存的创新之路 开源(Open Source,开放源码)被非盈利软件组织(美国的Open Source Initiative协会)注册为认证标记,并对其进行了正式的定义,用于描述那些源码可以…

安全防御---防火墙实验1

安全防御—防火墙实验1 一、实验拓扑与要求 要求: 1、DMZ区内的服务器,办公区仅能在办公时间内(9:00-18:00)可以访问,生产区的设备全天可以访问 2、生产区不允许访问互联网,办公区和游客区允许访问互联网 …

6-7 宠物领养开发及相关代码

6-7 宠物领养开发及相关代码(react区块链实战) 来到ant-design https://ant.design/index-cn https://ant.design/components/layout-cn/ 来到布局 选择一个简单的布局即可 会显示出所有的相关界面的代码 根据对应界面的代码在我们的react项目woniu-…

Vagrant配合VirtualBox搭建虚拟机

目录 前言一、软件下载及安装1.下载2.安装扩展: 二、创建一个虚拟机1.Vagrant官方镜像仓库 三、使用远程工具连接虚拟机1.修改相关配置文件 四、虚拟机克隆及使用1.通用配置2.简单搭建一个java环境3.克隆虚拟机1.重命名虚拟机(可选)2.打包指定…

【精品资料】数字乡村一体化解决方案(45页PPT)

引言:数字乡村一体化解决方案是响应国家乡村振兴战略,依托现代信息技术和数字经济理念,对乡村进行全面改造和升级的综合框架。该方案旨在通过数字化手段,推动乡村产业、治理、文化、教育、医疗等领域的协同发展,实现乡…

离线下载linux mysql和mysql基本库

下载地址:https://dev.mysql.com/downloads/mysql/ 选择数据库版本,系统,系统版本信息 下载需要的rpm包,传入服务器,使用yum install xxx.rpm安装即可 mysql-community下载地址 https://dev.mysql.com/downloads/my…

【MySQL基础篇】事务

事务简介 事务是一组操作的集合,它是一个不可分割的工作单位,事务会把所有的操作作为一个整体一起向系统提交或或撤销操作请求,即这些操作要么同时成功,要么同时失败。 典型事例:银行转账操作 假设张三向李四进行转账…

vs2019 QT无法打开源文件QModbusTcpClient

vs2019无法打开源文件QModbusTcpClient 如果配置的msvc2019,则查找到Include目录 然后包含&#xff1a; #include <QtSerialBus/qmodbustcpclient.h>

java算法day13

java算法day13 104 二叉树的最大深度111 二叉树的最小深度226 翻转二叉树101 对称二叉树100 相同的树 104 二叉树的最大深度 我最开始想到的是用层序遍历。处理每一层然后计数。思路非常的清楚。 迭代法&#xff1a; /*** Definition for a binary tree node.* public class…

昇思25天学习打卡营第25天 | RNN情感分类

内容介绍&#xff1a; 情感分类是自然语言处理中的经典任务&#xff0c;是典型的分类问题。本节使用MindSpore实现一个基于RNN网络的情感分类模型&#xff0c;实现如下的效果&#xff1a; 输入: This film is terrible 正确标签: Negative 预测标签: Negative输入: This film…

五. TensorRT API的基本使用-MNIST-model-build-infer

目录 前言0. 简述1. 案例运行2. 代码分析2.1 main函数2.2 build接口2.3 infer接口2.4 其他 总结参考 前言 自动驾驶之心推出的 《CUDA与TensorRT部署实战课程》&#xff0c;链接。记录下个人学习笔记&#xff0c;仅供自己参考 本次课程我们来学习课程第五章—TensorRT API 的基…

Mediapipe-姿态估计实例

Mediapipe简介 Mediapipe 是由 Google Research 开发的一款开源框架&#xff0c;旨在帮助开发者轻松地构建、测试和部署复杂的多模态、多任务的机器学习模型。它特别擅长于实时处理和分析音频、视频等多媒体数据。以下是 Mediapipe 的一些关键特点和组件&#xff1a; 关键特点…

Telegram Bot、小程序开发(一)基础入门

文章目录 一、Telegram Bot是什么&#xff1f;二、Telegram Bot应用场景三、机器人是如何工作的&#xff1f;架构getUpdates 和 webhookswebhooks要求自签名证书 四、如何创建和使用Telegram Bot&#xff1f;整体步骤和流程Bot 的申请过程将机器人添加到 Telegram 群组 一、Tel…