打印

PIC16系列用的人还多吗?

[复制链接]
15188|83
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
Tinnal|  楼主 | 2012-5-24 09:42 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
看到fangfei036还在用PIC16系列单片机,记得大学刚毕业时进的一家实习公司,用的确的是PIC。但最近这十几年,单片机不旦整个市场被ARM挤压,而且单片机本身也添加了很多新的成员。PIC16作为一款老的单片机,对C语言又没有天生的支持。到现在,还在大最使用吗?
如果是,它有什么优点让大家对它恋恋不忘了呢?

相关帖子

沙发
HWM| | 2012-5-24 09:53 | 只看该作者
除特殊或习惯因素,长远趋势肯定是ARM系列。

使用特权

评论回复
板凳
yewuyi| | 2012-5-24 10:15 | 只看该作者
PIC16的出货量在这今年增长了多少,这个你知道吗?

呵呵,只要你知道,就必定知道用PIC16的人还在不断增长中。

PIC16很多年前就已经存在,但这么多年来,也在持续不断的推出大量新品,PIC16有自己的专用C编译器,非常简单易用,不知道你评价其‘对C语言又没有天生的支持’是从什么出发点做出的结论?

PIC16和ARM不具备可比性,从CPU核来说,其速度上肯定远远不如,PIC16对位在高可靠、高集成、低功耗的商业或者工业控制上,和ARM虽略有交集,但并没有严重的竞争关系。

用战争武器来形容,如果ARM是导弹的话,飞机、大**也一样大量需要,而PIC16只不过是个大**而已。

使用特权

评论回复
评分
参与人数 1威望 +1 收起 理由
yang010121 + 1 说的太对了。
地板
HWM| | 2012-5-24 10:25 | 只看该作者
ARM系列的优势在于其“谱系”很广,这不仅在于其性能分布上,还在于其制造商上。

使用特权

评论回复
5
gx_huang| | 2012-5-24 10:41 | 只看该作者
请版主给一个解释,好像C编译不是很好,BUG太多,免费的基本没有。
没有其它C编译器用的爽快。

使用特权

评论回复
6
BitFu| | 2012-5-24 10:44 | 只看该作者
一代人,一代产品的惯性作用下PIC16仍然能够发挥余热,但ARM仍然是趋势
就像.net 比JAVA先进,但已经有大部分人和大部分系统已经采用JAVA架构,仍需要采用原来的技术方案。

使用特权

评论回复
7
Tinnal|  楼主 | 2012-5-24 10:48 | 只看该作者
本帖最后由 Tinnal 于 2012-5-24 10:59 编辑

“PIC16的出货量在这今年增长了多少,这个你知道吗?”
真的不知道也,没玩单片机很多年了。yewuyi,能不能详细说说,我们现在的公司用的是NEC的。听他们说,便宜。

“PIC16很多年前就已经存在,但这么多年来,也在持续不断的推出大量新品,PIC16有自己的专用C编译器,非常简单易用,不知道你评价其‘对C语言又没有天生的支持’是从什么出发点做出的结论?”
PIC16的这系列刚出来时,单片机不是用C语言去开发,因此,那时的CALL指令用得不多,想想都知道,CALL来CALL去很容易乱,而PIC16的指地址宽度和数据宽度又不一样,因为PIC的做法是针对CALL指令,设定专用的硬件PC堆栈,最初PC专用堆栈才两级(PIC12时)到了PIC16F676也只有8级,整个PIC16系统最高也就是16级,而大家知道,C语言函数嵌套调用是很平常的,C的函数调用就是用CALL指令来实现的,那是否说,PIC16的函数调用,最高只能嵌套16级?这点也是我想问问用过PIC16的各位。
现在C语言普及以后,现在的单片机一般会采用如下的架构如最大限度的支持C。
1. CALL指令,原地址压到内存,只要内存够,多少级调用都没有问题。
2. 采用寄存器文件(也就是说:1.有很多寄存器用,给C语言放局部变量,2.取消累加器,因为寄存器堆是多端口的,可以在一个周期内实现两个操作的读取,并同时存结果。以适应C语言的语法)。
符合这类结构,典型的就是AVR和MSP430.
当然,我只从体系结构去分析,这里没有考虑到不同芯片的成本。

我没有打算拿ARM来比,我只是用来证明,单片机的市场受到冲击。

呵呵,问这一些,是因为我想模仿当前比较流行的一款单片机,如51,PIC,MSP,AVR。用现成的简单逻辑芯片去实现,只用大家的逻辑电路知识。为了最接近大学的教学体系,没有采用FPGA的系统级编程,又为了点小小的挑战自我,也不打算在FPGA上进行门级编程。而且全部用现成的逻辑芯片。

