rt thread Env 預處理配置方法

2022-09-06 21:48:20 字數 1563 閱讀 3507

rt-thread 是我非常喜歡的一款rtos,近期在使用env更新工程的時候發現,keil mdk 中的預處理型號和器件型號不符。

這就導致我每次更新工程後都需要進入keil mdk手動修改一下。這顯然是乙個無聊的操作,於是有了這篇隨筆。

實際上如果你系統,仔細的學習完rtt官方的一些資料,其實該問題的解決辦法非常簡單。在此,我僅使用該問題展示一下解決該類問題的思路。

我的mcu為f405,於是我選擇了乙個f405的bsp模板進行開發。但是,當env更新完工程後,keil mdk中的預處理總是寫著 stm32f407xx。

我的第一想法是修改 keil mdk的模板,如下:

但是env更新工程後,還是被修改成了 stm32f407xx。

於是,我就知道不是模板這裡能改的,可能是定義在某處,然後env讀取並填入。這種猜測並不是因為我解決了該問題才知道,而是往往該類引數都是以字段(字串)等明文方式定義的。

猜測有了, 接下來就需要借助工具來搜尋一下哪些檔案中含有 stm32f407xx, clk_tck=rt_tick_等字串。

這裡我使用的是 [fileseek](download • fileseek by binary fortress software) , 經過查詢,結果如下:

經過一番檢視,最終在 **sconscript **檔案中發現這個欄位很 ''可疑''。然後我們使用文字工具開啟該檔案進行檢視。

將stm32f407xx 改成 stm32f405xx, 進入env 更新工程。 然後 keil mdk 中再檢視,發現我們修改對了!!

這裡我們可以初步知道,cppdefines 對應了 keil mdk 的預處理定義。

為了驗證該猜測,我們繼續使用 [fileseek](download • fileseek by binary fortress software) 搜尋 rt_using_arm_libc 關鍵(它也是keil mdk預處理中已有的定義)。

發現如下:

這下就坐實了我們的猜測。至此,該問題已經解決。

這算是乙個逆向解決問題的方法,由此,我們可以反過來去搜尋一下 cppdefines 的作用,做乙個全面的了解,學習。這裡不在贅述。

程式開發中我們每天都在面對各種各樣的問題。無論是新手還是老鳥,無一例外的每天都在解決著五花八門的問題。在大部分情況下其實我們很難對乙個系統或者專案的細節面面俱到,特別是在專案**量逐漸增大的今天。我們應該善於思考,勤於思考,用智慧型去解決問題,而不是盲目亂試。

c 預處理和預處理命令

預處理發生在編譯之前,預處理輸出的是乙個單一的檔案,這個檔案被送到編譯器,進行編譯。每條預處理命令都控制預處理器的行為。每條預處理命令佔據一行,有以下的格式 character 預處理命令 one of define,undef,include,if,ifdef,ifndef,else,elif,e...

mysql 預處理語句 in MySQL預處理語句

預製語句的sql語法基於三個sql語句 prepare stmt name from preparable stmt execute stmt name using var name var name prepare stmt name prepare語句用於預備乙個語句,並賦予它名稱stmt na...

mysql 預處理 PHP MySQL 預處理語句

php mysql 預處理語句 預處理語句對於防止 mysql 注入是非常有用的。預處理語句及繫結引數 預處理語句用於執行多個相同的 sql 語句,並且執行效率更高。預處理語句的工作原理如下 預處理 建立 sql 語句模板併發送到資料庫。預留的值使用引數 標記 例如 insert into mygu...