8246|21

81

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

stm8问题 [复制链接]

请教一下
  我在使用stm8s103k3芯片的时候定义了一个数组后提示:
   #error clnk Debug adiogram.lkf:1 segment .bss size overflow (1)
  我看了一下内存我才用300字节左右,根本没有超出范围,是不是哪里没有设置???
此帖出自stm32/stm8论坛

最新回复

                                 非常感谢 ddmking 和各位高手的耐心讲解!终于搞定了!呵呵!   详情 回复 发表于 2009-7-10 17:56
点赞 关注
 

回复
举报

74

帖子

0

TA的资源

一粒金砂(初级)

沙发
 

把数组长度改小一个字节,让其编译成功,

                                 然后再看.map, 就知道内存分配的情况了
此帖出自stm32/stm8论坛
 
 

回复

66

帖子

0

TA的资源

一粒金砂(初级)

板凳
 

stm8问题

改小我试过了是可以的!下面是.map文件(改后缀.map)
请指教!!!
相关链接:https://bbs.eeworld.com.cn/upfiles/img/20097/200973123235117.rar
此帖出自stm32/stm8论坛
 
 

回复

74

帖子

0

TA的资源

一粒金砂(初级)

4
 

.LKF也要发上来


 
此帖出自stm32/stm8论坛
 
 
 

回复

76

帖子

0

TA的资源

一粒金砂(初级)

5
 

.LKF

麻烦你了,比较急,在线等!!
相关链接:https://bbs.eeworld.com.cn/upfiles/img/20097/20097314425476.rar
此帖出自stm32/stm8论坛
 
 
 

回复

93

帖子

0

TA的资源

一粒金砂(初级)

6
 

可以试试下面方法

.lkf中
+seg .data -b 0x100 -m 0x100 -n .data 
+seg .bss -a .data -n .bss


