STM8全局变量溢出问题解决

1、变量存储空间结构

STM8S105系列CPU的RAM地址范围为0~0x7FF的2K空间,其中默认将高512字节分配给堆栈,剩下0~0x5FF字节为变量存储空间 。在0~0x5FF的空间范围内,低256字节被定义为Zero page,其中包括.bsct,.ubsct,.bit,.share,各段的含义如下:

可见, 当segment .ubsct overflow错误出现时, 应该是低0~FF段空间出现溢出

cosmic默认将所有变量存储在zero page段, 如要将变量置于0x100~0x5FF的空间里, 需要将变量前添加@near的申明, 如同idata的功能

通常将所有全局变量都加上@near申明, 以放置在zero page外的存储空间


ir.lkf

# Segment Zero Page:
+seg .bsct -b 0x0 -m 0x2f -n .bsct
+seg .ubsct -a .bsct -n .ubsct
+seg .bit -a .ubsct -n .bit -id
+seg .share -a .bit -n .share -is
# Segment Ram:
+seg .data -b 0x2f -m 0x600 -n .data
+seg .bss -a .data -n .bss


@加上@near表示放在0x2f-0x600之间。

不加上@near表示放在0x00-0x2f之间。

# Object files list - section reserved for STVD
#<BEGIN OBJECT_FILES>
 Debug\alloter.o
 Debug\comfunc.o
 Debug\dev_ctrl.o
 Debug\smart_plc.o
 Debug\protocol.o
 Debug\update.o
 Debug\main.o
 Debug\stm8s_flash.o
 Debug\stm8s_tim1.o
 Debug\stm8s_tim3.o
 Debug\stm8s_tim4.o
 Debug\stm8s_rst.o
 Debug\stm8s_adc1.o
 Debug\encode.o
 Debug\task.o
 Debug\state_synchronization.o
#<END OBJECT_FILES>

需要编译的文件放在上面

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值