PIC 16F 초급. 다른 컴파일러 사용시 프로그램 구문의 차이


9

언급했듯이 방금 pic16f877a 프로그래밍을 시작했습니다. 이제 7 개의 세그먼트 디스플레이로 작업 할 수 있습니다. 현재 ccs 컴파일러를 사용하고 있습니다. 아무 문제가 없습니다. 그러나 나는 컴파일러 독립적 인 프로그래머가되는 것을 선호합니다. 따라서 IAR 또는 Hitechc와 같은 다른 컴파일러에서 동시에 작업하고 싶습니다. ccs가 아닌 "컴파일러의 프로그램 명령문 선언"이 다른지 알고 싶습니다. 이 일에 접근하는 방법을 알려주세요. 모든 형태의 제안을 환영합니다. 미리 감사드립니다.

답변:


9

컴파일러 독립적이기를 원합니다. 불행하게도 로우 엔드 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 이상을 처리 할 수 ​​있다면 c18 컴파일러를 살펴 봐야합니다. 많은 지원이 있습니다. IAR은 PIC 지원을 중단하고 있으며 더 이상 유지 관리 라이센스를 판매하지 않습니다.
Kortuk

PIC16 / 12 / 10 아키텍처가 C 언어에 잘 매핑되지 않는다는 것을 이해했습니다. 따라서 C 컴파일러는 PIC 아키텍처를 보완하기 위해 특이하고 비표준적인 구조를 가져야합니다. 결과적으로 컴파일러가 상호 운용되지 않습니다.
코너 울프

7

PIC18 부품을 사용하는 경우 Microchip의 C18 컴파일러를 권장합니다. CCS 컴파일러보다 ANSI C에 훨씬 더 가깝습니다. 하이테크 컴파일러를 사용하지 않았기 때문에 확실하지 않습니다. 앞에서 언급했듯이 실제로 컴파일러 독립적 코드를 만들어야하는 경우 많은 사전 컴파일러 지시문을 사용해야합니다. 여러 컴파일러를 지원하는 Microchip 예제 프로그램 중 일부를 살펴보고 수행 방법에 대한 아이디어를 얻는 것이 좋습니다.


pic18의 경우 c18, pic24의 경우 c30, pic32의 경우 dspic, c32!
Kortuk

CCS는 특정 작업이 더 간단하다는 점에서 우수합니다 (예 : 인터럽트 및 타이머 – 모든 Microchip 예제는 C18에서 인터럽트가 작동하도록 ASM을 작성해야 함). 그러나 ANSI C에 더 가깝습니다.
J. Polfer

단 하나의 어셈블리 명령 만 있으면 인터럽트 서비스 루틴을 가리 키도록 인터럽트 벡터를 설정하는 데 사용되는 GOTO입니다.
mjh2007

3

불행히도 마이크로 컨트롤러 용 컴파일러 독립 프로그램을 찾는 것은 매우 어렵다는 것을 알게 될 것입니다. 몇 가지 문제가 있습니다. 여기에는 두 가지가 있습니다.

  1. 주변 장치, SFR 이름 지정 등의 차이점 (특히 다른 프로세서와 동일하지만 동일한 제품군의 컴파일러와의 차이) 및

  2. 어셈블리 코드를 호출하기 위해 비트를 개별적으로 설정하거나 다른 구조를 설정하는 것과 같은 일부 컴파일러의 비표준 기능.

16F 시리즈는 아키텍처 측면에서 매우 제한적이며 실제로 C 컴파일러를 지원하도록 설계되지 않았습니다. 이것이 GCC가없는 이유입니다.


3

SDCC를 살펴보십시오 . 많은 PIC16 및 PIC18 장치를 지원합니다. GCC는 PIC24 및 dsPIC을 지원합니다.


나는 다른 컴파일러를 사용하는 동안 문장의 차이점에 대해 물었다. 어쨌든 나는 더 많은 컴파일러 'sdcc'에 대해 알게되었다. 고마워 ..
VV Rao

2

컴파일러에 의존 할 가능성이 가장 높은 측면은 다음과 같습니다.

  • 단일 비트 사용 (특히 IO 포트에서)
  • 정수의 크기, 부호 또는 부호없는 문자
  • 재미있는 포인터 : C18은 롬과 램 포인터를 차별화합니다.
  • 구성 퓨즈
  • 바쁜 대기

이것을 처리하는 내가 선호하는 방법은 이러한 측면에 대한 매크로를 작성하고 컴파일러가 사전 정의 된 매크로를 기반으로 올바른 매크로를 선택하도록하는 것입니다. 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

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.