stm8l的ram與記憶體模型
一、ram空間
在記憶體對映圖上可以看到stm8l的ram劃分為2部分,如下:
2k的ram空間包含513個位元組的stack,經過深入研究發現,其實ram被劃分為:short range、long range、stack這3個部分。如下:
可以在stvd中通過project setting設定上述3部分的大小,具體如下:project->
settings->
linker->
input:
short range空間的最大值是256個位元組,庫函式有時也會占用幾個位元組,因此,在此區定義變數時要特別小心,如果越界,編譯器提示如下錯誤:
#error clnk debug\test.lkf:1 segment .ubsct size overflow (6)
the command: "clnk -m debug\test.map -l"d:\program files\cosmic\lib" -o debug\test.sm8 debug\test.lkf " has failed, the returned value is: 1
exit code=1.
此錯誤說明段.ubsct超出6個位元組,段.ubsct表示在short range記憶體中未初始化的資料。
long range的空間根據需求配置,如果資料大小超出範圍,編譯器提示如下錯誤:
#error clnk debug\test.lkf:1 segment .bss size overflow (1)
the command: "clnk -m debug\test.map -l"d:\program files\cosmic\lib" -o debug\test.sm8 debug\test.lkf " has failed, the returned value is: 1
exit code=1.
此錯誤說明段.bss超出1個位元組,段.bss表示在long range記憶體中未初始化的資料。
stack是從ram的最高位元組開始的,因此stack空間為ram的最高值與long range的最高值之間的差,一方面stack空間不能定義的太小,另一方面,不要定義太大的區域性變數,區域性變數一般存放在stack中。
另外,如果使用long range,還需要修改project->settings->
c compliler中的一項內容,如下:
如果memory models設定為short stack模式,則定址空間只能達到256bytes,此模式下只能使用short range部分,因此如果要使用long range部分,應當設定為long stack模式。
二、記憶體模型
根據**空間的大小,在工程配置中,可以使用不同的模型。對於**空間小於64k的情況,可以使用mods0或modsl0;對於**空間大於64k的情況,可以使用mods或modsl。
1、**空間小於64k
函式指標和資料指標預設使用@near(2bytes)。
1)、mods0:全域性變數預設定義在short range區,可以使用@near把全域性變數顯示定義的long range區。如:
unsigned char dat1[10];//資料存放在short range
@near unsigned char dat2[10];//資料存放在long range
2)、modsl0:全域性變數預設定義在long range區,可以使用@tiny把全域性變數顯示定義在short range區。如:
unsigned char dat1[10];//資料存放在long range
@tiny unsigned char dat2[10];//資料存放在short range
2、**空間大於64k
函式指標預設使用@far(3bytes),資料指標預設使用@near(2bytes),可以使用@far把資料指標顯示設定為3bytes。
1)、mods:全域性變數預設定義在short range區,可以使用@near把全域性變數顯示定義的long range區。如:
unsigned char dat1[10];//資料存放在short range
@near unsigned char dat2[10];//資料存放在long range
2)、modsl:全域性變數預設定義在long range區,可以使用@tiny把全域性變數顯示定義在short range區。如:
unsigned char dat1[10];//資料存放在long range
@tiny unsigned char dat2[10];//資料存放在short range
STM8L之低功耗
1 stm8l有幾個模式?a.非低功耗模式1個,run mode 執行模式 b.低功耗模式 3個 wait 等待模式 active halt 活躍停機模式 halt 停機模式 2 stm8l低功耗的3個模式有什麼區別?簡單地來說,就是 a.wait 等待模式 時鐘關閉 外設可用。通過中斷 外部中斷 ...
STM8L低功耗除錯總結
檢視資料手冊的低功耗特性 low power features 可以了解到,stm8有5種功耗模式,如果讓mcu待機,最低功耗可以達到350na,這是相當的小!5 low power modes wait,low power run 5.1 a low power wait 3 a active h...
stm8s和stm8l低功耗對比
在低功耗應用中,一般來說mcu是常態halt模式,然後偶爾被喚醒 外部中斷或者內部定時喚醒 進入執行模式。所以對比低功耗效能,一般來說只需要對比run模式和halt下的功耗即可,因為專案選用的是通過內部定時器喚醒,所以選用active halt mode。以下是stm8s003和stm8l151在這...