历史上的今天
返回首页

历史上的今天

今天是:2025年04月06日(星期日)

2020年04月06日 | STM8+STVD+COSMIC 学习笔记 address is out of range and is ignored

2020-04-06 来源:eefocus

在连续整了一个下午,一个晚上,又一个上午之后终于可以用STVD调试了!以此来纪念一下。


单片机时STM8AF5189,工程是人家编译好的,结果拿到手里编译后发现s19文件变大了不少,而且里面的地址出现了一些0x0000开始的地址,正常情况下应该是从0x8080开始才对,最开始的感觉就是编译器配置问题,在改了若干项配置,包括优化等等,还是不能仿真,debug时提示swim communication error,在排除了硬件问题之后,感觉是软件问题。经历了长时间折腾后打算用IAR,结果换用IAR问题又是一大堆。无奈又回头折腾STVD,偶然的发现,可能是c编译器的问题,也就是COSMIC的问题,当时用的是从网上下的一个,没注意有代码限制。后来从网上找到一款切实不错的COSMIC,安装完成后,打上补丁,可以debug了,s19文件里的地址也正常了。


下载地址:链接:http://pan.baidu.com/s/1hrK4iyw 密码:j5z8


在此继续杂记一些东西。


STM8AF5189,LQFP64封装有CAN,64K flash,4096B RAM,2048B EEPROM,供电3-5.5v。http://www.lierda.com/product/id/149/show.html


很多人选用STVD+COSMIC做为stm8 系列MCU产品开发的IDE,在编译调试过程中常常遇到些问题。这里我稍加整理,分享几个硬件线路和软件语法以外的话题。抛砖引玉,细节请自行研究相关手册。


一、零页内存区出界溢出的问题。


对于这个问题一般会提诸如bsct/ubsct size overflow……

这个提示告知默认的零页区放不下现有全局变量或静态变量,导致溢出。这里的RAM零页数据区,即00-0xff区域。至于BSCT/UBSCT是什么意思在COSMIC 编译手册里有讲。关于各STM8芯片的存储分配请看数据手册里的MEMORY MAP.

上面截图来自于COSMIC 里的编译手册里的相关描述。

上面截图来自于STVD+COSMIC 编译环境的相关配置页面。


解决这个问题比较简洁的办法有两种:


1、把大部分全局变量或静态变量前冠以@near, 保留部分使用频繁的数据在零页区;

上面截图来自于COSMIC 里的编译手册里存储模式的相关描述。


2、 在编译配置那里将堆栈模式改为长堆栈模式,数据默认放在0x100以上的区域,把需要放在0页区的变量前冠以@TINY。操作如下图所示。

二、数据存储区溢出话题。


数据存储区溢出是指除了堆栈的以外的RAM空间不足以存放现有全局变量或静态变量。一般有诸如.DATA/.BSS size overflow的提示。

如下图,红色RAM空间存放各种全局变量或静态变量,灰色区用作堆栈。

上面截图来自于STM8S参考手册里的相关描述。


假设现有变量数据不能压缩精简,那就尝试将堆栈区域压缩。比方将下图中的0x1ff改为0x2ff,具体改多少要结合你实际应用和芯片本身RAM空间大小,满足需求就好。当然如果RAM空间跟你实际需求相差甚远,自然得想别的办法了。

顺便提下,STM8的堆栈是向下生长的,或者是从高位地址往低位地址压入数据的。起始栈顶一般默认为RAM最大地址处。


三、一个跟程序代码编译优化有关的话题


ST官方也为STM8各系列提供了参考标准外设固件库,里面有大量的外设操作库函数。在利用库函数编程时,有时会发现并没有写几句代码,结果生成的目标文件很大,明显不太正常。这个可能在C Compiler的优化那个地方选择不合适,要打开SPLIT选项。


下面有两幅图,找了个简单例程测试下。main()里就一个GPIO读端口,外加TIM1 的默认设置函数和配置函数。


