답변:
컴파일러 독립적이기를 원합니다. 불행하게도 로우 엔드 PIC를위한 하이테크 및 CCS 컴파일러는 많은 컴파일러 특정 프리 프로세서 선언, 컴파일러 특정 핀 액세스 루틴 및 CCS 컴파일러 특정 루틴의 경우 SPI, I2C, ADC 등과 같은 액세스 핵심 기능에 사용합니다.
각 컴파일러가 제공하는 것의 특정 부분에 액세스하기 위해 많은 전 처리기 #define, #ifdef, #ifndef 등이 없으면 컴파일러가 아닌 코드로 코드를 작성할 수 없습니다. 코드를 읽을 수 없게됩니다.
당신이 목표로 할 수있는 가장 좋은 것은 IDE 독립적이며 일식과 같은 것을 사용하는 것이므로 적어도 동일한 IDE를 사용하고 있습니다. 이로 인해 핵심 기능을 설정하기위한 CCS 마법사가 손실되지만 동일한 IDE를 사용할 때 유연성이 향상됩니다.
고려해야 할 또 다른 사항은 하이테크와 CCS 모두 (최소한 과거에는) 진정한 c 컴파일러 링커가 없으며 개인적으로 경멸하는 "#include myfile.c"를 사용해야한다는 것입니다. 그러나 그것은 또 다른 이야기입니다.
CCS와 hitech 만 사용했기 때문에 IAR 컴파일러에 대해서는 언급하지 않았습니다. 둘 다 정상적으로 작동했지만 Motorola (현재 프리 스케일) 플랫폼에서 마이그레이션 한 후 당시에 더 발전한 metroworks 컴파일러를 사용하여 정말 기뻤습니다. IAR 컴파일러는 좋아 보이지만 결코 사용하지 않았습니다.
PIC18 부품을 사용하는 경우 Microchip의 C18 컴파일러를 권장합니다. CCS 컴파일러보다 ANSI C에 훨씬 더 가깝습니다. 하이테크 컴파일러를 사용하지 않았기 때문에 확실하지 않습니다. 앞에서 언급했듯이 실제로 컴파일러 독립적 코드를 만들어야하는 경우 많은 사전 컴파일러 지시문을 사용해야합니다. 여러 컴파일러를 지원하는 Microchip 예제 프로그램 중 일부를 살펴보고 수행 방법에 대한 아이디어를 얻는 것이 좋습니다.
불행히도 마이크로 컨트롤러 용 컴파일러 독립 프로그램을 찾는 것은 매우 어렵다는 것을 알게 될 것입니다. 몇 가지 문제가 있습니다. 여기에는 두 가지가 있습니다.
주변 장치, SFR 이름 지정 등의 차이점 (특히 다른 프로세서와 동일하지만 동일한 제품군의 컴파일러와의 차이) 및
어셈블리 코드를 호출하기 위해 비트를 개별적으로 설정하거나 다른 구조를 설정하는 것과 같은 일부 컴파일러의 비표준 기능.
16F 시리즈는 아키텍처 측면에서 매우 제한적이며 실제로 C 컴파일러를 지원하도록 설계되지 않았습니다. 이것이 GCC가없는 이유입니다.
컴파일러에 의존 할 가능성이 가장 높은 측면은 다음과 같습니다.
이것을 처리하는 내가 선호하는 방법은 이러한 측면에 대한 매크로를 작성하고 컴파일러가 사전 정의 된 매크로를 기반으로 올바른 매크로를 선택하도록하는 것입니다. PIC14 (HiTechC), PIC16 (C18) 및 ARM (GCC)에서 실행되는 방식으로 RFM70 라이브러리 및 예제 애플리케이션을 만들었습니다.
(업데이트) 이제 RFM70 라이브러리가 완료되었습니다. PIC 16F (Hitech 컴파일러)의 C, LPC11114 (Cortex)의 C 및 C ++ 및 LPC2148 (ARM7TDMI) (GCC 컴파일러) 및 Arduino (ATMega128, GCC 컴파일러)를 지원합니다. 이것은 Python 스크립트에서 일부 전처리를 수행하여 동일한 소스에서 생성됩니다 (doxygen 문서 포함). Jal 지원이 개발 중이며 아마도 ProtonBasic이 뒤따를 것입니다. http://www.voti.nl/rfm70