STM8L的RAM與記憶體模型

2021-06-19 19:16:21 字數 2644 閱讀 5632

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在這...