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

电器工程 图片 编译器
2022-01-23 21:02:04

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

4个回答

你想独立于编译器真是太好了!不幸的是,低端 PIC 的 hitech 和 CCS 编译器使用大量编译器特定的预处理器声明、编译器特定的引脚访问例程,以及 CCS 编译器特定的例程用于访问 SPI、I2C、ADC 等核心功能。

如果没有大量预处理器#define、#ifdef、#ifndef 等来访问每个编译器提供的特定部分,就不可能将代码编写为非编译器特定的。这会使您的代码不可读。

您可以实现的最佳目标是独立于 IDE 并使用 eclipse 之类的东西,因此至少您使用的是相同的 IDE。这将导致失去用于设置核心功能的 CCS 向导,但在使用同一 IDE 时将给予您更大的灵活性。

要考虑的另一件事是,hitech 和 CCS 都没有(至少在过去)真正的 c 编译器链接器,并且要求您使用我个人鄙视的“#include myfile.c”……但这是另一个故事。

我没有评论 IAR 编译器,因为我只使用了 CCS 和 hitech。两者都工作正常,但在从摩托罗拉(现在的飞思卡尔)平台迁移并使用当时更先进的 Metroworks 编译器之后,我从来没有真正满意过。IAR 编译器看起来不错,但我从未使用过它。

如果您使用的是 PIC18 部件,我会推荐 Microchip 的 C18 编译器。它比 CCS 编译器更符合 ANSI C。我不确定 Hi-Tech 编译器,因为我没有使用过它。如前所述,如果您确实需要制作独立于编译器的代码,则需要使用大量预编译器指令。我建议查看一些支持多个编译器的 Microchip 示例程序,以了解它是如何完成的。

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

  1. 外设、SFR 命名等方面的差异(尤其是与其他处理器相比,但即使是同一系列的编译器),以及;

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

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

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