1. 程式人生 > >學習stm32過程中遇到的問題(還有部分是Altium Designer)

學習stm32過程中遇到的問題(還有部分是Altium Designer)

問題:在註釋遇到意外的檔案結束

注意事項:很多帶“_s”字尾的函式是為了讓原版函式更安全,傳入一個和引數有關的大小值,避免引用到不存在的元素,有時黑客可以利用原版的不安全性黑掉系統。比如:char d[20];寫成scanf_s("%s",d,20);才是正確的,有這個引數20使準確性提高。

Altium Designer 中在PCB環境下怎麼一次性修改元件標號字型大小?

同時按shift+f鍵----出現十字架後---點選你要改變的元件---出現對話方塊------把component comment-後的ANY改為same點選確定----出現PCB inspector後找到Text Hight和Text Wideth 直接更改後面值的大小即可

altium designer怎麼調節原理圖和pcb紙張大小

原理圖:單擊右鍵——options——document options——standard styles中選E,E是最大的,不過列印的時候沒有E大小的紙張,C紙張倒是可以列印的

PCB:在英文狀態下按數字1(帶感嘆號的那個)——Design——Redefine Board Shape——螢幕變綠——用滑鼠畫出你要的大小——按數字鍵2退出

PCB設計規則的匯入匯出

首頁

在Altium Designer軟體中怎樣隱藏電氣連線線

在Altium Designer中畫PCB時隱藏電氣連線線可以讓整體佈局顯得不是那麼的雜亂無章,在一定程度上方便佈線,具體方法如下: 1)使用快捷鍵 L 調出檢視設定視窗; 2)找到右側System Colors 一欄; 3)找到Default Color For New Nets,將後面的勾去掉。 確定後電氣連線線就會隱藏,如果想取消隱藏請按照同樣的順序勾選就可以了。 分享Altium PCB佈局時快速擺放元件的技巧

Keil.STM32F1xx_DFP.1.0.5 Cannot copy PDSC file to ".Download"folder的解決之道

Keil_v5的安裝盤的安全屬性改為完全控制,在安裝就可以了。

Opencv

FCARM - Output Name not specified, please check 'Options for Target - Utilities'解決方法

沒有指定輸出名稱,請檢查“選擇目標域

FCARM,是個打包程式,把各種不是.c檔案但內含c程式的東西轉成.c檔案,正常是用不到的,所以一般專案的編譯器都未設定它的輸出,所以意外使用,它就報錯. RL-ARM的指導手冊HTTP那一章,有講FCARM工具的用法 

看看新增的lib檔案是不是 lib字尾名,或者說編譯器是否把它識別為lib檔案,

往專案管理器新增檔案的時候,檔案型別是不是手滑 選成了Image file,然後剛好 你要的檔案又顯示了出來?

//仔細檢視新增的檔案,在property中應該是把C source file新增為image file(映象檔案)了

(下拉.c, 選擇.s 一類的即可)

在C語言中為什麼很多被調函式之前要加void?

一個函式如果這樣定義:f(int x)這說明沒定義返回值,預設是可以返回int的,當然,如果f函式中沒有return語句,那麼會返回一個亂七八糟的整數,這樣不利於編譯器識別錯誤,比如說你有這樣一個語句a=f(1)編譯器就識別不出來錯誤的,仍然認為你是對的 但如果你寫成void f(int x)那麼就告訴編譯器這個函式禁止有返回值,那麼你寫a=f(1)的時候編譯器就知道這是錯的,然後提示你 因此,沒有返回值的函式要用void,這是好的習慣(雖然不用也不出錯)

用keil4編譯提示 warning: #1-D: last line of file ends without a new

最後一行回車後還要保證是在第一列,新一行不能有空格等空字元才能不出此警告

STM32程式中,vu32 n=2000000;

volatile unsigned long n = 2000000; 使用volatile宣告變數值的時候,系統總是重新從它所在的記憶體讀取資料,即使它前面的指令剛剛從該處讀取過資料。精確地說就是,遇到這個關鍵字宣告的變數,編譯器對訪問該變數的程式碼就不再進行優化,從而可以提供對特殊地址的穩定訪問;

XXX.axf: Error: L6218E: Undefined symbol xxx (referred from xxxx.o)

MKD 報錯:

  linking... LCD.axf: Error: L6218E: Undefined symbol EnZK (referred from ht128x64.o). LCD.axf: Error: L6218E: Undefined symbol GetFlashCnBuf (referred from ht128x64.o).

解析:Undefined symbol EnZK,翻譯過來就是:EnZK 這個符號沒有定義,隨後的小括號告訴你了,是在 ht128x64.o 這個檔案裡面被提及的,這個.o檔案在工程裡面並沒有,它是一個在編譯的時候根據.c/.s檔案生成的。所以我們只需要找到工程裡面的.s或者.c即可,這裡對應這個名字的就是 ht128x64.c 了。

因為ht128x64.c檔案中呼叫了EnZK沒有定義,解決辦法:(1)在外部.c檔案中定義EnZK;

  (2) 把ht128x64.c檔案中關於EnZK的部分註釋掉;

led_blink.axf: Error: L6218E: Undefined symbol SystemInit (referred from startup_stm32f0xx.o).

     此問題錯誤提示已經十分清楚的告訴你錯在哪裡了,Undefined symbol SystemInit ,翻譯過來就是:SystemInit 這個符號沒有定義,隨後的小括號告訴你了,是在 startup_stm32f0xx.o 這個檔案裡面被提及的,這個.o檔案在工程裡面並沒有,它是一個在編譯的時候根據.c/.s檔案生成的。所以我們只需要找到工程裡面的.s或者.c即可,這裡對應這個名字的就是 startup_stm32f0xx.s了。

   在此檔案裡面可以找到SystemInit的所在:

Reset_Handler    PROC

                 EXPORT  Reset_Handler             [WEAK]

     IMPORT  __main

     IMPORT  SystemInit

                 LDR     R0, =SystemInit

                 BLX     R0

                 LDR     R0, =__main

                 BX      R0

                 ENDP

   原來在復位中斷服務函式裡面,呼叫了SystemInit這個函式,而這個函式在.s檔案裡面沒有定義。

   所以解決的辦法有兩個。

   1,在外部(其他任何.c檔案裡面)定義SystemInit這個函式,哪怕是個空函式也可以。

   2,把   

           IMPORT  SystemInit              

                 LDR     R0, =SystemInit

                 BLX     R0

      這三句話註釋掉。

SystemInit 是在使用main前做一些初始化工作,如果不需要官方的庫,只是自己編寫一些簡單的應用,則可以把此函式禁掉。譬如建立工程時直接加入s檔案,剩下的自己簡單程式設計,此時就不要SystemInit。

error:  #268: declaration may not appear after executable statement in block

 error: #268: declaratio

目錄

​ ​

n may not appear after executable statement in block uint8_t *pTxBuf = tx_buf; error: #268: declaration may not appear after executable statement in block uint16_t data_len = 6+len;

解決辦法:變數宣告不允許出現在語句之後.這種在語句之後宣告變數的方式,c++允許,現在的很多c編譯器也允許。 最早的c是不許這麼寫的,要求所有的區域性變數必須在函式開頭宣告。 把uint8_t *pTxBuf = tx_buf;uint16_t data_len = 6+len;這兩行移到函式最開

error: #5: cannot open source input file "core_cm4.h": No such file or directory