意思是.data (初始化了的&分配到0页以外的变量)从0X100开始(-b 0x100),最大长度为0X100(-m 0x100 ,即到0X200)
.bss((没有初始化的&分配到0页以外的变量)跟在.data后面(-a .data )长度在.data规定的地址范围之内

你报的错:segment .bss size overflow (1),所以,你可以把-m 0x100改大一点,比如-m 0x130.

同时要注意这么做的风险: 你的STACK的可用范围变小了(从0x200~0x3FF 变成c从0x230到0x3FF). 但你如果没有中断嵌套以及没有很深的程序嵌套以及没有在一个函数内部有超多的变量或函数参数,(这些都是要占用堆栈的),就没事

同时从你的.MAP中,可以看到,
start 00000009 end 0000005e length    85 segment .ubsct
start 00005e:0 end 000063:5 length    45 segment .bit, initialized
在0xff以内,0x64~0xff是没有分配变量的,如果还有变量需要分配,可以放在这里.

此帖出自stm32/stm8论坛
 
 
 

回复

73

帖子

0

TA的资源

一粒金砂(初级)

7
 

感谢 汉之云

我也大概理解你说的意思!
  这颗芯片RAM是1K的RAM 堆栈默认就占去512字节
  现在您的意思是把堆栈改小,空出更多的内存供程序使用,
  但我应该在那改堆栈大小呢!在.lkf里直接改吗?
此帖出自stm32/stm8论坛
 
 
 

回复

72

帖子

0

TA的资源

一粒金砂(初级)

8
 

可以在STVD 的IDE里改

project - setting - linker -category(input)
把Ram的空间改大一些
此帖出自stm32/stm8论坛
 
 
 

回复

81

帖子

0

TA的资源

一粒金砂(初级)

9
 

STVP中有一个配置窗口可以配置的

包括6楼说的修改lkf文件和堆栈的大小。

我手头没有安装STVP,不记得在哪个菜单下,你可以找找,应该很容易找到,我以前曾经贴过这样的图片如下:
此帖出自stm32/stm8论坛
 
 
 

回复

68

帖子

0

TA的资源

一粒金砂(初级)

10
 

感谢 香水城 汉之云

现在可以了!呵呵!!非常感谢!
此帖出自stm32/stm8论坛
 
 
 

回复

65

帖子

0

TA的资源

一粒金砂(初级)

11
 

追问一个问题


同时从你的.MAP中,可以看到,
start 00000009 end 0000005e length    85 segment .ubsct
start 00005e:0 end 000063:5 length    45 segment .bit, initialized
在0xff以内,0x64~0xff是没有分配变量的,如果还有变量需要分配,可以放在这里.
 
上面这段话我不是很理解?????内存这段地址怎么会空起来??
还有就是从0x00--0x100这段地址编译器为什么不能自动分配使用???
 
此帖出自stm32/stm8论坛
 
 
 

回复

90

帖子

0

TA的资源

一粒金砂(初级)

12
 

在STM8中,操作0x00~0xff这段地址的指令有更高的效率

从8、9楼贴出的图你可以看出,Ram与Zero Page是分开为2个不同的区段。

操作0x00~0xff这段地址内数据的指令,比操作其它地址的指令有更高的效率,同时位操作指令只能处理在0x00~0xff这段地址中的数据,所以一般编译器会把经常用到的数据(如局部变量等)分配到这个区间,如果用户自己需要用到这个区间,则需要特别指定。

我还没有时间玩这个STM8,没有仔细研究如何把变量特别指定分配到这个区间,但我想发布的例程中应该有对应的操作,你可以按照.map的指示找找。

比如在你给出的.map中,有这么一行:
_WirelessTxFram             0000003f   defined in Debugmain.o section .ubsct
这表示WirelessTxFram这个变量被分配到0x3f这个地址,这个变量出现在main.c中。
此帖出自stm32/stm8论坛
 
 
 

回复

82

帖子

0

TA的资源

一粒金砂(初级)

13
 

谢谢 香水城

                                 谢谢香主耐心讲解!!!长见识了!!
此帖出自stm32/stm8论坛
 
 
 

回复

68

帖子

0

TA的资源

一粒金砂(中级)

14
 

又有问题请教

 你们好!我有有问题请教了:
 我在写EEPROM的时候字节写没问题,但一次要写字节多了我想采用块写(提高速度),(块大小为64字节)现在就是块写怎么也写不进去!!我的思路是这样的!
   初始化的时候我定义了两个64字节数组,一个在RAM里一个在EEPROM里;
                  uchar   @near   ueeprom[64] @ 0x4000 ; 
                  uchar   @near   AACS140xreadData[64] ;
  然后设置为块写模式
                   FLASH_CR2  |= 1;                
         FLASH_NCR2 &= (uchar)~(1<<0); 
 接下来开些eeprom 锁
                   FLASH_DUKR = FLASH_RASS_KEY2;   
              FLASH_DUKR = FLASH_RASS_KEY1;     
  最后把AACS140xreadData数据一次往eeprom写64字节 
        for(i=0;i<64;i++)
        {
                ueeprom = AACS140xreadData
        }
现在运行这段程序就死机了!我不知道我那里写错了??块写应该怎么写???请指点!!!
此帖出自stm32/stm8论坛
 
 
 

回复

70

帖子

0

TA的资源

一粒金砂(初级)

15
 

自己顶!!!!!

                                 高手请指教
此帖出自stm32/stm8论坛
 
 
 

回复

72

帖子

0

TA的资源

一粒金砂(初级)

16
 

自己顶

                                 高手在哪??都没人用过吗??
此帖出自stm32/stm8论坛
 
 
 

回复

81

帖子

0

TA的资源

一粒金砂(初级)

17
 

要放在RAM里运行

STM8的参考手册里面
  In DATA area
–     Devices with RWW capability: DATA block operations can be executed from main program memory. However the data loading phase (see below) has to be executed from RAM.
            ~~~~~~~~~~~~~~~~~~~~~~~~~~~           
–     Devices without RWW capability: block program operations must be executed totally from RAM. 
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
此帖出自stm32/stm8论坛
 
 
 

回复

76

帖子

0

TA的资源

一粒金砂(初级)

18
 

具体怎么操作呢??

具体怎么操作呢??
有没有例程参考??
此帖出自stm32/stm8论坛
 
 
 

回复

73

帖子

0

TA的资源

一粒金砂(高级)

19
 

ram定义

                                 是在Ram里添加一个“eeprom_pg” section, 加上-ic.
此帖出自stm32/stm8论坛
 
 
 

回复

83

帖子

0

TA的资源

一粒金砂(中级)

20
 

0x00-0xff分配到哪去了

zero page溢出,但又不知道分配到哪去了:
#error clnk Debugsc_demo.lkf:1 segment .ubsct size overflow (296)
此帖出自stm32/stm8论坛
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/7 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表