【微控制器】[stm8] - 使用庫函式時,減少ROM佔用的方法
阿新 • • 發佈:2018-11-01
在使用STM微控制器的官方庫函式程式設計時,微控制器的ROM會額外的佔用很多,我現在使用STM8S103時,使用了庫函式,8K的ROM,寫了幾個自己的驅動和應用程式後,記憶體佔用就到了 7800 bytes。但是還有些東西沒有寫完,需要繼續新增。我使用以下兩種方法,將其ROM減少到了 5866 bytes。
MCU:STM8S103K3
開發工具:IAR 2.20
注:
1) 檢視ROM,RAM使用情況的方法:檢視map檔案,檔案末尾。
2) map檔案位置:demo\Debug\List
3) map的產生是需要在編譯器中設定:
Project —> Options… —> Linker —> List —> Genarate linker mapfile
具體方法:
- 不使用庫函式,直接使用暫存器程式設計。
但是這樣程式設計會比較麻煩,到不得已的時候在使用。可以參考原有的庫函式,一步一步的改寫程式。 - 就是註釋掉庫函式中的“assert_param()”函式。
這個函式作用是檢測函式引數的正確性,對程式的功能不會產生實質性的影響,所以這是一種比較好的減少ROM佔用的方法。
我使用了第二種方法,下面是ROM使用前後的對照:
1.沒有註釋掉 “assert_param()” 之前ROM的使用情況:
#if 1
/* Check the parameters */
assert_param(IS_ADC1_CONVERSIONMODE_OK(ADC1_ConversionMode) );
assert_param(IS_ADC1_CHANNEL_OK(ADC1_Channel));
assert_param(IS_ADC1_PRESSEL_OK(ADC1_PrescalerSelection));
assert_param(IS_ADC1_EXTTRIG_OK(ADC1_ExtTrigger));
assert_param(IS_FUNCTIONALSTATE_OK(((ADC1_ExtTriggerState))));
assert_param(IS_ADC1_ALIGN_OK(ADC1_Align));
assert_param(IS_ADC1_SCHMITTTRIG_OK(ADC1_SchmittTriggerChannel) );
assert_param(IS_FUNCTIONALSTATE_OK(ADC1_SchmittTriggerState));
#endif //
ROM使用:6251 bytes, 下面是map檔案的內容
2.註釋後的ROM使用情況:
#if 0
/* Check the parameters */
assert_param(IS_ADC1_CONVERSIONMODE_OK(ADC1_ConversionMode));
assert_param(IS_ADC1_CHANNEL_OK(ADC1_Channel));
assert_param(IS_ADC1_PRESSEL_OK(ADC1_PrescalerSelection));
assert_param(IS_ADC1_EXTTRIG_OK(ADC1_ExtTrigger));
assert_param(IS_FUNCTIONALSTATE_OK(((ADC1_ExtTriggerState))));
assert_param(IS_ADC1_ALIGN_OK(ADC1_Align));
assert_param(IS_ADC1_SCHMITTTRIG_OK(ADC1_SchmittTriggerChannel));
assert_param(IS_FUNCTIONALSTATE_OK(ADC1_SchmittTriggerState));
#endif //
ROM使用情況:5866 bytes, 下面是map檔案的內容
pillar peng
2016.4.27 16:37