打印

关于.data段的疑问

[复制链接]
1849|18
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
片子是dspic30f4011,我在用汇编语言编程时,看xc16汇编器中讲到,.data段为初始化的数据区。
.data
Var1: .word 1234
调试时看watch以及File register,Var1并没有被初始化为1234
请问各位大牛,这是什么原因?是这样有错误吗?

使用特权

评论回复
沙发
jiajs| | 2021-7-3 10:39 | 只看该作者
没玩过汇编啊,这个系列可以用C更好吧

使用特权

评论回复
板凳
zhenykun| | 2021-7-3 10:42 | 只看该作者

这个系列用C最佳。

使用特权

评论回复
地板
liliang9554|  楼主 | 2021-7-3 10:45 | 只看该作者
谢谢!现在程序用的汇编,以后打算改c试试

使用特权

评论回复
5
juventus9554| | 2021-7-3 10:47 | 只看该作者
还是写C吧....真的.

使用特权

评论回复
6
dingy| | 2021-7-3 10:52 | 只看该作者
你没有用编译器提供的初始化库吧?

使用特权

评论回复
7
dengdc| | 2021-7-3 10:53 | 只看该作者
.data这个东西不是芯片自己能自动初始化的,是需要代码来做的,你自己的程序没做,就只能用编译器的初始化库中的相应初始化代码来做

使用特权

评论回复
8
liliang9554|  楼主 | 2021-7-3 10:55 | 只看该作者
谢谢!我没有用初始化库。我一开始是用的.bss段定义了一些变量,然后在程序一开始,自己用代码对其进行了初始化。后来,用到了eeprom的数据,发现:.eedata  Var1: word 1234,这样定义变量时就可以直接初始化,省的在后续代码中写了。所以,我想把.bss段中需要初始化的变量,直接定义在.data段中,也采用类似于eeprom那种写法

使用特权

评论回复
9
liliang9554|  楼主 | 2021-7-3 10:57 | 只看该作者
但后来发现,这样是不行的。.data和.bss好像没什么区别。不知是哪里有错误。看了所有的技术文档,都没有介绍这部分。

使用特权

评论回复
10
liliang9554|  楼主 | 2021-7-3 10:59 | 只看该作者
这里是我附上的代码以及数据初始化的结果

使用特权

评论回复
11
liliang9554|  楼主 | 2021-7-3 11:01 | 只看该作者

使用特权

评论回复
12
liliang9554|  楼主 | 2021-7-3 11:04 | 只看该作者

使用特权

评论回复
13
liliang9554|  楼主 | 2021-7-3 11:06 | 只看该作者
以上图片可知,eedata段是在定义这些变量后,直接就初始化成功的,而.data并不行,那个400是个随机的数,有时候就变成其他了。

使用特权

评论回复
14
zhanghqi| | 2021-7-3 11:11 | 只看该作者
.data和.bss其实差不多,都是编译器需要编译时给初始化代码来执行赋值动作,.data由初始化代码逐一赋值,而.bss则是对变量所在的内存块清零操作。这个初始化代码要么你自己写,要么调用官方的初始化代码。

使用特权

评论回复
15
chuxh| | 2021-7-3 11:13 | 只看该作者
.eedata和.text应该差不多的,由烧写器按照地址和长度烧写到flash里面取

使用特权

评论回复
16
liliang9554|  楼主 | 2021-7-3 11:15 | 只看该作者
上次eeprom的初始化问题,也是按手册建议,在代码中对其初始化,结果并未成功,后来他们建议在定义时,直接用.word来初始化。

使用特权

评论回复
17
liliang9554|  楼主 | 2021-7-3 11:18 | 只看该作者
原因不在于.data,而是我的汇编程序中自己定义了一个__reset入口,而XC16编译器在编译和链接时,会自动生成一部分代码,其标号就是__reset,用于执行系统启动的一系列操作,包括.bss段数据的清零,.data段数据的初始化,等等,我看了Programme区,其中就有goto __reset一句,如果用户自己定义了__reset,就无法调用系统默认的__reset代码了。因此,去掉自己写的__reset程序即可。

使用特权

评论回复
18
zhanghqi| | 2021-7-3 11:21 | 只看该作者

使用特权

评论回复
19
liliang9554|  楼主 | 2021-7-3 11:24 | 只看该作者

哦,那我就知道怎么回事了,多谢大家

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

950

主题

11568

帖子

6

粉丝