打印

PIC16系列用的人还多吗?

[复制链接]
楼主: Tinnal
手机看帖
扫描二维码
随时随地手机跟帖
21
Tinnal|  楼主 | 2012-5-24 15:28 | 只看该作者 回帖奖励 |倒序浏览
“只要不溢出堆栈的深度即可"
对呀,就是这个问题,因为PIC18F676的调用堆栈是8级,如果编译器不做任何处理,把一旦调到到”函数9“,调用堆栈原则上就会溢出。如果此问题存在,则函数的嵌套层数就要由程序员去保证不能大于8。
现在想知道的是HITECH有没有在编译层面去解决这个限制。
我本人其实没有用过PIC,因此想向叶侠了解一下。
如果不明确,可以给我写个小程序,测测能不能调用到”函数9“吗?

使用特权

评论回复
22
yewuyi| | 2012-5-24 15:35 | 只看该作者
“只要不溢出堆栈的深度即可"
对呀,就是这个问题,因为PIC18F676的调用堆栈是8级,如果编译器不做任何处理,把一旦调到到”函数9“,调用堆栈原则上就会溢出。如果此问题存在,则函数的嵌套层数就要由程序员去保证 ...
Tinnal 发表于 2012-5-24 15:28



以前用的一些版本编译器在编译时会给出警告或者错误,但现在新版本不知道了,现在写代码的时候,都自然的写不了多少深度的函数调用了,我现在很少写出超过4层以上的函数调用。

使用特权

评论回复
23
yewuyi| | 2012-5-24 15:36 | 只看该作者
比较新的PIC16芯片有一个堆栈溢出标志,例如PIC16F1933

使用特权

评论回复
24
Tinnal|  楼主 | 2012-5-24 15:51 | 只看该作者
就算有”堆栈溢出标志“,也只是一个指示作用。你的意思是,写C语言时,对这款芯片,真只能进行8层调用?用HITECH也没能突破这个限制?

叶侠,能给我做做实验看看PIC16F676最新的C编译器,能不能突破这个限制吗?
其实要突破这个限制,只有不去调用Call,而用Goto命令去实现函数调用,同时,自己去维护这些返回地址。现在就是不知道,新的C语言编译器,有没有按上诉方法去突破这个限制。
如能帮我做这个实验,本人将不胜感激。

使用特权

评论回复
25
yewuyi| | 2012-5-24 16:37 | 只看该作者
经过简单测试,会出现警告,测试代码见附件。

具体你可以自己编译看看,编译器版本PICC9.80

test.rar

81.96 KB

使用特权

评论回复
26
yewuyi| | 2012-5-24 16:37 | 只看该作者
芯片型号:PIC16F1933,16级硬件堆栈。

使用特权

评论回复
27
yewuyi| | 2012-5-24 16:41 | 只看该作者
就算有”堆栈溢出标志“,也只是一个指示作用。你的意思是,写C语言时,对这款芯片,真只能进行8层调用?用HITECH也没能突破这个限制?

叶侠,能给我做做实验看看PIC16F676最新的C编译器,能不能突破这个限制吗?
...
Tinnal 发表于 2012-5-24 15:51


我2001年用PIC16C57的时候,用ASM写代码,使用GOTO来突破硬件堆栈的限制,MCHP大概在2005年左右曾经出过一本应用介绍,就介绍了这种所谓的软件堆栈的方法,其实就是在使用RAM空间来模拟出堆栈而已。

使用特权

评论回复
28
fangfei036| | 2012-5-24 16:48 | 只看该作者
各位前辈都到了,硬件堆栈的限制,长见识了。TInnal大哥的所用的9260引脚n多,够难想象的,可我这水平,想超出这个硬件堆栈的限制都很难!!!

使用特权

评论回复
29
Tinnal|  楼主 | 2012-5-24 16:58 | 只看该作者
我这边没有这个环境,没法编译。
不过编译器只发出的警告,而没有发出错误,是否能证明它已经发现了堆栈的问题(从lst输出已经证实),并且通过CALL来跳出这个限制?
叶侠,能不能给我运行一下,看看运行结果对不对呀。以确定编译器真帮我们处理掉这个问题了,那真的只是一个警告。我这边没有环境,自己做不了这个实验。麻烦了。
如果是自己写汇编,那肯定可以用CALL来解决,但现在都已经用C了,就不能再直接用CALL了。

使用特权

评论回复
30
fangfei036| | 2012-5-24 17:17 | 只看该作者
25# yewuyi
叶侠,您附件的測試文件怎么编译不通过呢?是用什么芯片燒寫的?

使用特权

评论回复
31
Tinnal|  楼主 | 2012-5-24 17:19 | 只看该作者
他那是PIC16F1933,你得把代码拷到你的工程,改改。谢了。

使用特权

评论回复
32
弓长月月鸟| | 2012-5-24 17:32 | 只看该作者
叶公对PIC单片机研究很深啊,以后要多多请教了。:handshake

使用特权

评论回复
33
Tinnal|  楼主 | 2012-5-24 17:38 | 只看该作者
叶公对PIC单片机研究很深啊,以后要多多请教了。:handshake
弓长月月鸟 发表于 2012-5-24 17:32

你如果以后天天用PIC,你最终也会像叶侠那么熟,呵呵。
我还等着叶侠和fangfei036给我测试呢?唉,要是现在我有个测试环境就好了,不用麻烦他们两位了。

使用特权

评论回复
34
fangfei036| | 2012-5-24 18:22 | 只看该作者
本帖最后由 fangfei036 于 2012-5-24 18:33 编辑

33# Tinnal

tinnal大哥,怎么我在编译器找不到这个型号的芯片呢???PIC16F1933??
我用的编译器是MPLAB  V8.10的,怎么设置那里没有找到这个芯片呢?
看起来叶侠的代码有点像是51的,要用keil??
不好意思,刚吃完饭回来

使用特权

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


能上pic16的,数据处理要求都不大,整汇编就是了,写啥C啊。

使用特权

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


请下ARM的勘误表,对比一下PIC的,你就知道PIC的生存空间在什么地方了。

使用特权

评论回复
37
liuweijun1| | 2012-5-24 18:57 | 只看该作者
问题是现在导弹比大**还便宜, 新开发的产品我想应该不会再用PIC16系列了.

使用特权

评论回复
38
nongfuxu| | 2012-5-24 19:14 | 只看该作者
关注了很长时间PIC芯片, 从目前MCU现状来看,PIC的优点还没有几家能替代.
到目前还没有合适的产品把PIC优点用上.

使用特权

评论回复
39
Tinnal|  楼主 | 2012-5-24 19:17 | 只看该作者
本帖最后由 Tinnal 于 2012-5-24 19:19 编辑
他那是PIC16F1933,你得把代码拷到你的工程,改改。谢了。
Tinnal 发表于 2012-5-24 17:19


你不要考虑他的工程,也不用考虑他用的MCU,你把他的main.c等几个文件拷贝出来,放到你那个PIC16F877工程里,改改他的程序,把他的输出改成你那个LED输出,就行,给我看看能不能正确运行,麻烦了fangfei036。

他用的编译器为PICC9.80。你不用管,你还是用你的IDE,你的MCU。

使用特权

评论回复
40
Tinnal|  楼主 | 2012-5-24 19:20 | 只看该作者
关注了很长时间PIC芯片, 从目前MCU现状来看,PIC的优点还没有几家能替代.
到目前还没有合适的产品把PIC优点用上.
nongfuxu 发表于 2012-5-24 19:14


说来听听,你认为的PIC优点有什么?

使用特权

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

本版积分规则