前一段时间对不同单片机的体系结构研究过,因为是用现成的逻辑芯片,因此选定的模型不能太复杂。看好MSP、PIC、和AVR这三款,他们的架构都会好。MSP430,16位MCU,架构完美,指令集完美!AVR架构完美,但指令太多,到时候指令执行机构复杂。PIC性能差点,指令也很简单,但就是因为那个硬件PC堆栈,很是不爽。
之前对特偏向MSP,但弄了一会后发现,用简单逻辑电路去搭寄存器文件(相当于3出,2进的多端口RAM)**烦了(用FPGA实现简单,但不是我想要的),项目有点想放弃了。
但最近fangfei036又给我提起了PIC16,回头去想,PIC真的还在大量使用吗?PIC16开发C语言,函数调用级数的问题体现的不明显吗?PIC16,大家真很乐意用吗?
如果这真只是我的忧虑,那太好了,就选定PIC16做为我的目标MCU了。

使用特权

评论回复
8
Tinnal|  楼主 | 2012-5-24 10:55 | 只看该作者
附PIC16F676体系结构:

附PIC16F676指令结构:

使用特权

评论回复
9
yewuyi| | 2012-5-24 11:07 | 只看该作者
请版主给一个解释,好像C编译不是很好,BUG太多,免费的基本没有。
没有其它C编译器用的爽快。
gx_huang 发表于 2012-5-24 10:41


1、俺一直都用着没有花钱的C编译器,从PICC8.05到现在的PICC9.60,只要你有心,NET很发达,很容易就能获得,MCHP在2009年收购了HITECH后,C编译器就成了MCHP自己的产品了,MCHP对C编译器的知识产权保护基本是象征性的,和谐后和正版完全一模一样,即使正版也很便宜。
2、PICC好不好,这个属于个人体验,俺不能强迫你说好,但俺没感觉那里不好,而且根据俺了解到的,大多数说不好的人,只是因为自己的C语言基础不好还总是想着玩'花活',花活玩不转了就感觉PICC不好而已。
3、PICC有没有BUG ?谁也不敢说没有,但俺用了这么多年,基本没遇到,PIC是一种精简指令的产品,所以PICC也继承了这个风格,不喜欢你玩花活,只要你老老实实的写代码,是很难中招的,HITECH也是全球有名的几家做编译器的专业企业,不光给PIC做,还有MOTO、TI、CYPRESS、ST等等厂家的C编译器,你想他们会那么弱吗?而且还弱到只给PIC捣蛋?

使用特权

评论回复
10
yewuyi| | 2012-5-24 11:18 | 只看该作者
“PIC16的出货量在这今年增长了多少,这个你知道吗?”
真的不知道也,没玩单片机很多年了。yewuyi,能不能详细说说,我们现在的公司用的是NEC的。听他们说,便宜。

“PIC16很多年前就已经存在,但这么多年来,也在 ...
Tinnal 发表于 2012-5-24 10:48


你的问题太多太复杂,俺不一定能全部回答的了,部分回答如下:
1、PIC16的2011年的出货量比2007年翻了数倍,NEC超便宜,但那是小日本偷工减料弄出来的结果,而且NEC的产品集成度、性能、稳定性等无法和PIC相比。
2、你所了解的PIC是很老的型号的了,PIC16只有固定堆栈,这和51通常意义上在RAM开辟堆栈区有区别,PIC16没有开放堆栈空间,所以原则上不支持递归调用,如果想要完全开放的堆栈,那就用PIC24好了,PIC总来没想过在一款产品上满足所有的需求,每个产品的系列都有确定的定位和目标细分,如果非要在PIC16上实现递归调用,可以在RAM上模拟软堆栈实现,但肯定要麻烦一点,不想麻烦就PIC24好了,价格也很便宜。
3、俺不懂FPGA,所以就不回答了

使用特权

评论回复
11
junma10000| | 2012-5-24 11:54 | 只看该作者
一直在用啊,性能很好很强大

使用特权

评论回复
12
gx_huang| | 2012-5-24 12:02 | 只看该作者
9# yewuyi

王婆卖瓜,这瓜当然好!
上次我说的中断数据保护BUG,不知道改了没有。
我C语言不好,所以不会玩花样。
用户的反馈,不说是否正确,基本是真实的。

上次说的是一个变量,在主程序里赋值,在中断里会用到。
明明要赋值1,编译的结果是先清零,再加1。

使用特权

评论回复
13
autopccopy| | 2012-5-24 12:05 | 只看该作者
技术帖,学习了。

使用特权

评论回复
14
Tinnal|  楼主 | 2012-5-24 12:17 | 只看该作者
本帖最后由 Tinnal 于 2012-5-24 12:26 编辑

