STM32筆試題筆記

2022-09-11 12:36:14 字數 1091 閱讀 9597

例如唯讀的狀態暫存器。它是volatile因為它可能被意想不到地改變。它是const因為程式不應該試圖去修改它。

乙個定義為volatile的變數是說這變數可能會被意想不到地改變,這樣,編譯器就不會去假設這個變數的值了。

精確地說就是,優化器在用到這個變數時必須每次都小心地重新讀取這個變數的值,而不是使用儲存在暫存器裡的備份。

volatile修飾符告訴complier變數值可以以任何不被程式明確指明的方式改變,最常見的例子就是外部埠的值,

它的變化可以不用程式內的任何賦值語句就有可能改變的,這種變數就可以用volatile來修飾,complier不會優化掉它。

const修飾的變數在程式裡面是不能改變的,但是可以被程式外的東西修改,就象上面說的外部埠的值,

如果僅僅使用const,有可能編譯器會優化掉這些變數,加上volatile就萬無一失了。

#include int main (void)

報錯如下:

error: multiple storage classes in declaration of `i'

error: invalid register name for 'i'

-->宣告「 i」時有多個儲存類

register和static關鍵字如下解釋:

register修飾的變數,將該變數盡可能存放在cpu中的暫存器中。可省去cpu從記憶體抓取資料的時間,提高了執行效率。

register使用時注意事項:

(1):只能修飾區域性變數,不能修飾全域性變數。不能修飾函式。

(3):只能修飾cpu能接收的資料型別。意味著暫存器變數是一單個變數,變數長度應該小於暫存器長度。

static修飾的變數儲存在記憶體中全域性資料區中的靜態區;修飾區域性變數,延長區域性變數的生命週期,生命週期直到整個程式執行結束,

但是不改變區域性變數的作用域。修飾全域性變數和函式,改變全域性變數和函式的作用域。

static的作用:

總結:register和static不能一起使用修飾乙個變數,相當於定義了乙個變數在兩個區域(記憶體和cpu暫存器中)

STM32筆記記錄

串列埠記錄 stm32有好幾個串列埠。比如說stm32f103zet6有5個串列埠,串列埠1的引腳對應的io為pa9,pa10.pa9,pa10預設功能是gpio,所以當pa9,pa10引腳作為串列埠1的tx,rx引腳使用的時候,那就是埠復用。復用埠初始化有幾個步驟 1 gpio埠時鐘使能。要使用到...

STM32筆記 ADC DMA方式

adc流程,首先adc採集乙個訊號 訊號範圍大都為0 3.3v,ps 3.3v可通過更改vref暫存器修改 每隔相同時間菜一次數值傳送到乙個可變16位數中,下面是我們的陣列定義 io uint16 t adc convertedvalue 定義該16位數用來傳輸資料,原因是我們使用的12位ad,由於...

STM32筆記 SPI通訊

相對於上次說的iic,這次我們來回憶一下spi,之前並沒有過多深入了解spi協議,所以這次再來記錄一下,首先附上資料裡的spi定義 spi,是英語 serial peripheral inte ce 的縮寫,顧名思義就是序列外圍裝置介面。spi,是一種高速的,全雙工,同步的通訊匯流排,並且在晶元的管...