HC32L110(三) HC32L110的GCC工具鏈和VSCode開發環境

来源:https://www.cnblogs.com/milton/archive/2022/08/29/16634604.html
-Advertisement-
Play Games

以下介紹Ubuntu下搭建用於HC32L110系列MCU的GCC工具鏈和VSCode的開發環境. AS06-VTB07H 產品頁鏈接. 這個開發板有新舊兩個版本. 4.0使用的是STM8, 5.0使用的是HC32L110, 現在能買到的都是後者, pin腳全部引出, 有預留燒錄口, 有一個功能按鈕,... ...


目錄

以下介紹Ubuntu下搭建用於HC32L110系列MCU的GCC工具鏈和VSCode的開發環境.

硬體準備

前一篇中已經介紹, 用於Linux環境下燒錄

基於HC32L110系列MCU的開發板

以下是 AS06-VTB07H 產品頁鏈接. 這個開發板有新舊兩個版本. 4.0使用的是STM8, 5.0使用的是HC32L110, 現在能買到的都是後者, pin腳全部引出, 有預留燒錄口, 有一個功能按鈕, 兩個LED, 自帶USB2TTL通信(P01, P02), 非常方便.

下麵的介紹都基於這個開發板. 如果使用其他的板子, GPIO口自己調整一下就可以.

軟體準備

JLink軟體和對應的flash演算法文件, 在前一篇中已經介紹

IDE VSCode

安裝並配置好, 在網上有很多教程.

GCC ARM工具鏈

在GCC ARM網站下載工具鏈接https://developer.arm.com/tools-and-software/open-source-software/developer-tools/gnu-toolchain/downloads, 然後解壓到合適的目錄

tar xvf gcc-arm-11.2-2022.02-x86_64-arm-none-eabi.tar.xz
cd /opt/gcc-arm/
sudo mv ~/Backup/linux/gcc-arm-11.2-2022.02-x86_64-arm-none-eabi/ .
sudo chown -R root:root gcc-arm-11.2-2022.02-x86_64-arm-none-eabi/

檢查版本

/opt/gcc-arm/gcc-arm-11.2-2022.02-x86_64-arm-none-eabi/bin/arm-none-eabi-gcc --version
arm-none-eabi-gcc (GNU Toolchain for the Arm Architecture 11.2-2022.02 (arm-11.14)) 11.2.1 20220111
Copyright (C) 2021 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

示例項目導出和編譯

導出項目

git clone https://github.com/IOsetting/hc32l110-template.git

根據自己的環境參數修改下Makefile

PROJECT 		?= app
# 改成本地的工具鏈路徑
ARM_TOOCHAIN 	?= /opt/gcc-arm/gcc-arm-11.2-2022.02-x86_64-arm-none-eabi/bin
# 改成本地的JLinkExe的路徑
JLINKEXE		?= /opt/SEGGER/JLink/JLinkExe
# MCU型號, 這個是16K的版本, 如果是32K版本要改成 HC32L110x6, 對應下麵的ld文件也要修改
DEVICE			?= HC32L110x4
# The path for generated files
BUILD_DIR 		= Build

# Link descript file, hc32l110x4.ld or hc32l110x6.ld
LDSCRIPT		= Libraries/LDScripts/hc32l110x4.ld
# ...

編譯預設項目

目錄 User 下有預設的點燈示例代碼, 在上一步修改完Makefile後, 就可以編譯了

make clean
make

如果想看到詳細的命令行, 可以用

V=1 make

燒錄

編譯完成後, 執行下麵的命令燒錄

make flash

如果使用的是 AS06-VTB07H, 燒錄完成後可以看到兩個LED每隔一秒交替閃爍.

配置VSCode開發環境

作為Linux下的生產力工具, VSCode是要用起來的, 開發C語言項目, 需要配置的就是兩個, c_cpp_properties.json 和 tasks.json

首先用VSCode打開項目目錄, C/C++插件未安裝會有提示, 按提示安裝即可.

配置C/CPP: c_cpp_properties.json

快捷鍵Ctrl + Shift + P調出菜單, 輸入 C/C++, 可以看到 C/C++ Edit Configurations (JSON), 回車, 在創建的模板中按以下內容編輯, 路徑換成自己的

{
    "configurations": [
        {
            "name": "Linux",
            "includePath": [
                "${workspaceFolder}/**"
            ],
            "defines": [],
            "compilerPath": "/opt/gcc-arm/gcc-arm-11.2-2022.02-x86_64-arm-none-eabi/bin/arm-none-eabi-gcc",
            "cStandard": "gnu99",
            "cppStandard": "gnu++14",
            "intelliSenseMode": "gcc-arm",
            "configurationProvider": "ms-vscode.makefile-tools"
        }
    ],
    "version": 4
}

配置Tasks: tasks.json

快捷鍵Ctrl + Shift + P調出菜單, 輸入 Task, 可以看到 Config Task, 回車 -> Create tasks.json from template -> Others, 編輯創建的 tasks.json , 根據自己的習慣添加快捷方式

{
    // See https://go.microsoft.com/fwlink/?LinkId=733558
    // for the documentation about the tasks.json format
    "version": "2.0.0",
    "tasks": [
        {
            "label": "clean, build",
            "type": "shell",
            "command": "make clean;make",
            "problemMatcher": []
        },
        {
            "label": "build, download",
            "type": "shell",
            "command": "make;make flash",
            "problemMatcher": []
        },
        {
            "label": "download",
            "type": "shell",
            "command": "make flash",
            "problemMatcher": []
        },
        {
            "label": "build",
            "type": "shell",
            "command": "make",
            "problemMatcher": []
        },
        {
            "label": "clean",
            "type": "shell",
            "command": "make clean",
            "problemMatcher": []
        },
    ]
}