没打开SPLIT选项时,生成的程序代码为4965 Byte,打开SPLIT选项后生成的程序代码是548 Byte,二者的常量代码均为124 Byte。很明显,开与不开相差甚远。

上图是优化配置里的SPLIT项关闭时的情形。

上图是优化配置里的SPLIT项打开时的情形。



注:


1、关于SPLIT选项的说明,COSMIC手册里有描述。


2、开与不开SPLIT项的机器码文件大小差别也得看你具体调用的库函数和实际应用,并非总是跟上面的例子那样悬殊。



四、中断矢量文件话题。


一般来说,不论你自己新建工程还是利用ST官方库的模板建立工程,项目里总会自动生成一个中断矢量文件 stm8_interrupt_vector.c。这里面其实就是放的一个常量表,即STM8芯片各个中断矢量的入口地址。

有的人希望使用自己的中端矢量名字,想把这个stm8_interrupt_vector.c拿掉,比方说改换为vector.c 。发现怎么改都不行。每次改完编译,stm8_interrupt_vector.c如幽灵般的又回来了。


其实,这里是可以修改的,但要LINKER 配置的那个地方同步修改,就像下方图示那样。好奇的话可以去试试。

另外,不建议在这个矢量文件里写中断函数或其它函数,不然有时可能会出现些让你找不着北的奇怪问题。


五、断言函数出错提示问题。


这个问题一般是刚接触STM8开发的人使用库过程中才遇到的。他把main.c里的void assert_failed(uint8_t* file, uint32_t line) 函数体删掉了导致的。


一般出错时有如下提示:

这个函数作什么用就不用解释了,建议你先不要急于删它。不想要时,就在stm8s_conf.h文件里把#define USE_FULL_ASSERT (1)注释后即可删除相关代码。

推荐阅读

史海拾趣

Apx-Crystal公司的发展小趣事

面对日益激烈的市场竞争,Apx-Crystal公司意识到单凭自身的力量难以保持长期的竞争优势。于是,公司积极寻求与行业内外的合作伙伴进行技术交流和合作研发。通过与知名高校、科研机构以及同行的紧密合作,Apx-Crystal成功开发出了一系列具有创新性和领先性的电子产品,进一步巩固了其在行业内的领先地位。同时,公司还加大了对产业链的整合力度,推动了产业升级和可持续发展。

Defense Logistics Agency公司的发展小趣事

面对日益复杂的军事需求和快速发展的技术环境,DLA积极推进技术创新和数字化转型。通过引入云计算、大数据、人工智能等先进技术,DLA实现了对全球供应链的实时监控和智能调度,大大提高了后勤保障的效率和准确性。同时,DLA还加强了对新型军事装备的研发和保障能力,确保美军在现代化战争中保持领先地位。

Dexter Research Center Inc公司的发展小趣事

Dexter始终将技术创新作为企业发展的核心动力。公司不断投入研发资源,推动传感器技术的创新和发展。通过与高校、研究机构的合作,Dexter成功引入了多项新技术、新材料,并将其应用于产品中。这些创新产品不仅提高了传感器的性能和精度,还拓展了其应用领域。Dexter的创新精神引领了行业的发展方向,使其成为了行业的佼佼者。

CMOSIS公司的发展小趣事

随着CMOS图像传感器在智能手机、安防监控、汽车等领域的广泛应用,CMOSIS公司看到了巨大的市场潜力。公司加大了市场拓展力度,不仅在国内市场取得了显著成绩,还积极开拓海外市场。同时,公司注重品牌建设,通过提升产品质量、加强售后服务等方式,树立了良好的企业形象和口碑。

CHENMKO公司的发展小趣事

在追求经济效益的同时,CMOSIS公司也注重可持续发展和社会责任。公司积极采用环保材料和工艺,减少生产过程中的能源消耗和废弃物排放。同时,公司还积极参与社会公益活动,为推动社会进步和可持续发展贡献自己的力量。这些举措不仅提升了公司的社会形象,也为公司的长期发展奠定了坚实的基础。

