TienYao@Tech

Thoughts, stories and ideas.

Zynq

建立個人FreeRTOS開發模板基礎架構

前言 在開始建立FreeRTOS工程專案前,都有一些固定的常規代碼操作而記錄這些代碼,這不僅能夠加速後續專案的開發,還能確保代碼品質和一致性,經過一些專案經驗,我整理出了個人常用FreeRTOS模板的建置操作。 核心模板實現 📝 1. 主程式架構 (main.c) #include <stdio.h> #include "FreeRTOS.h" #include "task.h" #include "user_task.h" int main() { //create start task BaseType_t result = xTaskCreate( (TaskFunction_t)start_task, (const char*)"start_
閱讀時間 1 分鐘
ROS2

ROS2 時間相關 API: Time、Rate、Duration 的 C++ 實作

前言 在機器人開發中,時間管理是一個至關重要的概念。無論是控制機器人的運動頻率、記錄感測器數據的時間戳,還是實現複雜的時序邏輯,都需要精確的時間控制。ROS2 提供了完整的時間管理 API,包括 Time、Rate、Duration 等核心類別,讓開發者能夠輕鬆處理各種時間相關的任務。 本文將深入探討這些 API 的使用方式,並提供實際的 C++ 程式碼範例,幫助您在 ROS2 專案中有效運用時間管理功能。 1. Duration(持續時間)- 時間間隔的精確控制 基本概念 Duration 表示一段時間間隔,可以是正值或負值。它在 ROS2 中廣泛用於計時、延遲和時間計算。Duration 的內部表示包含秒數和奈秒數兩個部分,提供了高精度的時間控制。 C++ 實作範例 讓我們看看如何在實際專案中使用 Duration: #include "rclcpp/rclcpp.hpp"
閱讀時間 10 分鐘
ROS2

ROS2 C++ 程式設計風格指南

前言 在 ROS2 開發中,良好的程式設計風格不僅能提高代碼的可讀性和可維護性,還能避免一些常見的錯誤和性能問題。本文將介紹 ROS2 中 C++ 程式設計的風格指南和最佳實踐,特別是關於節點創建的不同方式及其優缺點。 ROS2 節點創建的兩種方式 在 ROS2 中,創建節點有兩種主要的方式:實例化節點對象和繼承節點類。讓我們來看看這兩種方式的具體實現和比較。 1. 實例化節點對象 這是最簡單直接的方式,直接創建一個 rclcpp::Node 的實例: #include "rclcpp/rclcpp.hpp" int main(int argc, char ** argv) { rclcpp::init(argc, argv); auto node = rclcpp::Node::make_shared("
閱讀時間 4 分鐘
freeRTOS

在 Xilinx SDK 2018.3 中使用 FreeRTOS 開發多工系統

專案簡介 這篇文章要跟大家分享如何在 Xilinx Software Development Kit (SDK) 2018.3 版本中,使用 FreeRTOS 來開發一個多工系統。我們會實作任務管理、UART 中斷處理以及任務間的通訊機制。 開發環境 * Xilinx SDK 2018.3 * FreeRTOS 即時作業系統 * 開發板:Xilinx Zynq-7000 系列 系統架構 程式處理流程 flowchart TD A[系統開機] --> B[初始化階段] B --> C1[建立UART佇列] B --> C2[建立UART號誌] B --> C3[初始化UART裝置] C1
閱讀時間 8 分鐘
數位除法器設計與實現 - 基於FPGA的移位
Verilog

數位除法器設計與實現 - 基於FPGA的移位

前言 在數位電路設計中,除法運算是一個重要但相對複雜的算術操作。本文將介紹一個基於FPGA的32位元除法器設計,採用移位除法算法實現。這個設計不僅具有良好的可擴展性,還提供了完整的測試驗證平台。 一、設計目標 1. 實現32位元無號數除法運算 2. 支援可參數化的資料位寬 3. 提供完整的控制機制 4. 確保運算結果的準確性 二、設計架構 2.1 模組說明 1. div_go_tick: 啟動信號處理模組 * 功能:產生單一時鐘週期的觸發脈衝 * 避免多週期觸發問題 2. division: 除法器核心模組 * 功能:執行移位除法運算 * 提供商數和移位計數輸出 三、完整程式碼 3.1 訊號邊緣檢測模組 // ********************************************************************************* // 訊
閱讀時間 6 分鐘
數字電路毛刺濾波器設計與實現
Verilog

數字電路毛刺濾波器設計與實現

前言 在數位電路設計中,信號毛刺(Glitch)是一個常見的問題,常見於按鍵去彈跳、外部信號輸入處理、需要穩定信號的控制系統、數位電路中的雜訊處理等。本文將介紹一個使用Verilog實現的毛刺濾波器設計,該濾波器可以有效過濾掉輸入信號中的短暫毛刺,提高系統的穩定性。 專案架構 RTL代碼實現 以下是完整的Verilog RTL代碼: module glitch_filter ( input clk, // 系統時脈輸入 input nRst, // 低電位有效的重置信號 input iSignal, // 需要進行濾波的輸入信號 output oSignal // 經過濾波處理後的輸出信號 ); // 內部信號定義 reg [31:0] rvShiftSignal_d, rvShiftSignal_q; // 32位移位暫存器,用於儲存信號歷史 reg rSignal_d, rSignal_q; // 輸出信號的組合邏輯和時序邏輯暫存器 // 第一個時序邏輯區塊
閱讀時間 5 分鐘
Verilog HDL 訊號命名參考
Verilog

Verilog HDL 訊號命名參考

前言 在數位電路設計中,良好的訊號命名原則與 coding style 同等重要。特別是在大型設計專案中,清晰的命名方式不僅能讓代碼更容易維護,也能幫助團隊成員快速理解訊號特性並進行除錯。本文將介紹常用的 Verilog HDL 訊號命名規則。 專案架構 1. FPGA 外部輸入輸出命名 FPGA 的外部接口(top module)使用全大寫字母,並用底線區分單字: input CLOCK_50 // 50MHz 系統時脈 output LED_STATUS // LED 狀態輸出 input KEY_N // 按鍵輸入(低態動作) 2. 模組內部訊號命名 2.1 子模組輸入輸出命名 * 輸入訊號:前綴 i(除系統時脈及重置輸入外) input clk // 系統時脈輸入
閱讀時間 3 分鐘