平時使用時, 用Alt + Shift + F10就可以調出Task菜單, 快速執行編譯和燒錄等操作.

編譯選項

項目中新增代碼目錄和單個C文件

User目錄下的代碼, Makefile已經覆蓋, 會自動添加無需修改 Makefile. 如果新增其他的目錄需要包含整個目錄, 或包含單個源文件, 可以編輯Makefile中的這部分

# C source folders
CDIRS	:= User \
		Libraries/CMSIS \
		Libraries/HC32L110_Driver/src
# C source files (if there are any single ones)
CFILES := 

其中 CDIRS 用於目錄的添加, CFILES 用於單個C源文件的添加.

除此以外, 如果有新增的 include 路徑, 需要添加到 INCLUDES 這個變數中

# Include paths
INCLUDES	:= Libraries/CMSIS \
			Libraries/HC32L110_Driver/inc \
			User

如果編譯與預期不符, 在make時增加V=1查看實際的命令行.

調整編譯參數

編譯的參數都在 rules.mk 文件中,

# Global compile flags
CFLAGS		= -Wall -ggdb -ffunction-sections -fdata-sections
ASFLAGS		= -g -Wa,--warn

# Arch and target specified flags
OPT			?= -Os
CSTD		?= -std=c99
ARCH_FLAGS	:= -fno-common -mcpu=cortex-m0plus -mthumb

# c flags
TGT_CFLAGS 	+= $(ARCH_FLAGS) $(addprefix -D, $(LIB_FLAGS))
# asm flags
TGT_ASFLAGS += $(ARCH_FLAGS)
# ld flags
TGT_LDFLAGS += --specs=nano.specs -mcpu=cortex-m0plus -mthumb -nostartfiles -Wl,--gc-sections -Wl,-Map=$(BDIR)/$(PROJECT).map -Wl,--print-memory-usage

如果要優化編譯的結果大小或執行速度, 需要修改OPT參數, -O0是無優化, -O1是基礎優化, -Os是尺寸壓縮, 具體優化項參考 https://gcc.gnu.org/onlinedocs/gcc/Optimize-Options.html

OPT			?= -Os

其中-ffunction-sections -fdata-sections-Wl,--gc-sections是非常重要的參數, 如果不使用這些參數, 編譯的結果大概會超出HC32L110的16K位元組限制.


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 1. 基礎函數 序號 函數 說明 1 print() 列印 2 input() 輸入 3 int() 轉化為整形 4 float() 轉化為浮點型 5 str() 轉化為字元串 6 type() 返回對象類型 7 isinstance() 判斷對象類型(返回布爾值) 2. 流程式控制制 序號 函數 說明 ...
  • 目錄 一.OpenGL ES 圖像亮度調節 1.原始圖片 2.效果演示 二.OpenGL ES 圖像亮度調節源碼下載 三.猜你喜歡 零基礎 OpenGL ES 學習路線推薦 : OpenGL ES 學習目錄 >> OpenGL ES 基礎 零基礎 OpenGL ES 學習路線推薦 : OpenGL ...
  • 前言 今天想聊一聊冪等相關的知識,以及實現一個冪等公共組件需要重點涉及和思考的點。 概念 首先,什麼是冪等,在實際代碼生產過程中有什麼作用呢? 在編程中一個冪等操作的特點是其任意多次執行所產生的影響均與一次執行的影響相同。 舉個例子,假如有個方法,用於修改一個訂單的狀態為已完成,只改一個狀態欄位,要 ...
  • 摘要:本文主要講解灰度線性變換。 本文分享自華為雲社區《[Python圖像處理] 十五.圖像的灰度線性變換》,作者:eastmount。 一.圖像灰度線性變換原理 圖像的灰度線性變換是通過建立灰度映射來調整原始圖像的灰度,從而改善圖像的質量,凸顯圖像的細節,提高圖像的對比度。灰度線性變換的計算公式如 ...
  • JSP概述 什麼是 jsp JSP(全稱 Java Server Pages)是由 Sun 公司專門為瞭解決動態生成 HTML 文檔的技術。 Servlet 程式輸出 html 頁面 在 jsp 技術之前,如果我們要往客戶端輸出一個頁面。我們可以使用 Servlet 程式來實現。具體的代碼如下: p ...
  • 一、事件背景 大家好,我是馬哥python說。 演員張天愛於2022.8.25號在網上爆出一段音頻 "慣犯,希望所以女孩擦亮眼睛。" 至今已有2.5億次觀看量,瞬間衝上熱搜。 二、微熱點分析 以下數據來源:微熱點 從輿情分析網站上來看,從熱度指數的變化趨勢來看,"張天愛"的熱度在08月25日22時達 ...
  • 參考自 https://www.cnblogs.com/leoxjy/p/10201046.html#5095270 Centos報這個問題,Asp.NetCore 3.1 HttpClient 請求 Https 報錯的SSL證書異常的問題,請使用以下方法解決。 export DOTNET_SYST ...
  • 概述 本文描述WPF的拖放功能(Drag and Drop)。 拖放功能涉及到兩個功能,一個就是拖,一個是放。拖放可以發生在兩個控制項之間,也可以在一個控制項自己內部拖放。假設界面上有兩個控制項,一個TreeView,一個ListView,那麼可能發生的拖動有以下幾種情況: 1、TreeView -> L ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...