完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
目前我在尝试将结构分配给RAM时遇到问题。
我遇到的问题是我的结构总共占用了373个字节,但编译器/链接器一直试图在零页面中找到这个结构(前256个字节)。为了启用编译,我减小了结构的大小以允许查看映射文件以查看编译器分配此数据的位置。 我试图使用pragma伪指令将此结构分配给@near范围,这将允许RAM空间内的任何位置。这再次给了我一个零页溢出的部分! 为了更进一步,我已经在RAM空间中定义了自己的部分,并且需要大小的内存分配。我已经在零页面之后和.data部分之前直接定位了它。使用绝对寻址和pragma指令我仍然遇到相同的问题,或者,现在我有一个错误,因为已为零页面定义了符号。我已经通过电子邮件发送了Cosmic,但他们似乎并不关心提供支持。有人有任何建议吗? 更新:只是添加一些进一步的信息。 - RAM大小= 1024字节。 - 零页= 256字节。 - 最大堆栈大小为513字节(我的想法是编译器/链接器将根据.data和.bss用法给出最佳大小)。 - 正在使用默认链接器文件,但上述测试部分除外。 #ram #stm8 #cosmic #cosmic-stm8-cosmic-lkf 以上来自于谷歌翻译 以下为原文 Currently I have an issue when trying to allocate a structure to RAM. The issue I have is that my structure occupies a total of 373 bytes but the compiler/linker is insistent on trying to locate this structure in the zero page (first 256 bytes). To enable compilation I have reduced the size of the structure to allow for viewing of the map file to see where the compiler is allocating this data. I have attempted to use the pragma directives to allocate this structure to the @near range, which would allow anywhere within the RAM space. This again gave me a section overflow of the zero page! To go one step further I have defined my own section within the RAM space with the required size memory allocation. I have positioned this directly after the zero page and prior to the .data section. Using absolute addressing and the pragma directives I am still experiencing the same issues, or, now I have an error as the symbol has been defined for the zero page. I have e-mailed Cosmic but they don't seem to care for offering support.Has anyone got any advice? UPDATE: Just to add some further information. - RAM size = 1024 bytes. - Zero Page = 256 bytes. - Max stack size 513 bytes (my thoughts are that this will be given the optimal size by the compiler/linker depending in the .data and .bss usage). - Default linker file is being used, with the exception of the test section described above. #ram #stm8 #cosmic #cosmic-stm8-cosmic-lkf |
|
相关推荐
7个回答
|
|
你好,
为了将您的结构(或任何其他变量)放在@near地址空间中(在页面零之外),您必须为结构指定@near属性或使用默认情况下此属性的内存模型( + modsl0是通常的选择)。 如果这些解决方案似乎都不起作用,请在此处发布您的代码,我会看到它有什么问题(如果他们在支持地址收到您的电子邮件,我也会与同事联系)。 问候, 卢卡 以上来自于谷歌翻译 以下为原文 Hello, in order to put your structure (or any other variable) in the @near address space (out of page zero), you either have to specify the @near attribute for you structure or to use a memory model where this attribute is the default (+modsl0 is the usual choice for this). If neither of these solutions seem to work please post your code here and I'll see what is wrong with it (I will also check with my colleagues if they have received your email on the support address). Regards, Luca |
|
|
|
嗨卢卡,
感谢您的答复!宇宙支持团队的一名成员现在已与我联系。 我试图使用空间修饰符,但是,我返回时出现空格属性冲突错误。类似地,当使用pragma指令时也会发生这种情况。我将介绍修改默认内存模型。 再次感谢, 亚伦 以上来自于谷歌翻译 以下为原文 Hi Luca, Thanks for your response! A member of the Cosmic support team has now been in contact with me. I have tried to use the space modifier, however, I am returned with a space attribute conflict error. Similarly this happens when using the pragma directives also. I will look at modifying the default memory model. Thanks again, Aaron |
|
|
|
我已经修改了默认配置文件以使用堆栈长内存模型并且已经第一次编译并根据需要在.data部分中分配了我的结构!
非常感谢您的帮助! 亚伦 以上来自于谷歌翻译 以下为原文 I have modified the default configuration file to use the stack long memory model and that has compiled first time and allocated my structure in the .data section as desired! Thank you very much for your help! Aaron |
|
|
|
亲爱的亚伦,请你这么好,告诉我你是怎么做到的?
以上来自于谷歌翻译 以下为原文 Dear Aaron, could you please be so kind and tell me how you have done this? |
|
|
|
嗨克劳斯,
在与COSMIC交谈之后,很明显我使用了不正确的内存模型。 在STVD环境中,可以在项目设置 - >下更改内存模型设置。 C编译器 - >内存模型并选择短堆栈。然后在声明结构时我使用了@near标识符。 还有许多其他方法可以做到这一点,例如定义您自己的链接器文件和启动程序。 希望这可以帮助。 以上来自于谷歌翻译 以下为原文 Hi Klaus, After speaking with COSMIC it became apparent that I was using the incorrect memory model. In the STVD environment the memory model settings can be altered under Project Settings -> C Compiler -> Memory Models and select short stack. Then when declaring the structure I have used the @near identifier. There are a number of other ways that this can be done, for example defining your own linker file and start-up program. Hope this helps. |
|
|
|
嗨,亚伦,
是的,它看起来有一些错误的默认值。我这样解决了我的问题: 项目 - >设置 - >链接器 - >输入。 RAM结束值应为0x3FF,但为0x1FF。 然后我使用@tiny和@near属性传播我的变量。 现在面临下一个问题:突然我的常量被放置在0xFFE0到0x10060的地址范围内。闪存STM8S103中不存在这些地址(并且未使用上述设置定义)。 由于地址范围似乎有错误的数据,我在哪里可以找到地址范围的默认定义?这是在.h或.ini文件中,是使用Cosmic还是使用STVD? 谢谢,克劳斯 以上来自于谷歌翻译 以下为原文 Hi Aaron, yes it looks as there are some wrong default values. I solved my problem this way: Project -> Settings -> Linker -> Input. The RAM end value should be 0x3FF, but was 0x1FF. Then I spread my variables using the @tiny and @near attributes. Now facing the next problem: suddenly my constants are placed in the address range 0xFFE0 to 0x10060. These addresses do not exist in the flash STM8S103 (and are not defined with above settings). As there seem to be faulty data for the address ranges, where can I find the default definitions for the address ranges? Is this in .h or .ini files, is it with Cosmic or with STVD? Thanks, Klaus |
|
|
|
克劳斯,
在重新设置RAM空间之前,我建议进一步考虑一下。你的'RAM'没有在正确的地址结束的原因是因为你的堆栈有一个RAM容量,从0x3FF开始,随着项目的增加减少,即在函数调用期间存储变量等时减少。只要您意识到这一点并相应地处理它,那么您应该没有问题。 另外,作为快速说明,您应该阅读相应的编译器文档,以确定是否需要修改链接器文件以及这将对您所需的进程产生什么后果。 为了获得您的地址范围,我将参考正确的数据表。如果您正在使用STM8S003F3,那么就可以找到它 http://www.st.com/content/st_com/en/products/microcontrollers/stm8-8-bit-mcus/stm8s-series/stm8s-value-line/stm8s003f3.html 。希望这可以帮助, 亚伦 以上来自于谷歌翻译 以下为原文 Klaus, I would suggest some further contemplation before redefing your RAM space. The reason your 'RAM' doesn't end at the correct address is because there is an allowance in RAM for your stack which starts at 0x3FF and decrements down as items are added i.e. when you stored variables etc during function calls. As long as you are aware of this and handle it accordingly then you should have no issues. Also, as a quick side note you should read the corresponding compiler documentation to ascertain whether or not you need to modify the linker file and what consequences this will have on your desired process. In order to obtain your address ranges I would refer back to the correct datasheet. Providing you are using the STM8S003F3 then it can be found http://www.st.com/content/st_com/en/products/microcontrollers/stm8-8-bit-mcus/stm8s-series/stm8s-value-line/stm8s003f3.html .Hope this helps, Aaron |
|
|
|
只有小组成员才能发言,加入小组>>
请教:在使用UDE STK时,单片机使用SPC560D30L1,在配置文件怎么设置或选择?里面只有SPC560D40的选项
2515 浏览 1 评论
3178 浏览 1 评论
请问是否有通过UART连接的两个微处理器之间实现双向值交换的方法?
1741 浏览 1 评论
3567 浏览 6 评论
5944 浏览 21 评论
906浏览 4评论
1279浏览 4评论
在Linux上安装Atollic TRUEStudio的步骤有哪些呢?
546浏览 3评论
使用DMA激活某些外设会以导致外设无法工作的方式生成代码是怎么回事
1264浏览 3评论
1321浏览 3评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-10-20 13:48 , Processed in 1.215545 second(s), Total 89, Slave 72 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号