谢谢yewuyi的回答,其实我最想了解的就是第一二个问题,关于FPGA,我在这个项目中也不打算去用,因此不作讨论。
关于第二个问题,我想问的是,我知道,51也不能递归调用,毕竟内存就这么点。
我指的函数嵌套而不是指递归调用,举个例来说,对于只有8级堆栈的PIC16F676:
函数1 调用 函数2,函数2 又调用 函数3,函数3 又调用 函数4,函数4 又调用 函数5,函数5 又调用 函数6,函数6 又调用 函数7,函数7 又调用 函数8,函数8 能调用 函数9吗??
要说明的是,这里的函数都没有递归,包括直接递归和间接递归。
就像你说的那个,“这和51通常意义上在RAM开辟堆栈区有区别”,51在函数调用时,函数的返回指针是压到内存的,因为内存只要够,调用级数就可以比较大,我之前的51经验来说,调用个32级完全没有问题。而就PIC16F676而言,他的硬件栈只有8级,我想问的是,在真正的C使用环境当中,有没有函数嵌套不能超过8位的限制?

我知道PIC24在这些问题上已经处理得非常好,精确来说,从PIC18开始,microchip就已经很重视C语言了,这也在它的PIC18体系结构中得到体现,如下的wiki的的描述:
PIC18 high end core devices (16 bit)
Microchip introduced the PIC18 architecture in 2000. [4] Unlike the 17 series, it has proven to be very popular, with a large number of device variants presently in manufacture. In contrast to earlier devices, which were more often than not programmed in assembly, C has become the predominant development language [5].
The 18 series inherits most of the features and instructions of the 17 series, while adding a number of important new features:
call stack is 21 bits wide and much deeper (31 levels deep)
the call stack may be read and written (TOSU:TOSH:TOSL registers)
conditional branch instructions
indexed addressing mode (PLUSW)
extending the FSR registers to 12 bits, allowing them to linearly address the entire data address space
the addition of another FSR register (bringing the number up to 3)

但PIC18如果用74系列芯片去做,已经是太复杂了。所以,如果我选定PIC,那就会是PIC16。因此我特别关注的是PIC16的用户的意见。

使用特权

评论回复
15
Tinnal|  楼主 | 2012-5-24 12:22 | 只看该作者
把PIC18关于地址这块的结构图也给贴出来。



可以看出来PIC18在堆栈上已经变化很大了。多了个Table Pointer,而且像wifi所于,调用堆栈也能读写了。这样,编译器就能更灵活的处理函数调用的问题。

使用特权

评论回复
16
Tinnal|  楼主 | 2012-5-24 15:16 | 只看该作者
自己的贴也得顶一顶,叶侠不回了?还有没有其实PIC16的用户回一回?

使用特权

评论回复
17
yewuyi| | 2012-5-24 15:18 | 只看该作者
9# yewuyi  

王婆卖瓜,这瓜当然好!
上次我说的中断数据保护BUG,不知道改了没有。
我C语言不好,所以不会玩花样。
用户的反馈,不说是否正确,基本是真实的。

上次说的是一个变量,在主程序里赋值,在中断里会 ...
gx_huang 发表于 2012-5-24 12:02


上次你提到的BUG已经证实了,俺并没有说绝对没有BUG,说到底,编译器也只是一个产品,而作为PICC来说,其质量水平相对其它知名C编译器来说,并不会比那些编译器质量低劣。
特别声明,俺说‘大多数说不好的人,只是因为自己的C语言基础不好还总是想着玩'花活',花活玩不转了就感觉PICC不好而已’,绝不是针对你所言,俺对你的水平不了解,俺只是根据版面中那些声讨编译器有问题的帖子总结而来的结论。

另外,王婆卖瓜也谈不上把?这瓜不是俺种的,也不是俺卖的,俺又不挣钱,也只是PIC的一个用户,不拿MICROCHIP任何一分钱好处。

使用特权

评论回复
18
yewuyi| | 2012-5-24 15:20 | 只看该作者
谢谢yewuyi的回答,其实我最想了解的就是第一二个问题,关于FPGA,我在这个项目中也不打算去用,因此不作讨论。
关于第二个问题,我想问的是,我知道,51也不能递归调用,毕竟内存就这么点。
我指的函数嵌套而不是指 ...
Tinnal 发表于 2012-5-24 12:17


关于你这个函数调用问题,不存在问题,可以调用下去,只要不溢出堆栈的深度即可。

使用特权

评论回复
19
兰天白云| | 2012-5-24 15:24 | 只看该作者
PIC16系列最大FLASH已达到16KW

ARM并没有想象那么普及,几乎所有的芯片厂家都有自己独有的32位机,如TI,ST等

使用特权

评论回复
20
yewuyi| | 2012-5-24 15:27 | 只看该作者
个人认为,ARM只是市场推广的比较好,从性能上讲,未必有MIPS好,从和各种外设结合的角度来看,也未必有MIPS好。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

3

主题

773

帖子

2

粉丝