91欧美超碰AV自拍|国产成年人性爱视频免费看|亚洲 日韩 欧美一厂二区入|人人看人人爽人人操aV|丝袜美腿视频一区二区在线看|人人操人人爽人人爱|婷婷五月天超碰|97色色欧美亚州A√|另类A√无码精品一级av|欧美特级日韩特级

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

RT-Thread編程高階用法-函數(shù)擴(kuò)展之$Sub$$與$Super$$

RTThread物聯(lián)網(wǎng)操作系統(tǒng) ? 來源:RTThread物聯(lián)網(wǎng)操作系統(tǒng) ? 2020-06-28 09:18 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

前面移植了RT-Thread Nano,其實(shí)準(zhǔn)確來說那不叫移植,那叫做部署,因?yàn)橐浦驳墓ぷ鞴俜揭呀?jīng)幫我們做好了。

1、引發(fā)思考-相關(guān)資料檢索

在之前的文章提到過,RT-Thread已經(jīng)提前在main函數(shù)以前就把跟硬件配置、系統(tǒng)初始化、啟動(dòng)調(diào)度器等相關(guān)的都做好了,所以我們后來看到的main函數(shù)非常簡潔,真是讓人感覺神清氣爽,有繼續(xù)往下寫代碼的欲望,如下:

main.c

int main(void) { while(1) { rt_kprintf("Hello RTT_NANO "); HAL_GPIO_TogglePin(LED_GPIO_Port, LED_Pin); rt_thread_mdelay(500); } }

那具體RT-Thread又是如何實(shí)現(xiàn)在main函數(shù)執(zhí)行之前就把所有初始化硬件、時(shí)鐘的工作都做了呢?跟隨官方文檔的RT-Thread代碼啟動(dòng)流程:

跟代碼,最后發(fā)現(xiàn)如下代碼:

