中科因仑“3+1”工程特种兵精英论坛

标题: CCS C PIC 编译器的同好请来交流 [打印本页]

作者: 张衍波    时间: 2015-6-14 16:53
标题: CCS C PIC 编译器的同好请来交流
在AMO论坛, PIC 的使用者算是很少, 然而, 使用CCS C 编译器的同好, 我想更是少。。
开这帖的目的, 是看看有谁正在用, 或有谁曾经用过CCS C 。。然后, 可以讨论大家在使用CCS C 遇到的问题, 如语法, 发现臭虫, 等等的问题。

先介绍我个人, 自从2003, 我就开始用PIC, 第一个PIC 型号是16F84A, 使用的是DOS 版的 CCS C!

我曾学习过PIC basic, 但是只是很短的时间, 过后就转用CCS C, 一直用到现在, 就没有再换过。。
我也真的不会Hi-tech C, Microchip 的 XC 编译器 也没用过。。 ASM 也不会。。。

CCS C, 我想比较少人用的原因, 我个人认为是以下的原因:
1. 他不是标准的ANSI C, 其他的ANSI C 源码, 不能简单快速的转去CCS C
2. 他不支持指针 ,pointer to constant。 Pointer to RAM 是可以的
3. 臭虫多。。几乎每个版本都有臭虫! 但是臭虫也未必会影响你。。

那么, CCS C有好处吗?
1. 他简单, 容易使用, 新手很容易就上手。
2. 含有丰富的内建功能, 函数等等
3. 含有很多范例程序
4. 因为他不是ANSI C, 也不支持Pointer to constant 的关系, 他不考虑太多的相容性, 所以, 他的编译结果是很优越的,产生的hex 是比较小。

不要小看CCS C, 很多老外都是使用CCS C, 而且都是高手中的高手。。。
我最喜欢的就是逛 CCS 论坛, 里面高手如云,偶像如PCM Programmer, Ttelmah前辈等等,

General CCS C discussion
http://www.ccsinfo.com/forum/viewforum.php?f=1

Code Library (源码资源很丰富)
http://www.ccsinfo.com/forum/viewforum.php?f=2

在CCS C 论坛, 不要随意开帖,先用搜索的功能, 如果没有答案, 才开帖询问。


希望CCS C 同好, 可以一起来交流, 谈谈你们的使用经验, 或分享心得。。
我最近犯了一个错误。。就是忽略了PIC 16F1827 的一个 fail-safe clock monitor。
Fail-safe clock monitor 是一些PIC芯片的新功能, 就是当晶振发生错误后, 启动内部的Internal Oscillator。

如果, 不打算使用这个fail-safe clock monitor, 最好是把他关闭。

我的一个汽车安防产品, 之前是使用16F628A的, 后来转用16F1827, 就只是把源码略做修改, 就出货了。
最近, 客户的客户有投诉, 产品会死机。。

经过检查后, 发现当用手去触摸16F1827 的16脚, 接着, 发现PIC 的反应变得异常的缓慢。。
本来是16Mhz, 正常时LED 闪灯只是0.5~1秒, 现在变成几十秒。。变得超级慢~~

过后想起, 很可能是Fail-safe clock monitor,就看看资料手册, 可以在Fuse 里面关闭。
再查看CCS C 16F1827.h


//////// Program memory: 4096x14  Data RAM: 368  Stack: 16
//////// I/O: 16   Analog Pins: 12
//////// Data EEPROM: 256
//////// C Scratch area: 77   ID Location: 8000
//////// Fuses: LP,XT,HS,RC,INTRC_IO,ECL,ECM,ECH,NOWDT,WDT_SW,WDT_NOSL,WDT
//////// Fuses: PUT,NOPUT,NOMCLR,MCLR,PROTECT,NOPROTECT,CPD,NOCPD,NOBROWNOUT
//////// Fuses: BROWNOUT_SW,BROWNOUT_NOSL,BROWNOUT,CLKOUT,NOCLKOUT,NOIESO
//////// Fuses: IESO,NOFCMEN,FCMEN,WRT,WRT_800,WRT_200,NOWRT,PLL_SW,PLL
//////// Fuses: NOSTVREN,STVREN,BORV25,BORV19,DEBUG,NODEBUG,NOLVP,LVP
////////
复制代码

在第21行, 找到这个Fuse NOFCMEN, 加入到程序的Fuse里, 问题就解决了。

修改后的Fuse

#include <16F1827.H>
#fuses   HS, nolvp, PROTECT, WDT, put, brownout, nomclr, NOFCMEN
#use delay(crystal=16MHz, clock=16MHz, restart_wdt)
复制代码


希望PIC 同好, 要注意这个Fuse, 不要犯和我同样的错误哦~

我个人在写代码时, 常常会写了几行, 就按 <Alt>+<C> 做编译, 如果有错误, 马上就纠正。
CCS C, 每次编译时, 会弹出这个编译成功的提示, 并默认停留三秒:



这三秒的提示, 很烦人, 我一般是去掉。。
按照以下的方法,
1. 点击Option
2. 点击Project
3. 点击Output Files
4. 找到Compile Window up,No Error 那项, 改去 : No



那么, 以后编译后, 编译成功的提示只是一闪而过了。转载







欢迎光临 中科因仑“3+1”工程特种兵精英论坛 (http://bbs.enlern.com/) Powered by Discuz! X3.4