请注意,以上故事是基于一般性的电子行业发展趋势和CMOS图像传感器市场的特点构建的,并未涉及CMOSIS公司的具体内部情况。如果需要更详细和准确的信息,建议直接查阅CMOSIS公司的官方资料或相关新闻报道。

AC Interface Inc公司的发展小趣事

ABC Electronics Inc. 起初是一家小型电子元件供应商,专注于为本地市场提供基本的电子零部件。然而,随着技术的快速发展,公司创始人意识到,只有不断创新才能在竞争激烈的市场中立足。于是,ABC Electronics 开始投入大量资源研发具有竞争力的新产品。经过数年的努力,公司成功推出了一款具有高效能、低能耗特点的电源管理芯片,迅速获得了市场的认可。这一创新产品不仅为公司带来了可观的利润,也奠定了其在电子行业的技术领先地位。

问答坊 | AI 解惑

信号的反射问题

信号在传输线上传输时,若遇到阻抗不连续的情况,就会发生信号的反射现象. 我想知道信号是怎样反射的,为什么在阻抗不匹配时就会发生反射现象?有哪些解决措施? :( …

查看全部问答>

Android编译环境(1) - 编译Native C的helloworld模块 ZT

Android编译环境本身比较复杂,且不像普通的编译环境:只有顶层目录下才有Makefile文件,而其他的每个component都使用统一标准的Android.mk. Android.mk文件本身是比较简单的,不过它并不是我们熟悉的Makefile,而是经过了Android自身编译系统的很 ...…

查看全部问答>

别傻了(9):能力强就可以高枕无忧

你的能力并不能确保你的安全 很多公司在招聘员工或对外宣传时说我们公司注重员工的能力,提倡员工能发挥自己的主观能动性 (确实有一些公司是提倡创新的,但是极少数,大部分都只是打打口号而已)。对于刚入职的员工来说可能都会有一种心理,那就 ...…

查看全部问答>

求大虾按图给个元件列表

要做个充电器,不知道与充电芯片相连的元件的参数.还有接口要接MICROUSB,有四条线,地线、读数据线、写数据线、+5V线 ,就直接把OUT接在5V线上就可以了贝? …

查看全部问答>

pcc中如何实现用ie打开不同格式的文件?

比如在IE中点击一个avi文件的链接,自动就会启动mediaplayer来播放,如果点击一个bt文件的链接,自动就会启动bt程序来下载,这个过程如何实现?需要用到哪些技术?请高手指点 …

查看全部问答>

初学嵌入式软件开发,不知道该从那些方面入手,有经验的可否提供一些建议?

我是学软件工程的,专业方向选的是嵌入式方向,现在课程比较少 我想先找点书看,可不知道该看什么样的书,大家可否给点意见?…

查看全部问答>

LCD 显示不正常

大家好 我问个问题: 我用STM32的LCD例程  修改下 在FPGA板子上跑起来 遇到的几个问题如下: 1、初始化后 花屏 2、清屏 不能清白色 其他颜色可以 3、 字符显示不正常 会出现乱码 请问 有谁遇到过类似问题吗…

查看全部问答>

自助借还书机(ZT2000)

感创ZT2000自动借还书设备是通过与图书馆自动化系统数据相连接,由读者自行借还馆内图书资料;帮助图书馆在有限的人力资源条件下,增进图书流通速率、简化借还流程,进而提高图书馆从业人员工作效率及服务品质的一种自助设备。 该自助借还书设备 ...…

查看全部问答>

索尼要裁员1万,日本电子制造业出了啥问题?

传索尼最早将在今年年底前全球裁员1万人,约占雇员总数的6%。这家公司一直是日系企业的中间代表,大家知道日系企业的一大特点就是不到万不得已是尽量不裁员,号召企业与员工共同成长,这比中国的国企还国企。究竟日本电子企业出什么问题了,本人不 ...…

查看全部问答>