首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >字节与pc机之间的长度差

字节与pc机之间的长度差
EN

Stack Overflow用户
提问于 2018-11-26 09:07:00
回答 4查看 332关注 0票数 0

我目前工作的微芯片系统,我遇到了程序长度的问题。在编译时,我可以看到两种不同的长度:

  • 长度(PC机)
  • 长度(字节)

这两者可能真的不同(例如0x1EC8和0x2700 )。

你们有谁知道这两者的区别吗?计算它们的方法?

编辑:请参阅.text部分

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2018-11-26 10:19:24

我刚看了几本书,得到了这些解释,也许对你有用。

字节: 有一个最小的代码块总是由MPLAB编译器生成的。 摘自这本书:这里

个人电脑单位: 可能是程序计数器。据指出,16位设备PC在每个指令字上增加2(并非在所有情况下,请参阅一些PC增量的书籍)。 摘自这本书:这里 第52页

所以,它们的尺寸可能不一样。大部分字节的大小将大于PC机。

希望它有帮助:)

票数 0
EN

Stack Overflow用户

发布于 2018-11-26 12:12:24

也许可以看看PIC24FJ128GA:

每条指令是24位或3位字节。用户Flash从0x200开始,程序计数器单元中有一个长度的0x155FC。每台偶数PC有两个字节,每台奇数PC只有一个字节。因此,用户程序内存总量为0x155FC * 1.5 = 131322 =128.2K字节。

票数 2
EN

Stack Overflow用户

发布于 2018-12-05 02:12:15

这个答案只针对PIC24、dsPIC30和dsPIC33家族中的微芯片PIC设备。

这种类型的控制器将指令和数据存储器的地址总线分开。

数据存储器组织为16位字,可寻址为字节.

指令存储器被组织为24位字.

当操作码从指令存储器中取出时,所有24位都被一次读取.但是,还有一些额外的寻址模式,允许使用数据存储器可用的寻址模式读取指令存储器的一部分。

还有一些访问指令内存的其他方法,但它们是关于擦除和写入指令内存的,因此与此答案无关。

当控制器仅使用程序计数器获取指令时,甚至地址也是可能的,但是可以使用间接寻址来获取指令。当目标地址为奇数时,开发人员应该小心地使用这种控制传输方法,如CALL和GOTO作为地址错误陷阱。

由于我不完全理解指令存储器中可见的部分,使用数据存储器可用的模式只能访问指令字的低16位,上面的8位不能以这种方式访问。

所以,我在24位图片中描述了内存总线的形状,但我没有回答您的问题。

微芯片文档并不能很好地描述这一点。它做了很多挥手和模糊有用的细节。

本质上,对于可寻址内存的每个字都有两个地址单元。在数据存储器中,这表示2字节的RAM,对于指令内存来说,它代表3字节的闪存,但这3字节中的1字节是可见的。

这种指令内存的处理“应该”使访问这个内存空间来更快更容易地创建C编译器代码生成器来读取常量数据。很难说那是真的。

总之,每个指令字有3个字节的闪存。每个指令字由两个地址单元表示。

若要将地址单元转换为闪存字节:

  1. 计算闪存地址单位的范围(必须是偶数)。
  2. 将范围除以2,得到指令字数。
  3. 将指令字数乘以3表示闪存的字节数。

对于大多数实际目的,闪存使用的字节数几乎没有什么用处,尽管指定或空闲的指令字数更有用。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53477738

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档