【nRF52832】【Nodic】开发入门【三】模块化


title: nRF52832开发入门【二】模块化
tags: nodic
categories: nodic
abbrlink: 37752
date: 2025-03-09 17:22:17

1. 介绍

我们实际开发过程中往往会很复杂,为了更好的管理代码,我们需要模块化。模块化的好处有很多,比如:

  1. 降低耦合度:模块化可以降低模块间的耦合度,使得代码更容易维护和修改。
  2. 复用性:模块化可以提高代码的复用性,可以节省开发时间。
  3. 降低成本:模块化可以降低开发成本,可以节省开发成本。

2.准备工作

VCode安装插件:
1.nRF Connect for VS Code
2.CMake
先创建一个空的工程文件

创建完,默认会创建一些最基础的配置文件

CMakeLists.txt和prj.conf

然后给这个app添加build配置

除了板子是你对应的手上的板子,其他一路默认即可

然后开始build即可.

插上对应的板子 烧录build flash即可

提供的默认空工程没啥东西,我这边按照我的自己的习惯对齐进行分模块,有的人习惯是把c文件放一块,h文件放一块,也可以每个模块都单独一个文件夹

我是习惯后者.前者是可以省去CMakeList.txt文件添加的麻烦,但是我觉得这就不算真正意义上的模块化了.

将src文件中的main.c挪出来,删掉src文件,并且添加自己想要添加的模块内容如下示例:

另外再CMakeLists.txt中添加相关的编译说明:

aux_source_directory (led/ led_path)
aux_source_directory (button/ button_path)
aux_source_directory (bluetooth/ bluetooth_path)target_sources(app PRIVATE main.c${led_path}${button_path}${bluetooth_path})

这样就能把每个模块单独分开,互相解藕

3 输出

输出一般单片或者嵌入式都是以led作为参考的示例.

非常的简单操作就是对led的节点 做dts检查后初始化,然后就可以输出高低电平了

gpio_is_ready_dt(&led1);
gpio_pin_configure_dt(&led0, GPIO_OUTPUT);
gpio_pin_set_dt(&led0, 1);//高电平
gpio_pin_set_dt(&led0, 0);//低电平

更详细gpio定制化dts可以参考这个工程custom_dts_binding

4 输入

输出拿按钮button举例:

输入和输出相似 也是先做ready_dt check 然后配置成输入

gpio_is_ready_dt(&button0);
gpio_pin_configure_dt(&button0, GPIO_INPUT);
//设置中断配置
gpio_pin_interrupt_configure_dt(&button,GPIO_INT_EDGE_TO_ACTIVE);

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

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

相关文章

爬虫案例八js逆向爬取网易音乐

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、js逆向的前期准备二、网站分析三、代码 前言 提示:这里可以添加本文要记录的大概内容: 爬取网易音乐 提示:以下是本篇…

vue2实现组件库的自动按需引入,unplugin-auto-import,unplugin-vue-components

1.使用ant-design-vue或者element-ui时,如何每个组件都去import导入组件,大大降低了开发效率,如果全局一次性注册会增加项目体积,那么如何实现既不局部引入,也不全局注册? 2.在element-plus官网看到有说明…

【Andrej Karpathy 神经网络从Zero到Hero】--2.语言模型的两种实现方式 (Bigram 和 神经网络)

目录 统计 Bigram 语言模型质量评价方法 神经网络语言模型 【系列笔记】 【Andrej Karpathy 神经网络从Zero到Hero】–1. 自动微分autograd实践要点 本文主要参考 大神Andrej Karpathy 大模型讲座 | 构建makemore 系列之一:讲解语言建模的明确入门,演示…

(二 十 二)趣学设计模式 之 备忘录模式!

目录 一、 啥是备忘录模式?二、 为什么要用备忘录模式?三、 备忘录模式的实现方式四、 备忘录模式的优缺点五、 备忘录模式的应用场景六、 总结 🌟我的其他文章也讲解的比较有趣😁,如果喜欢博主的讲解方式,…

安装SPSS后启动显示应用程序无法启动,因为应用程序的并行配置不正确的解决方案

软件安装报错问题有需要远程文章末尾获取联系方式,可以帮你远程处理各类安装报错。 一、安装SPSS后启动显示应用程序无法启动,因为应用程序的并行配置不正确报错 在成功安装 SPSS 软件后,尝试启动应用程序时,系统弹出错误提示窗…

IP,MAC,ARP 笔记

1.什么是IP地址 IP 地址是一串由句点分隔的数字。IP 地址表示为一组四个数字,比如 192.158.1.38 就是一个例子。该组合中的每个数字都可以在 0 到 255 的范围内。因此,完整的 IP 寻址范围从 0.0.0.0 到 255.255.255.255。 IP 地址不是随机的。它们由互…

C++11中的Condition_variable

