我目前工作的微芯片系统,我遇到了程序长度的问题。在编译时,我可以看到两种不同的长度:
这两者可能真的不同(例如0x1EC8和0x2700 )。
你们有谁知道这两者的区别吗?计算它们的方法?
编辑:请参阅.text部分

发布于 2018-11-26 10:19:24
我刚看了几本书,得到了这些解释,也许对你有用。
字节: 有一个最小的代码块总是由MPLAB编译器生成的。 摘自这本书:这里
和
个人电脑单位: 可能是程序计数器。据指出,16位设备PC在每个指令字上增加2(并非在所有情况下,请参阅一些PC增量的书籍)。 摘自这本书:这里 第52页
所以,它们的尺寸可能不一样。大部分字节的大小将大于PC机。
希望它有帮助:)
发布于 2018-11-26 12:12:24
也许可以看看PIC24FJ128GA:
每条指令是24位或3位字节。用户Flash从0x200开始,程序计数器单元中有一个长度的0x155FC。每台偶数PC有两个字节,每台奇数PC只有一个字节。因此,用户程序内存总量为0x155FC * 1.5 = 131322 =128.2K字节。

发布于 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个字节的闪存。每个指令字由两个地址单元表示。
若要将地址单元转换为闪存字节:
对于大多数实际目的,闪存使用的字节数几乎没有什么用处,尽管指定或空闲的指令字数更有用。
https://stackoverflow.com/questions/53477738
复制相似问题