【单片机】[stm8] - 使用库函数时,减少ROM占用的方法

1 篇文章 0 订阅

在使用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

具体方法:

  1. 不使用库函数,直接使用寄存器编程。
    但是这样编程会比较麻烦,到不得已的时候在使用。可以参考原有的库函数,一步一步的改写程序。
  2. 就是注释掉库函数中的“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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

PillarPeng

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值