【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.pswp.cn/news/897348.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/897348.shtml
英文地址,請注明出處:http://en.pswp.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…