请选择 进入手机版 | 继续访问电脑版

安富莱电子论坛

 找回密码
 立即注册

扫一扫,访问微社区

查看: 7752|回复: 3
收起左侧

STM8S  8k 程序空间不够用的解决方案。安富莱原创

[复制链接]

408

主题

1004

帖子

1825

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1825
发表于 2013-12-26 00:48:18 | 显示全部楼层 |阅读模式
安富莱原创,如转载,请注明本帖网址。

使用 STM8SF103F3P6 设计了一款 RS485接口的LED数码管显示器(文本协议,可按键修改地址)。
代码空间已满8K,已无法增加功能。只有想办法优化代码了。


方法:打开 Project.map 文件,查看哪些文件中的哪些函数占用了大量空间。然后针对这些函数进行优化。

1. 函数中能够用 16位整数的地方 就不要使用 32位整数。 bsp_timer.c 已优化。

2. 固件库中的 UART1_Init() 函数太臃肿(内部用到了32位除法)可以优化。
   不优化时: UART1_Init              0x00825e 0x197  Code  Gb  stm8s_uart1.o [1]    --> 占用 0x197 (407)字节
   其实设置UART1只需要配合如下几个寄存器,可以单步跟踪这个函数,在函数最后通过仿真器读出以下寄存器的值,然后用下面的代码替换掉。
    UART1->CR1 = 0;    <---- 这些值是通过库函数执行完毕后获得的。
    UART1->CR2 = 0x000C;
    UART1->CR3 = 0x0000;
    UART1->BRR1 = 0x0068;
    UART1->BRR2 = 0x0002;

3. stm8s_tim1 占用 624字节,可以优化。 原来是 看门狗模块用到了TIM1校准LSI频率(缺省是128KHz),实际一个板子 129KHz左右,关系不大。
     优化方法:看门狗定时无需非常准确, 因此 bsp_watchdog.c 中直接按128KHz配置看门狗周期即可。此举可省好几百字节。
     bsp_watchdog.c  实现 static void sIWDG_Config(void);

经过以上优化后,剩余空间腾出 : 8192 - 6177 = 2015 字节,可以用来增加 ModeBus RTU 协议了。

  5 070 bytes of readonly  code memory
  1 107 bytes of readonly  data memory
    373 bytes of readwrite data memory
回复

使用道具 举报

0

主题

2

帖子

0

积分

新手上路

积分
0
发表于 2016-7-31 10:48:33 | 显示全部楼层
确实不错,谢谢分享
回复

使用道具 举报

0

主题

3

帖子

0

积分

新手上路

积分
0
发表于 2016-9-24 22:30:12 | 显示全部楼层

Re:STM8S  8k 程序空间不够用的解决方案。安富莱原创

感谢分享!又学一招。
回复

使用道具 举报

0

主题

3

帖子

0

积分

新手上路

积分
0
发表于 2016-9-24 22:33:44 | 显示全部楼层

Re:STM8S  8k 程序空间不够用的解决方案。安富莱原创

刚买了STM8S_EK2开发板,正在学习。以后有不懂的请多多指教。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|手机版|安富莱电子论坛 ( 鄂ICP备09023347号,公安机关备案号42010602000201 )

GMT+8, 2019-4-24 02:09 , Processed in 0.164748 second(s), 23 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表