PIC 16F初学者..使用不同编译器时程序语法的差异


9

如前所述,我刚刚开始编写pic16f877a。我现在可以使用7段显示器。目前,我正在使用ccs编译器。没有错。但是我更喜欢成为一个独立于编译器的程序员。所以我同时想在其他编译器(如IAR或Hitechc)中工作。我想知道ccs以外的“编译器中的程序声明声明”是否会有所不同?请指导我如何处理这个问题。我欢迎所有形式的建议。提前致谢。

Answers:


9

您希望独立于编译器真是太好了!不幸的是,用于低端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或更高级别的文件,那么您应该看看c18编译器。它有大量的支持。IAR放弃了PIC支持,他们将不再出售带有维护的许可证。
Kortuk

据我了解,PIC16 / 12/10架构无法很好地映射到C语言。因此,C编译器必须具有一些非常规和非标准的结构来补偿PIC架构。最终结果是没有编译器可以互操作。
康纳·沃尔夫,

7

如果您使用的是PIC18器件,则建议使用Microchip的C18编译器。它比CCS编译器更符合ANSIC。我不确定高科技编译器,因为我没有使用过它。如前所述,如果您确实需要使编译器独立代码,则将需要使用许多预编译器指令。我建议您看一下一些支持多个编译器的Microchip示例程序,以了解其实现方式。


pic18的c18,pic24和dspic的c30,pic32的c32!
Kortuk

CCS是不错的,有些事情是简单的做(中断和定时器,例如-所有Microchip的例子有你写ASM获得中断,在C18工作的权利),但它更接近于ANSI C.
J.波尔费尔

您只需要一个汇编指令,那就是GOTO,它用于设置中断向量以指向中断服务程序。
mjh2007 '11

3

不幸的是,您会发现很难找到适用于微控制器的与编译器无关的程序。有几个问题,这里只有两个:

  1. 外设,SFR命名等方面的差异(尤其是在其他处理器上,甚至使用同一系列的编译器);以及

  2. 一些编译器的非标准功能,例如分别设置位或调用汇编代码的不同结构。

16F系列在体系结构方面非常有限,并且并非真正旨在支持C编译器。这就是为什么没有GCC的原因。


3

看一下SDCC。它支持许多PIC16和PIC18器件。GCC支持PIC24和dsPIC。


我问使用不同编译器时语句的区别..无论如何,我还是知道了另外1个编译器'sdcc'..非常感谢..
VV Rao 2010年

2

与编译器相关的最可能方面是:

  • 使用单个位(尤其是在IO端口中)
  • 整数的大小,并且char为有符号或无符号
  • 有趣的指针:C18区分rom和ram指针:(
  • 配置保险丝
  • 忙着等待

我处理此问题的首选方法是为这些方面编写宏,并让编译器根据特定于编译器的预定义宏选择正确的宏。我以这种方式制作了一个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

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.