/* re-define main function */ int $Sub$$main(void) { rtthread_startup(); return 0; } /* the system main thread */ void main_thread_entry(void *parameter) { extern int main(void); extern int $Super$$main(void); /* RT-Thread components initialization */ rt_components_init(); /* invoke system main function */ #if defined(__CC_ARM) || defined(__CLANG_ARM) $Super$$main(); /* for ARMCC. */ #elif defined(__ICCARM__) || defined(__GNUC__) main(); #endif }

平時(shí)工作開發(fā)中沒用到這樣的語法,于是只能搜索文檔來看看到底是如何實(shí)現(xiàn)的,果然在Keil幫助手冊(cè)中找到了答案:

從文檔中得知,Keil MDK編譯器用$Sub$$和$Super$$這兩個(gè)符號(hào)來擴(kuò)展了 main 函數(shù),這使得使用$Sub$$main可以在main函數(shù)執(zhí)行之前就預(yù)先執(zhí)行$Sub$$main函數(shù),所以在$Sub$$main函數(shù)里就可以完成一些基本的硬件、時(shí)鐘初始化功能,做完這些工作以后,還是得跳轉(zhuǎn)到main函數(shù)去執(zhí)行往后邏輯的呀,這就需要通過調(diào)用$Super$$main來實(shí)現(xiàn)了。(注:在Keil MDK編譯器中是這樣的情況,但在IAR以及GCC環(huán)境下有差別,這里不做分析,等后面用到再說)。

既然main函數(shù)之前能這么用,是不是換個(gè)函數(shù)也能這么用呢?這引發(fā)我的好奇,于是繼續(xù)查找文檔,在armlink_user_guide手冊(cè)中找到:

接下來開始做實(shí)驗(yàn),然后我用stm32cubeMX生成一個(gè)基本裸機(jī)工程,下載到小熊派上來驗(yàn)證是否正確。

2、小熊派上進(jìn)行實(shí)踐

2.1 基本功能配置

配置外部時(shí)鐘、調(diào)試串口、調(diào)試接口以及LED

最后生成代碼。

2.2 編寫代碼進(jìn)行驗(yàn)證

首先添加一個(gè)串口重定向函數(shù),后面才能使用printf

int fputc(int ch,FILE *file) { return HAL_UART_Transmit(&huart1,(uint8_t *)&ch,1,1000); }

接下來結(jié)合文檔模仿RT-Thread寫出以下函數(shù):

void $Sub$$main(void) { extern int main(void); extern int $Super$$main(void); //初始化HAL HAL_Init(); //初始化系統(tǒng)時(shí)鐘 SystemClock_Config(); //初始化GPIO MX_GPIO_Init(); //初始化串口 MX_USART1_UART_Init(); printf("初始化已完成 "); //點(diǎn)燈 HAL_GPIO_WritePin(GPIOC, GPIO_PIN_13, GPIO_PIN_SET); //回到真正的main函數(shù)里 $Super$$main(); }

main函數(shù)如下:

int main(void) { //延時(shí)2s HAL_Delay(2000); printf("回到main函數(shù)中 "); while(1) { HAL_GPIO_TogglePin(GPIOC, GPIO_PIN_13); HAL_Delay(500); } }

將程序編譯后下載到小熊派開發(fā)板中,然后打開串口調(diào)試助手可以看到:

由此可見,這是一個(gè)很有逼格的技能,以后可以在支持這種擴(kuò)展符號(hào)的編譯器下將這種技能應(yīng)用起來,從而簡化代碼,接下來我們?cè)偻厦孢@個(gè)程序里添加功能:添加Function函數(shù)和在它之前運(yùn)行的$Sub$$Function,然后在main函數(shù)里調(diào)用Function函數(shù):

void $Sub$$Function(void) { extern void Function(void); extern void $Super$$Function(void); printf("在Function函數(shù)之前調(diào)用$Sub$$Function "); $Super$$Function(); } void Function(void) { printf("執(zhí)行Function函數(shù) "); } int main(void) { //延時(shí)2s HAL_Delay(2000); printf("回到main函數(shù)中 "); //調(diào)用Function函數(shù) Function(); while(1) { HAL_GPIO_TogglePin(GPIOC, GPIO_PIN_13); HAL_Delay(500); } }

然后編譯后將程序下載到小熊派開發(fā)板后,通過串口調(diào)試助手看到:

至此,我們已經(jīng)完全弄明白R(shí)T-Thread是如何實(shí)現(xiàn)在main函數(shù)執(zhí)行之前就把初始化硬件、系統(tǒng)初始化、啟動(dòng)調(diào)度器等工作都完成了的基本原理。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 函數(shù)
    +關(guān)注

    關(guān)注

    3

    文章

    4417

    瀏覽量

    67516
  • 編譯器
    +關(guān)注

    關(guān)注

    1

    文章

    1672

    瀏覽量

    51616
  • RT-Thread
    +關(guān)注

    關(guān)注

    32

    文章

    1614

    瀏覽量

    44883

原文標(biāo)題:RT-Thread編程高階用法-函數(shù)擴(kuò)展之$Sub$$與$Super$$

文章出處:【微信號(hào):RTThread,微信公眾號(hào):RTThread物聯(lián)網(wǎng)操作系統(tǒng)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    恩智浦亮相RT-Thread 20周年開發(fā)者大會(huì)

    日前,“開源向?qū)崱どa(chǎn)力進(jìn)化啟示錄”全球峰會(huì)暨RT-Thread 20周年開發(fā)者大會(huì)在上海成功舉辦,恩智浦作為RT-Thread的緊密合作伙伴,在活動(dòng)中重磅亮相,展示雙方在共建RT-Thread OS開發(fā)生態(tài)方面的新成果、新方案
    的頭像 發(fā)表于 01-26 09:07 ?558次閱讀

    基于RT-Thread的簡單物聯(lián)網(wǎng)溫控箱 | 技術(shù)集結(jié)

    目錄項(xiàng)目概述RT-Thread使用情況概述硬件框架軟件框架說明演示效果改進(jìn)方向代碼地址1項(xiàng)目概述本項(xiàng)目是一個(gè)簡易的、較高精度的、易于擴(kuò)展的桌面級(jí)溫控系統(tǒng)。實(shí)現(xiàn)對(duì)箱內(nèi)溫度的精確控制,并通過Wi-Fi
    的頭像 發(fā)表于 12-26 18:18 ?7266次閱讀
    基于<b class='flag-5'>RT-Thread</b>的簡單物聯(lián)網(wǎng)溫控箱 | 技術(shù)集結(jié)

    首搭RT-Thread程翧車控平臺(tái)| RT-Thread程翧 S32K344 快速原型開發(fā)平臺(tái)正式上市!| 產(chǎn)品動(dòng)態(tài)

    在智能汽車邁向高集成與高安全的時(shí)代,VCU/ECU開發(fā)正面臨效率與可靠性的雙重考驗(yàn)。依賴單一硬件或拼湊軟件方案的傳統(tǒng)模式,已成為制約創(chuàng)新的瓶頸。為此,RT-Thread帶來里程碑式的解決方案
    的頭像 發(fā)表于 10-31 11:53 ?997次閱讀
    首搭<b class='flag-5'>RT-Thread</b>程翧車控平臺(tái)| <b class='flag-5'>RT-Thread</b>程翧 S32K344 快速原型開發(fā)平臺(tái)正式上市!| 產(chǎn)品動(dòng)態(tài)

    2025年RT-Thread開發(fā)者巡回培訓(xùn)報(bào)名正式啟動(dòng)!

    親愛的RT-Thread社區(qū)成員們:新程再啟,共赴熱愛!2025年RT-Thread開發(fā)者巡回培訓(xùn)正式啟動(dòng)報(bào)名!今年,我們選擇了西安、武漢、北京、杭州、深圳、上海、成都這7座城市,為大家?guī)?/div>
    的頭像 發(fā)表于 09-27 10:39 ?1975次閱讀
    2025年<b class='flag-5'>RT-Thread</b>開發(fā)者巡回培訓(xùn)報(bào)名正式啟動(dòng)!

    RT-Thread 5.1.0版本中調(diào)用rt_sfud_flash_probe()函數(shù)報(bào)錯(cuò)的原因?

    使用RT-Thread Studio編譯器,RT-Thread版本5.1.0 三、配置過程 1、啟用SPI和SFUD 2、修改sfud_cfg.h文件 3、修改sfud_flash_def.h文件 4
    發(fā)表于 09-18 06:08

    rt-thread studio 2.2.9如何使用最新的RT-Thread v5.2.0 released?

    rt-thread studio2.2.9如何使用最新的RT-Thread v5.2.0 released? 原先以為修改index_all.json,發(fā)現(xiàn)聯(lián)網(wǎng)的時(shí)候,會(huì)自動(dòng)覆蓋 另lastet版本
    發(fā)表于 09-16 06:06

    在Ubuntu上開發(fā)基于先楫MCU的RT-Thread應(yīng)用指南

    1、前言RT-ThreadEnv是RT-Thread推出的開發(fā)輔助工具,針對(duì)基于RT-Thread操作系統(tǒng)的項(xiàng)目工程,提供編譯構(gòu)建環(huán)境、圖形化系統(tǒng)配置及軟件包管理功能。其內(nèi)置的menuconfig
    的頭像 發(fā)表于 08-29 12:22 ?1793次閱讀
    在Ubuntu上開發(fā)基于先楫MCU的<b class='flag-5'>RT-Thread</b>應(yīng)用指南

    【好書推薦】RT-Thread第20本相關(guān)書籍!《嵌入式實(shí)時(shí)操作系統(tǒng)RT-Thread原理與應(yīng)用》| 技術(shù)集結(jié)

    01內(nèi)容簡介ContentSummary本書為讀者提供了一個(gè)全面、系統(tǒng)的RT-Thread學(xué)習(xí)指南,旨在幫助初學(xué)者及有經(jīng)驗(yàn)的開發(fā)者掌握RT-Thread實(shí)時(shí)操作系統(tǒng)和STM32嵌入式微控制器的核心
    的頭像 發(fā)表于 08-24 10:05 ?1036次閱讀
    【好書推薦】<b class='flag-5'>RT-Thread</b>第20本相關(guān)書籍!《嵌入式實(shí)時(shí)操作系統(tǒng)<b class='flag-5'>RT-Thread</b>原理與應(yīng)用》| 技術(shù)集結(jié)

    RT-Thread 遇上 Rust:安全內(nèi)核 RusT-Thread 的誕生

    大家好,我們是中國科學(xué)技術(shù)大學(xué)操作系統(tǒng)原理與設(shè)計(jì)(H)課oooooS小組。這個(gè)項(xiàng)目是我們的課程大作業(yè):參考RT-Thread架構(gòu),使用Rust搭建一個(gè)原生的嵌入式操作系統(tǒng)內(nèi)核。初識(shí)Rust是因?yàn)閤k
    的頭像 發(fā)表于 08-02 11:03 ?3540次閱讀
    <b class='flag-5'>RT-Thread</b> 遇上 Rust:安全內(nèi)核 RusT-<b class='flag-5'>Thread</b> 的誕生

    RT-Thread榮獲2025優(yōu)秀開源項(xiàng)目 | 新聞速遞

    6月底,RT-Thread睿賽德受邀參與由上海開源信息技術(shù)協(xié)會(huì)主辦的2025上海開源創(chuàng)新精英薈。上海市商委副主任張杰出席會(huì)議并致辭。RT-Thread嵌入式操作系統(tǒng)項(xiàng)目憑借其卓越的技術(shù)創(chuàng)新與開源生態(tài)
    的頭像 發(fā)表于 07-04 09:04 ?2650次閱讀
    <b class='flag-5'>RT-Thread</b>榮獲2025優(yōu)秀開源項(xiàng)目 | 新聞速遞

    深度剖析 RT-Thread 線程調(diào)度流程

    RT-Thread調(diào)度第一個(gè)線程的主要流程分如下:rtthread_startup:RTT的啟動(dòng)函數(shù),主要負(fù)責(zé)板級(jí)驅(qū)動(dòng),調(diào)度器,系統(tǒng)線程初始化,啟動(dòng)調(diào)度的工作
    的頭像 發(fā)表于 06-25 18:24 ?1772次閱讀
    深度剖析 <b class='flag-5'>RT-Thread</b> 線程調(diào)度流程

    揭秘RT-Thread上的AUTOSAR CP系統(tǒng)

    標(biāo)準(zhǔn),同時(shí)保留RT-Thread的POSIX支持與可裁剪性,實(shí)現(xiàn)了通信隔離、診斷模塊集成等關(guān)鍵技術(shù)突破,為車載系統(tǒng)提供高安全、可擴(kuò)展的解決方案。車載電子系統(tǒng)與傳統(tǒng)
    的頭像 發(fā)表于 06-23 20:22 ?3223次閱讀
    揭秘<b class='flag-5'>RT-Thread</b>上的AUTOSAR CP系統(tǒng)

    2025 RT-Thread全球技術(shù)大會(huì)議程正式發(fā)布!

    RT-ThreadGlobalTechConference(RT-ThreadGTC,RT-Thread全球技術(shù)大會(huì))是聚焦基礎(chǔ)軟件技術(shù)創(chuàng)新與實(shí)踐的嵌入式技術(shù)盛會(huì),持續(xù)推動(dòng)技術(shù)價(jià)值轉(zhuǎn)化
    的頭像 發(fā)表于 05-27 19:28 ?1364次閱讀
    2025 <b class='flag-5'>RT-Thread</b>全球技術(shù)大會(huì)議程正式發(fā)布!

    【直播預(yù)告】《實(shí)時(shí)操作系統(tǒng)應(yīng)用技術(shù)—基于RT-Thread與ARM的編程實(shí)踐》教學(xué)脈絡(luò)及資源簡介

    直播預(yù)告直播主題:《實(shí)時(shí)操作系統(tǒng)應(yīng)用技術(shù)—基于RT-Thread與ARM的編程實(shí)踐》教學(xué)脈絡(luò)及資源簡介開放時(shí)間:2025年5月29日(周四)20:00主講老師:王宜懷課程類型:視頻直播觀看平臺(tái)
    的頭像 發(fā)表于 05-26 17:50 ?1264次閱讀
    【直播預(yù)告】《實(shí)時(shí)操作系統(tǒng)應(yīng)用技術(shù)—基于<b class='flag-5'>RT-Thread</b>與ARM的<b class='flag-5'>編程</b>實(shí)踐》教學(xué)脈絡(luò)及資源簡介

    RT-Thread審核團(tuán)招募: 深度參與開源RTOS社區(qū)治理與演進(jìn)

    全球開發(fā)者招募:RT-Thread審核團(tuán)(ReviewTeam)正式開放申請(qǐng)!在開源的世界里,代碼審查(CodeReview)是保證軟件質(zhì)量、促進(jìn)技術(shù)交流的關(guān)鍵環(huán)節(jié)。RT-Thread作為全球領(lǐng)先
    的頭像 發(fā)表于 05-21 18:02 ?1263次閱讀
    <b class='flag-5'>RT-Thread</b>審核團(tuán)招募: 深度參與開源RTOS社區(qū)治理與演進(jìn)