博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Keil C编译器的变量存储分配
阅读量:6908 次
发布时间:2019-06-27

本文共 1033 字,大约阅读时间需要 3 分钟。

  • 问题:以下是我编译工程后出现的错误:

      *** ERROR L107: ADDRESS SPACE OVERFLOW

           SPACE:   DATA   
           SEGMENT: _DATA_GROUP_
           LENGTH:  0020H
        Program Size: data=134.3 xdata=226 code=3544

 

  • 问题描述:Data数据段的地址空间溢出,从描述可以知道编译器存储了三块信息: 134字节的数据段,226字节的扩展数据段和3544字节的代码段。

                   当前我所使用的芯片是STC的STC15W408AS。

  • 问题原因:查询STC15W408AS的数据手册不难知道,其存储空间包括256字节的idata和256字节的xdata(内部扩展,非外部扩展)。4k以上的flash用以存储代码。

                        而256byte的idata又可以划分为:1.低128byte的idata为传统的8051ram区

                                                                     2.高128byte的idata为8052扩展的ram区

                                                            

         低128byte又可划分为工作寄存器区,可位寻址区,用户ram区和堆栈区。

                                                                   

                        Keil C编译器一般情况下优先将变量存储在地址范围为30H-7FH的用户ram区。但是当工程中主函数在进行函数调用时,会将当前所使用

                        的变量暂存到堆栈区以在函数返回的时候正常恢复程序的上下文。如果需要暂存的数据量太大,会导致30H到7FH段的存储空间不够用。

  • 解决方法:C51编译器支持Linker Location Controls来实现绝对存储位置的指定,这样可以人为指定变量的存储位置。编译器根据关键字将变量划分到指定的

                       存储位置。方法见MDK的help手册。

struct alarm_st  {  unsigned int alarm_number;  unsigned char enable flag;  unsigned int time_delay;  unsigned char status; };xdata struct alarm_st alarm_control;

                       xdata指定该变量存储在内部扩展ram区,idata指定该变量存储在内部ram的高128byte区。这样可以保证堆栈区有足够的空间来实现程序上下文的切换。

                                                                  

转载于:https://www.cnblogs.com/Crazy-MFJ/p/3853966.html

你可能感兴趣的文章
stat函数
查看>>
rancher中级(一)(rancher的存储,网络)
查看>>
OpenApi开源项目以及总结
查看>>
网络安全重点总结
查看>>
windows下mysql忘记root密码的解决方法
查看>>
hdu 1907 John / 2509 Be the Winner 博弈 最后取完者为输
查看>>
EnumMap 两种使用方式的比较
查看>>
m_Orchestrate learning system---mo系统权限思考(如何实现以及注意什么)
查看>>
private static
查看>>
并发、并行、同步、异步、多线程的区别?
查看>>
GitHub 配置指南
查看>>
Java 读写Properties配置文件
查看>>
delegation
查看>>
JAVA_字节流类
查看>>
C# PDF Writer
查看>>
两两交换链表中的节点
查看>>
PCA(matlab)学习,与记录
查看>>
如何用Beyond Compare设置比较文件夹对齐方式
查看>>
linux TCP客户端指定端口号连接服务端
查看>>
CSS3设置Table奇数行和偶数行样式
查看>>