Questions tagged «compiler»

编译器将以源语言编写的代码转换为(二进制)目标语言。

3
Microchip XC16中函数的绝对地址
器件:dsPIC33FJ128GP802 我有一些* .s文件,如下所示 .global _D1 .section .speex, code _D1: .pword 0x66C821, 0x1B0090, 0xD96C36, 0x9B60B0, 0xDD4E36, 0xBF4E53 .pword 0xD1098B, 0x719BD9, 0x873989, 0x003B69, 0x279035, 0xED4244 .pword 0xE1403C, 0x54D439, 0x826550, 0xC59627, 0xDD0432, 0x88FA29 我在* .h中声明了相同的内容 extern void D1(void); 现在我将D1传递给表读取功能 nowPlaying.file1 = (unsigned long) D1; function(nowPlaying.file1); 我的问题是,如果D1的地址大于0X8000,则例程不正确。我尝试了大型和小型代码模型,但结果是相同的。我认为这是由于指针的16位限制引起的。是否有任何方法可以直接从代码中访问D1的绝对地址。可能类似于内置函数或宏。

3
#if 0有什么作用
今天,我开始使用MPLAB X对PIC进行编程,并找到了一个代码模板,其中包含多个文件和可填充代码的位置。在我拥有包含我的代码的单个文件之前。在此模板中,我应将配置位放在其中,其中包含以下文本: /* TODO Fill in your config bits here. Remove #if 0 to embed config words. */ #if 0 /* General syntax for configuration word 1 - Check your device .h file for an up to date listing of available macros.*/ __CONFIG(FOSC_INTOSC & WDTE_OFF & PWRTE_OFF & MCLRE_OFF & …

5
HEX文件中可编辑的PIC序列号
目前,我的固件中有一个硬编码的序列号,用于正在使用的设计。固件可以读取并报告序列号。可以满足我的需求。麻烦在于,每个新的序列号都需要我更改代码并重新编译。当要建造许多单元时,这很麻烦,可能会引入错误,并且是全面的不良做法。序列号是给我的,硬件设计是一成不变的,因此我无法在硬件中添加任何功能来序列化这些单元(EEPROM /硅ID芯片/上拉)。我想做的是将序列号定位在固定地址,编译一次代码,然后在已编译的HEX文件中为每个新序列号编辑该地址。该数字在多个地方都有引用,因此理想情况下,我想一次定义和定位它,然后在我的代码的其他地方引用该“变量”。有谁知道如何使用C18编译器在我选择的特定可寻址存储器位置中定位常量数据?有没有人可以建议的更好的方法?
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.