登录 免费注册 首页 | 行业黑名单 | 帮助
维库电子市场网
技术交流 | 电路欣赏 | 工控天地 | 数字广电 | 通信技术 | 电源技术 | 测控之家 | EMC技术 | ARM技术 | EDA技术 | PCB技术 | 嵌入式系统
驱动编程 | 集成电路 | 器件替换 | 模拟技术 | 新手园地 | 单 片 机 | DSP技术 | MCU技术 | IC 设计 | IC 产业 | CAN-bus/DeviceNe

我的程序空间怎么没有data和idata区呢?

作者:wxjia2004 栏目:单片机
我的程序空间怎么没有data和idata区呢?
我写的一个程序,我看了一下mp文件,发觉里面根本就没有idata和data区域?
是不是data区是包含只用在底层汇编中的全局,静态变量。而bss区是包含c语言里面用到的变量?


mp文件如下:

NOTE: AVR Code addresses are word addresses
All other addresses (including ones in FLASH) are byte addresses

Area                               Addr   Size   Decimal Bytes (Attributes)
--------------------------------   ----   ----   ------- ----- ------------
                            text   0054   3AC0 =  15040. bytes (rel,con,rom)

       Addr  GLOBAL Symbol
      -----  --------------------------------
       002A  __text_start
       002A  __start
       004A  _exit
       004B  _Delay_1ms
       0051  _Delay_ms
       0060  _HexBitToAscII
       0072  _AscIIToHexBit
       0083  _FcsCal
       00A3  _DecToAscII
       00C3  _AscIIToHex
       0109  _Timer2Ovf
       013E  _timer0_ovf_isr
       0146  _UartRx
       02EC  _UartTx
       0314  _PizInt2
       0326  _UartRRInit
       035D  _UartRDInit
       03B0  _SysInit
       03E6  _SysNew
       053A  _SysControl
       1CE8  _main
       1CFA  mod16u
       1CFC  div16u
       1CFD  xdiv16u
       1D16  empy16s
       1D26  pop_gset2
       1D29  pop_gset3
       1D2C  pop_gset5
       1D2F  push_gset5
       1D31  push_gset4
       1D33  push_gset3
       1D35  push_gset2
       1D37  push_gset1
       1D3A  pop_gset1
       1D3B  pop
       1D4E  push_lset
       1D65  pop_lset
       1D7C  lsl16
       1D83  lsr16
       1D8A  __text_end

Area                               Addr   Size   Decimal Bytes (Attributes)
--------------------------------   ----   ----   ------- ----- ------------
                             bss   0060   03C0 =    960. bytes (rel,con,ram)

       Addr  GLOBAL Symbol
      -----  --------------------------------
       0060  _EncAbsAngle
       0060  __bss_start
       0062  _AscII
       0066  _RDNum
       0067  _RxState
       0068  _ComCmd
       0069  _TxNum
       006A  _RxNum
       006B  _RxBuf
       009E  _TxBuf
       00AF  _PlcRR
       00B3  _PlcRD
       0417  _Sta
       0418  _TimSecBase
       0419  _Time
       041A  _OutDate3
       041B  _OutDate2
       041C  _OutDate1
       041D  _OutDate0
       041E  _InData0
       041F  _InDate0
       0420  __bss_end

Area                               Start  End    Decimal Bytes (Attributes)
--------------------------------   ----   ----   ------- ----- ------------
                          vector   0000   004C =     76. bytes (abs,ovr,rom)

Files Linked      [ MODULE(s) ]

D:\icc\lib\crtatmega.o   [ crtatmega.s ]
main.o   [ main.c ]
<library>   [ div16u.s, emul16s.s, gpop2.s, gpop3.s, gpop5.s, gpush.s, lpush.s, lsl16.s, lsr16.s ]

User GLOBAL Definitions

ram_end = 0x45f
hwstk_size = 0x10

User Base Address Definitions

func_lit = 0x54
data = 0x60
EEPROM = 0x1 

2楼: >>参与讨论
zsmbj
AVR不是51,没有idata。
 
3楼: >>参与讨论
wxjia2004

怎么没有,ICCAVR的手册里面就有说明:idata保存在FLASH中,是全局变量等的初始化值。

而且我以前用ICCAVR确实看到过。

4楼: >>参与讨论
xwj
“idata保存在FLASH中”!!!  谁说的?
 
5楼: >>参与讨论
zhiwei
在ICC里面又这个区域的
__text_start开始就是,如果有初始化数据,或者字符串常量会放到中断向量表后,并且在程序start(也就是复位向量跳转的地方)之前。只不过这个段没有专门分出来。

6楼: >>参与讨论
wxjia2004
不对吧?
idata区域在中断向量后text start前?
而text start对应的特定的mcu是固定的,ICCAVR中就是一个固定的不可选择的区域(除非cpu选CUSTOM类型)。这个地址紧跟着中断向量的后面。比如MEGA16的最后一个中断向量地址为0x28,对应的text start就是0x2A。

idata区域应该不是在那段地址。

我以前看到过idata区。data区,不过现在就是编译生成不出来,不知道为什么?

7楼: >>参与讨论
zhiwei
你打开一个启动文件看一下就知道了
所谓的idata区数据是和常量字串一起放到text段开头的,ICC好像没有明确把idata段区分出来。你可以打开一个启动文件,里面汇编写的代码有复制idata区数据到RAM程序段。或者你可以定义一个初始化数据的数组,编译后打开hex文件看一下就知道了。

8楼: >>参与讨论
wxjia2004
应该是这样
但是我清楚的记得我以前编译把idata区域分出来了,现在我怎么都看不到了。不知道是怎么回事。

参与讨论
昵称:
讨论内容:
 
 
相关帖子
SRAM的最大变量使用地址要比堆栈地址小多少呢?
avr内部EEPROM写数据时,若操作失败的问题。
Atmel推出针对AVR微控制器的低成本开发工具
SOS!!--AVR JTAGICE MKII AVR Studio的仿真问题
求助电池供电3.6~6.5V输入,5V输出高效电源芯片
免费注册为维库电子开发网会员,参与电子工程师社区讨论,点此进入


Copyright © 1998-2006 www.dzsc.com 浙ICP证030469号