STM32F407VET6學習筆記11:smallmodbus_(多從機)創建新的slave從機

今日記錄一些smallmodbus 創建新的slave 從機 的過程,以及使用的關鍵點.

目錄

創建新的從機對應操作函數與buffer

創建新的從機線程與操作代碼:

slave使用的要點:

完整的slave代碼:

能正常通信:


創建新的從機對應操作函數與buffer

最主要的部分就是從 board_virtual.c 文件抽象新建出新的從機對應的操作函數:

可以看到,他原本就包含一系列線圈buffer以及對這些buffer的操作函數:

后續操作就是直接復制他們函數的本體,然后直接更改其調用的buffer 以及 宏定義最大下標的名稱,就行了。

最終 為了額外定義出一個slave 底層操作的函數與數組宏:

而復制改寫的函數與數組 、宏 效果如下:(寫在 board_virtual.h 文件)

例舉其對應函數,對照修改對比如下:

其余函數 與 數組 、 宏 基本都是如此修改 就行了:

新增這些操作函數后,給新定義的從機實例進行調用就行了,一般是在從機回調函數:

創建新的從機線程與操作代碼:

slave使用的要點:

1. 從機的線程要與給它填充buffer的線程分開

2. 定義modbus的地址在從機回調函數中 同時?注意數組下標的計算

3.write寫線圈函數是給主機master用的,從機更新線圈與寄存器是update

4.修改地址范圍同步修改board_virtual.c文件中定義的數組最大下標宏

5.modbus_slave_wait_handle();函數最后一個傳參,不能調用MODBUS_WAITFO_REVER詞根,否則從機只會回復一次! 要使用MODBUS_WAITFO_NO

6.

完整的slave代碼:

這段需要注意以下,我這個G4_485_EN();函數用于485使能腳,但這里我用的TTL通信,所以注釋了對使能腳的操作!

對線程的創建是有倆個線程,一個是slave線程,一個是flush更新寄存器的線程

最后別忘了在主函數main.c初始化線程:

能正常通信:

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/917872.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/917872.shtml
英文地址,請注明出處:http://en.pswp.cn/news/917872.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【論文閱讀】Transformer Feed-Forward Layers Are Key-Value Memories

Transformer Feed-Forward Layers Are Key-Value Memories 原文摘要 研究背景與問題: 前饋層占Transformer模型參數總量的2/3,但其功能機制尚未得到充分研究 核心發現:提出前饋層實質上是鍵值存儲系統 鍵:這里的鍵與訓練數據中出…

昇思+昇騰開發板:DeepSeek-R1-Distill-Qwen-1.5B 模型推理部署與 JIT 優化實踐

目錄 引言 模型推理部署 環境準備 安裝 MindSpore 查看當前 mindspore 版本 安裝 MindNLP 模型與分詞器加載 導入必要的庫 加載分詞器 加載模型 對話功能實現 設置系統提示詞 構建對話歷史輸入 推理函數實現 交互界面實現 推理JIT優化 基礎環境安裝 JIT 優化配置…

用phpstudy安裝php8.2后報錯:意思是找不到php_redis.dll拓展時

1.地址:https://pecl.php.net/package/redis/6.2.0/windows 2.下載3.解壓后復制php_redis.dll到phpstudy_pro\Extensions\php\php8.2.9nts\ext目錄 4.打開php.ini,加上 extension_dir “D:\software\phpstudy_pro\Extensions\php\php8.2.9nts\ext”

開源列式分布式數據庫clickhouse

這里寫自定義目錄標題開源列式OLAP數據庫clickhouseclickhouse使用 ClickHouse 的場景如何理解行式存儲和列式存儲clickhouse-go開源列式OLAP數據庫clickhouse OLAP (分析型):專為快速掃描、聚合、分析海量數據設計。OLTP (事務型):專為處理大量短事務&…

Java Stream API 詳解(Java 8+)

1. Stream 操作分類Stream 操作分為兩類:中間操作(Intermediate Operations)返回新的 Stream,可以鏈式調用(如 filter, map, sorted, distinct)。惰性求值:只有遇到終止操作時才會執行。終止操作…

「源力覺醒 創作者計劃」_文心大模型4.5系列開源模型, 從一行代碼到一個生態:聊聊開源戰略那些事兒,順便扯扯文心大模型 4.5 的使用心得

前言:哈嘍,大家好,今天給大家分享一篇文章!并提供具體代碼幫助大家深入理解,徹底掌握!創作不易,如果能幫助到大家或者給大家一些靈感和啟發,歡迎收藏關注哦 💕 目錄從一行…

算法專題(二)回文鏈表

