这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 综合技术 » 基础知识 » data,idata 我的程序空间怎么没有data和idata区呢?

共3条 1/1 1 跳转至

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

院士
2006-09-17 18:14:16     打赏
data,idata 我的程序空间怎么没有data和idata区呢?



关键词: idata     我的     程序     空间     怎么     没有     区呢    

院士
2006-12-22 22:43:00     打赏
2楼
问 我写的一个程序,我看了一下mp文件,发觉里面根本就没有idatadata区域?
是不是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  1: AVR不是51,没有idata 2: 有怎么没有,ICCAVR的手册里面就有说明:idata保存在flash中,是全局变量等的初始化值。

而且我以前用iccAVR确实看到过。 3: “idata保存在flash中”!!!  谁说的? 4: 在ICC里面又这个区域的__text_start开始就是,如果有初始化数据,或者字符串常量会放到中断向量表后,并且在程序start(也就是复位向量跳转的地方)之前。只不过这个段没有专门分出来。 5: 不对吧?idata区域在中断向量后text start前?
而text start对应的特定的mcu是固定的,iccAVR中就是一个固定的不可选择的区域(除非cpu选custom类型)。这个地址紧跟着中断向量的后面。比如mega16的最后一个中断向量地址为0x28,对应的text start就是0x2A。

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

我以前看到过idata区。data区,不过现在就是编译生成不出来,不知道为什么? 6: 你打开一个启动文件看一下就知道了所谓的idata区数据是和常量字串一起放到text段开头的,ICC好像没有明确把idata段区分出来。你可以打开一个启动文件,里面汇编写的代码有复制idata区数据到RAM程序段。或者你可以定义一个初始化数据的数组,编译后打开hex文件看一下就知道了。 7: 应该是这样但是我清楚的记得我以前编译把idata区域分出来了,现在我怎么都看不到了。不知道是怎么回事。

专家
2022-08-20 16:55:43     打赏
3楼

感谢分享


共3条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]