C11中的condition_variable 在C11中,条件变量(std::condition_variable)是线程同步机制之一,用于在多线程环境中实现线程间的通信和协调。它允许一个或多个线程在某个条件尚未满足时等待,直到其他线程通知条件已经满足…

IO多路复用实现并发服务器

一.select函数 select 的调用注意事项 在使用 select 函数时,需要注意以下几个关键点: 1. 参数的修改与拷贝 readfds 等参数是结果参数 : select 函数会直接修改传入的 fd_set(如 readfds、writefds 和 exceptfds&#xf…

_二级继电器程控放大倍数自动设置

简介 在开发项目中,有时会遇到需要使用程控放大的情况,如果没有opa那种可编程放大器,那么就需要通过继电器来控制放大倍数。而在继电器程控中,常用的是二级程控,三级程控相较于二级就复杂了许多。 在二级程控中&#x…

电脑总显示串口正在被占用处理方法

1.现象 在嵌入式开发过程中,有很多情况下要使用串口调试,其中485/422/232转usb串口是非常常见的做法。 根据协议,接口芯片不同,需要安装对应的驱动程序,比如ch340,cp2102,CDM212364等驱动。可…

优雅拼接字符串:StringJoiner 的完整指南

在Java开发中,字符串拼接是高频操作。无论是日志格式化、构建CSV数据,还是生成动态SQL,开发者常需处理分隔符、前缀和后缀的组合。传统的StringBuilder虽然灵活,但代码冗余且易出错。Java 8推出的StringJoiner类,以简洁…

LabVIEW闭环控制系统硬件选型与实时性能

在LabVIEW闭环控制系统的开发中,硬件选型直接影响系统的实时性、精度与稳定性。需综合考虑数据采集速度(采样率、接口带宽)、计算延迟(算法复杂度、处理器性能)、输出响应时间(执行器延迟、控制周期&#x…

Hive的架构

1. 概念 Hive 是建立在 Hadoop 上的数据仓库工具,旨在简化大规模数据集的查询与管理。它通过类 SQL 语言(HiveQL)将结构化数据映射为 Hadoop 的 MapReduce,适合离线批处理,尤其适用于数据仓库场景。 2. 数据模型 表&a…

深入解析:Linux中KVM虚拟化技术

这篇文章将深入分析Linux中虚拟化技术的实现----KVM技术,从KVM技术的简介、技术架构、以及虚拟机和宿主机交互的重要处理逻辑出发,深入探究KVM技术的实现。 一、KVM简介: 首先,我们先查看一下KVM架构,看看它的整体工…

golang学习笔记——go语言安装及系统环境变量设置

文章目录 go语言安装go envgo getgoproxy测试安装 Go 插件安装 Go 插件依赖工具参考资料用户环境变量和系统环境变量用户环境变量系统环境变量示例设置环境变量的步骤设置用户环境变量设置系统环境变量 验证环境变量总结 2024年最火的5大Go框架1. Gin:高并发接口的“…

3.6c语言

#define _CRT_SECURE_NO_WARNINGS #include <math.h> #include <stdio.h> int main() {int sum 0,i,j;for (j 1; j < 1000; j){sum 0;for (i 1; i < j; i){if (j % i 0){sum i;} }if (sum j){printf("%d是完数\n", j);}}return 0; }#de…

【TI】如何更改 CCS20.1.0 的 WORKSPACE 默认路径

参考链接&#xff1a; 如何更改 CCS Theia 中工作区的默认位置&#xff1f;- Code Composer Studio 论坛 - Code Composer Studio™︎ - TI E2E 支持论坛 --- How to change the default location for the workspace in CCS Theia? - Code Composer Studio forum - Code Comp…

Vue3中动态Ref的魔法:绑定与妙用

前言 在Vue 3的开发过程中,动态绑定Ref是一项非常实用的技术,特别是在处理复杂组件结构和动态数据时。通过动态绑定Ref,我们可以更灵活地访问和操作DOM元素或组件实例,实现更高效的交互和状态管理。本文将详细介绍如何在Vue 3中实现动态Ref的绑定,并通过实例展示其妙用。…

CarPlanner:用于自动驾驶大规模强化学习的一致性自回归轨迹规划

25年2月来自浙大和菜鸟网络的论文“CarPlanner: Consistent Auto-regressive Trajectory Planning for Large-scale Reinforcement Learning in Autonomous Driving”。 轨迹规划对于自动驾驶至关重要&#xff0c;可确保在复杂环境中安全高效地导航。虽然最近基于学习的方法&a…

VS Code连接服务器教程

VS Code是什么 VS Code&#xff08;全称 Visual Studio Code&#xff09;是一款由微软推出的免费、开源、跨平台的代码编辑神器。VS Code 支持 所有主流操作系统&#xff0c;拥有强大的功能和灵活的扩展性。 官网&#xff1a;https://code.visualstudio.com/插件市场&#xff1…