1、源代碼class Solution {public boolean isPalindrome(ListNode head) {ListNode fasthead,slowhead; //快慢指針都在頭結點//快指針走2步,慢指針走一步。//雙數快指針最后是null,單數快指針下一位是nullwhile(fast!null && fast.next!null){f…

2025《艾諾提亞失落之歌》逆向工程解包嘗試

前言 想開發一下光明之魂,看能不能解包《艾諾提亞失落之歌》的模型。 之前寫了(https://blog.csdn.net/weixin_42875245/article/details/148616547?spm1001.2014.3001.5501) 沿用這個思路進行逆向工程解包。 文章目錄請添加圖片描述前言…

JVM 03 類加載機制

JVM 將字節碼二進制流加載到內存稱為類加載。 什么時候加載類 new 實例化對象。而對象所屬類還沒被加載。讀取/設置類的靜態非常量字段,常量字段在常量池。調用類的靜態方法。類初始化,優先初始化父類。虛擬機啟動時,先加載用戶指定的主類。 …

STM32H7+FreeRTOS+LwIP移植EtherCAT開源主站SOEM

代碼下載什么的就不多說了,直接看需要移植修改的代碼。 1、osal.c修改 /******************************************************************************* * *** **** *** *** …

VijosOJ:中文信息學競賽的二十年開源之路

VijosOJ:中文信息學競賽領域的老牌開源在線判題系統 在中文編程教育與信息學競賽的發展歷程中,在線判題系統(OJ)扮演了至關重要的角色。它們不僅是選手訓練的 “戰場”,更是知識傳遞與社區交流的樞紐。VijosOJ&#x…

QPainter::CompositionMode解析

基本概念目標(Destination):已經存在的像素。源(Source):要繪制的新像素。組合模式:決定源和目標如何混合。總結SourceOver:源繪制在目標之上。DestinationOver:目標繪制在源之上。Clear:二者重疊區域被清空…

對接釘釘審批過程記錄(C#版本)

釘釘開放平臺:API總覽 - 釘釘開放平臺 按照開放平臺操作指引,進入到釘釘開發者后臺:開發者后臺統一登錄 - 釘釘統一身份認證,進行應用創建。 按照開放平臺指引下載釘釘SDK(新版)。 在vs引入釘釘dll文件。 獲…

AFSIM入門教程03.03:更新所有依賴庫版本

系列索引:AFSIM入門教程索引 上一篇中更新了tiff庫版本,本文將更新所有使用到的依賴庫版本。 失敗了 依賴庫 首先獲取哪些庫被使用了。打開源碼目錄,搜索# Configure the 3rd_party,可以看到調用第三方庫的代碼。 官方提供的…

完美解決hive external表中csv字段內容含“,“逗號的問題

為解決hive表中csv字段內容含","逗號的問題,網上幾乎都是說要用org.apache.hadoop.hive.serde2.OpenCSVSerde。 使用方法為: 1、mysql導出時,加一個ENCLOSED BY ‘"’, 示例: mysql -h 10.16.0.10 -P …

【Git】修改本地和遠程的分支名稱

其原理是: 對于本地:可直接修改分支名稱;對于遠程:不可直接重命名分支,所以應該將修改好名稱的分支以新分支的形式推送上遠程倉庫,之后將新分支與遠程新分支關聯,之后可選擇刪除舊分支# 例子&am…

ubuntu24.04安裝selenium、chrome、chromedriver

實驗環境:kaggle notebook、colab notebook1、安裝chrome!wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb!sudo dpkg -i google-chrome-stable_current_amd64.deb!sudo apt-get install -f!export QT_QPA_PLATFORMoffscreen!sudo…

西門子PLC基礎指令6:讀取時鐘指令、設置時鐘指令、使能含義與注意

讀/寫指令 1. 讀取時鐘 指令 READ_RTCREAD_RTC (RTC 全稱是 Real - Time Clock,即實時時鐘 )指令的主要作用是將 CPU 內部實時時鐘(RTC)的當前日期和時間信息讀取出來,并存儲到以指定字節地址(圖…

GeoTools 結合 OpenLayers 實現緩沖區分析

前言? 緩沖區分析是地理信息系統(GIS)空間分析的核心功能之一。它通過圍繞點、線或面等地理實體,自動生成指定距離(或寬度)的等距區域(緩沖區)。該功能為量化空間鄰近度、評估影響范圍、識別潛…

SpringBoot 接入SSE實現消息實時推送的優點,原理以及實現

SpringBoot 接入SSE實現消息實時推送的優點,原理以及實現 前言 上一篇文章 我寫的關于SpringBoot整合t-io是websocket實時通信的文章中我們可以了解到 websocket是雙向通信的,而且需要TCP連接的支持,今天在這里我要說的SSE(Server-Sent Events) 是一個單項通信的消息實時推…