Answers:
您希望独立于编译器真是太好了!不幸的是,用于低端PIC的高科技和CCS编译器使用了很多编译器特定的预处理器声明,编译器特定的引脚访问例程,并且对于CCS编译器特定的例程使用了诸如SPI,I2C,ADC等访问核心功能。
如果没有大量预处理器#define,#ifdef,#ifndef等,就无法访问非编译器特定的代码,则无法访问每个编译器提供的特定部分。这会使您的代码不可读。
您可能希望的最佳目标是独立于IDE并使用类似eclipse的东西,因此至少您要使用相同的IDE。这将导致失去用于设置核心功能的CCS向导,但会给您使用同一IDE的更大灵活性。
要考虑的另一件事是,hitech和CCS都(至少在过去)都没有真正的c编译器链接程序,并且要求您使用我个人鄙视的“ #include myfile.c”……但这是另一回事了。
我没有对IAR编译器发表评论,因为我仅使用CCS和高科技。两者都工作正常,但是从Motorola(现在为Freescale)平台迁移并使用当时更先进的Metroworks编译器后,我从未真正感到满意。IAR编译器看起来不错,但我从未使用过。
如果您使用的是PIC18器件,则建议使用Microchip的C18编译器。它比CCS编译器更符合ANSIC。我不确定高科技编译器,因为我没有使用过它。如前所述,如果您确实需要使编译器独立代码,则将需要使用许多预编译器指令。我建议您看一下一些支持多个编译器的Microchip示例程序,以了解其实现方式。
看一下SDCC。它支持许多PIC16和PIC18器件。GCC支持PIC24和dsPIC。
与编译器相关的最可能方面是:
我处理此问题的首选方法是为这些方面编写宏,并让编译器根据特定于编译器的预定义宏选择正确的宏。我以这种方式制作了一个RFM70库和示例应用程序,它们可以在PIC14(HiTechC),PIC16(C18)和ARM(GCC)上运行。
(更新)我的RFM70库现在已完成。它支持PIC 16F(Hitech编译器)上的C,LPC11114(Cortex)和LPC2148(ARM7TDMI)(GCC编译器)和Arduino(ATMega128,GCC编译器)上的C和C ++。这是通过在Python脚本中进行一些预处理从同一来源生成的(包括doxygen文档)。日航的支持正在开发中,也许ProtonBasic会紧随其后。http://www.voti.nl/rfm70