佳礼资讯网

 找回密码
 注册

ADVERTISEMENT

查看: 3404|回复: 29

询问比较不同的Microchip PIC的programming language

  [复制链接]
发表于 10-3-2011 02:17 PM | 显示全部楼层 |阅读模式
本帖最后由 Scoutfai 于 10-3-2011 02:30 PM 编辑

比较popular的应该是Basic和C吧。C++和Matlab也有听过。其它的当然也存在。想做一个意见,经验的收集和调查,比较不同的programming language的利和弊。讨论主角并不一定只局限于C和Basic(虽然这两个应该是最受欢迎的啦)。

若以一个句子简要的叙述问题,那便是:“哪一个programming language用于PIC比较好?”

我觉得应该考虑到的项目有以下:

1)哪一个比较快programming?(就是说同样的内容,哪一个更快完成篇写)
听说过这么一个说法:要简单的program,Basic比较快。要复杂的,C比较好。原因是C拥有built in的library,所以有些复杂program里用到的function(如数学)可以直接用,不必像Basic这样必须先自行创造。

2)哪一个较省memory?
也是听说C在这方面较Basic优秀。但在现在的PIC越来越便宜memory越来越大的情况下,有人主张即使有优势也带不出显著利益增进。所以他们认为若要决定专修哪一个,这个因素不应被纳入考量。

3)哪一个较多辅助资源?(讨论网站,使用社群量,免费软件,参考书籍,等等)
在这方面,我个人觉得Basic好像比较优秀,免费东西很多,对hobbyist来讲有利。

4)哪一个较有一般性的优势?(意即你学会了这种语言,即使未来换去别的品牌的单晶片,所学的仍然可以使用,只不过某些小部分如register等的需要依据这个新品牌做出改变。)
关于这点,听过很多人主张C在这方面是所向无敌。换去什么品牌都难不倒会C的人,而且不同品牌的单晶片都有C的compiler。难道Basic做不到吗?

5)哪一个较专业?
听过人主张说工程师们都用C,Basic多是hobbyist用因为刚开始时较易学。另外一个原因也是因为这些前辈工程师以前读书的时候学得深的都是C的因素啦,然后公司请他们来就自然的用C,新一代工程师来也就跟随传统,渐渐变成一个不成文规定和习俗。


嗯,大概目前能想到的是这么多了。如你有其它比较项目请指教。若你要讨论除了Basic和C之外的语言也请。


我本身试过Basic,C没试过(也不会C的programming),C++的programming我就会啦,但没试过用来做PIC。对于Basic的评语是,真的超简单写(根我写过的C++,Matlab,Fortran程序比较起来),让我可以集中精神想那个program会做些什么,而不是去担心syntax有没有错。但值不值得专修下去,不懂,请高手指教。Basic里我最喜欢的一个特征就是可以用GO TO来将program的execution跳来跳去不同的line,用它来做loop易如反掌,而且这个loop里面还可以设定成某个条件达到又跳去另外一个loop或command。总之就是跳得我好爽。不确定C有没有这样的特征。
回复

使用道具 举报


ADVERTISEMENT

发表于 10-3-2011 04:31 PM | 显示全部楼层
回复 1# Scoutfai



你问的问题我都回答不到。没用过 basic.
不过一般性优势c 还不错。
一开始学c,我用在8051.过后开始用pic, atmega, arm系列的mcu, 一C天下,没遇到什么大问题。

关于go to,c 也是有goto statement,不过要了解如果c programming随意从一个function goto 另一个function, 可能会造成stack overflow.最好goto只是go 在同一个function。 一般上很少用。一般if else, while, for都很够的了。
你check check看basic是否会发生同样的问题。
回复

使用道具 举报

发表于 10-3-2011 04:44 PM | 显示全部楼层
也不用怎样比较, 你喜欢用什么, 就用什么。。
或什么都用。。。才看自己适合什么。。
用到不好用, 就转吧。。。

你喜欢Basic 语法的 , 可以用PICbasic。
你要专业的C, 用Hitech C (建议)
你要简单快速上手的, 用CCS C. (我在用的, 可能被逼转去 Hi-tech C了)
回复

使用道具 举报

发表于 10-3-2011 05:24 PM | 显示全部楼层
回复 2# fritlizt


    嗨,fritlizt大大,请问你是玩哪一种的ARM MCU 呢?哪家牌子的?多少BIT的呢?可以讨论讨论吗?
回复

使用道具 举报

发表于 10-3-2011 05:43 PM | 显示全部楼层
回复 4# fayewu


   
nxp还有stm的。
都是32bits.
你呢?也是从事这方面的吗?
回复

使用道具 举报

发表于 10-3-2011 06:13 PM | 显示全部楼层
小第也是有在摸着STM32,IAR EWARM,可一交流交流一下。主要是I2C 通讯。
回复

使用道具 举报

Follow Us
发表于 10-3-2011 06:21 PM | 显示全部楼层
STM32 在本地开始流行了吗?
回复

使用道具 举报

 楼主| 发表于 10-3-2011 06:58 PM | 显示全部楼层
本帖最后由 Scoutfai 于 10-3-2011 07:00 PM 编辑
回复  Scoutfai



你问的问题我都回答不到。没用过 basic.
不过一般性优势c 还不错。
一开始学c,我 ...
fritlizt 发表于 10-3-2011 04:31 PM

这个问题确实是很无法得出一个普罗大众都接受的结论的。我的目的是,收取其他人的意见和经历,来决定业余专修在哪一个语言。

你的经验印证了C在一般性里的优势。现在就看有没有网友分享曾经用Basic走天下了。

原来C也是有这个go to的特征,那么两个在这一方面就打平了。stack overflow,用简单的句子来讲,是infinite loop的意思吗?

请问,你会C的,这样你会不会C++呢?在programming界里,C++是比C更高一层,可是却不见的在实用上人们渐渐用C++代替C写MCU的程序。

你是从事这一行的吧,可以问问你的同事们看他们的意见,然后分享在这里吗?
回复

使用道具 举报


ADVERTISEMENT

 楼主| 发表于 10-3-2011 07:11 PM | 显示全部楼层
也不用怎样比较, 你喜欢用什么, 就用什么。。
或什么都用。。。才看自己适合什么。。
用到不好用, 就转 ...
pic 发表于 10-3-2011 04:44 PM

网上很多讨论此课题的人也是持和你相同立场的观点(两个都试,再来决定)。但搞笑的是,大多数这些两个都试下的人,到最后决定用哪一个却不是根据自己试了后的感想决定,而是选择某某语言因为本身已经有软件了不想再买,或公司多数人用某某语言就跟他们,或自己已开始学的是某某语言懒惰再学新语言。不是说这样的决定方式不好啦,只是跟当初“两个都试,再来决定”的目的有点离题。

但两个试了再来决定我是蛮认同。

Hitech C和CCS C,都是C语言,这样两个有什么差别?built in function多一点,syntax不一样?
回复

使用道具 举报

发表于 10-3-2011 08:44 PM | 显示全部楼层
小弟也是一 C 走天下的。其实在工业界,大多数人也是在用 C。原因没几个。其中一个就是如你所说,只要学会 C,要用什么 MCU 都不成问题。而且许多 MCU 厂家的官方 library 和 sample 都是用 C 的。还有就是,不知你有没有发觉到,许多 programming language 的 syntax 和 C 是很相似的?如 C++, java, C#,Arduino 的 language 等。所以当你学会 C 后,要在学其他的语言应该都不是问题了。

至于为什么多数人都用 C 却不用 C++ 的原因是 Compiler 的 support 吧。就好像 PIC MCU 目前为此还没有 C++ 的 compiler。C 和 C++ 的 syntax 其实是瞒相似的,只不过 programming 的 concept 有点不一样。C++ 是 object-oriented 的,C 却不是。但是 C 却比较原始,比较接近 MCU 的操作方式。所以 C 是大多数人的首选。
回复

使用道具 举报

发表于 10-3-2011 11:15 PM | 显示全部楼层
本帖最后由 fritlizt 于 10-3-2011 11:59 PM 编辑
这个问题确实是很无法得出一个普罗大众都接受的结论的。我的目的是,收取其他人的意见和经历,来决定业余 ...
Scoutfai 发表于 10-3-2011 06:58 PM



*解释有误,c programming不允许goto 跳去其他函数。   
stack overflow不是infinite loop.有一点离题了。不过解释一下。
一般mcu都会有stack pointer, 指向一个memory space.
stack有好几种功能。比较常看到的就是function calling, 指向储存return address的memory.
通常不小心用goto会有什么后果呢?

来个例子:
那个比例8051.stack pointer本来是07H,  我从address 1234h 呼叫一个函数,这时候stack pointer会increment 变成09h. 1234h 16 bit address会被push进去address 08h & 09h. 假如你return from function, mcu就会从stack pointer 拿到你应该return的地址也就是 1234h,然后stack pointer会变成07h.
假设你用jump, mcu只是单纯用jump instruction跳去你要去的地方, stack pointer依然是09h, 两个memory address被占用了,没用到。
如果你repeat 这个operation x N 次, 会发生什么后果?会overflow,然后你的function return 就傻傻的了。
有些compiler and mcu会用stack来当作temporary memory来储存,这时候可能会发生overlapping,也是会死。

我解释到一塌糊涂, 不懂你懂我讲什么吗。哈。希望你你明白。 所以在c goto不要乱用。我不懂basic是怎样的。你可以自己查查看。

c++我也是有用。 有些firmware我是用 c/c++ mix来写。 c++是object oriented, 写program比较有弹性。我个人认为啦。不过support c++的compiler好像没有c的来的普遍。memory efficiency方面我没有认真比较过不懂。不过c的确是比较接近mcu的原始操作。

没有同事 ,不过以前看senior和同学,都是c的kaki,有一些是basic的kaki.
那时候也没有比较 c & basic. 答不到你。
回复

使用道具 举报

 楼主| 发表于 10-3-2011 11:19 PM | 显示全部楼层
小弟也是一 C 走天下的。其实在工业界,大多数人也是在用 C。原因没几个。其中一个就是如你所说,只要学会  ...
waiweng83 发表于 10-3-2011 08:44 PM

哦,第三个支持C的高手。你的经验也验证了C的一般性优势。
如果用我的角度讲(因为我读书时是学C++没有C),我会认为很多programming language和C++很相似。跟你的意思也差不多一样啦。

对咯,C++的compiler太难找了,免费的更是稀罕。
回复

使用道具 举报

 楼主| 发表于 10-3-2011 11:34 PM | 显示全部楼层
stack overflow不是infinite loop.有一点离题了。不过解释一下。
一般mcu都会有stack pointer ...
fritlizt 发表于 10-3-2011 11:15 PM

谢谢解释,离题不介意。
你的解释,对我而言,明似不明,不明似半明
我所读得出的讯息是,如果某个人不断用goto,那么function return时会return错地方,指令顿时好像在主人翁不知情下插队进其它line继续执行,而主人翁就顿时被意料之外的执行摸不着头脑。对不?
回复

使用道具 举报

发表于 10-3-2011 11:38 PM | 显示全部楼层
本帖最后由 fritlizt 于 11-3-2011 12:11 AM 编辑

回复 13# Scoutfai


   
不明白也没关系。这些了解就好。
现在c compiler为了防止这类事情,你只能在function里面用goto.
也就是说你要call function,一定要有一个return .这样你的stack pointer就不会乱。

*刚上网查了, 好像不能随意goto other function.可能我以前误解了老师的意思。不过还是很多人不建议c program用goto.
回复

使用道具 举报

发表于 11-3-2011 12:00 AM | 显示全部楼层
本帖最后由 fritlizt 于 11-3-2011 12:03 AM 编辑

回复 13# Scoutfai


   
我对goto 的解释有误,参考以上。
功夫还不到家
回复

使用道具 举报

发表于 11-3-2011 01:25 AM | 显示全部楼层
Scoutfai, 介意讲一下, 你的职业, 学PIC 的目的, 是课业, 工作上需要, 还是个人业余兴趣?
没有错的话, 2008 年你已经在询问了, 快2~3年了, 还是模糊没有定位吗?

你是要做到很专业的, 其实什么语言都可以。。。
就算你用C, 或basic, 遇到没有的fucntion, 你还是要自己的function。。
重点是技巧, compiler 只是神兵利器而已。。。

各种compiler, 他们的分别只是效率高不高, 编译后占用了多少RAM 或ROM, 支持pointer 吗, 是不是ANSI C, 价钱多少, compiler有臭虫(bug)时快不快被解决, 对新MCU 的支持的更新快不快。。

你一直不断的提到C++, C++ 的compiler需要很多MCU RAM的。。RAM 在MCU 里很宝贵的, 所以没有C++ 的PIC MCU Compiler, 或目前我知道的没有。。

如果你真是要学PIC MCU, 不是其他的MCU, 最好的就是Hi-Tech C 了。。
为什么? Microchip 官方都指定用 HI-Tech C了, 以前是C18, C32。

我很喜欢, 最喜欢的就是CCS C。。但是为什么我要被逼转去 Hi-tech C?
那是因为CCS C 不是ANSI C standard, 他没有办法运行Microchip 提供的C源码。。
要port 去 CCS C的, 有时不是我的能力能做到的事。。比如MiWi的stack 怎样在CCS C 上使用?没有那个Library。。
怎么办? 简单的方法就是用ANSI C 的compiler。。。

再说, 为什么会推荐用C 呢?
因为PIC18F 开始的MCU, 在指令上, 已经设计成 C Compiler Optimized Architecture。

Goto。。 C 也有goto.。但是是避免使用的。。。 用大量的goto, 表示你的程序的结构是很弱的。。。
你又要如何善用PIC MCU 的资源, 做到很像Multitasking 呢?
你现在可能不会明白这句话的。。。因为, 你的经验是C++, 用在电脑上的。。在MCU上, 如果你没有体会, 你能难想象的。
但是当你要写程序, 比如16F628A, 一个只有2K 的ROM, 228byte 的RAM,还有bank,  你就必须写到结构性很强的, 效率很高的程序, 这次都是编程的技巧了。。。

我不知道Rothmans 大大送你的16F886你是否有用, 怎样用法, 如果你真的有用, 你就会明白的。。
回复

使用道具 举报


ADVERTISEMENT

发表于 11-3-2011 11:52 AM | 显示全部楼层
小弟第一接触是 C 及 ASSEMBLY, 工作后因公司用 BASIC,就丢下 C 两三年, 那时觉得 BASIC 还真好用,但随着接到的 PROJ 越来越复杂,就越显得 BASIC 难以应付这些 PROJ。所以现在又开始学起 C 咯,哈哈~~

最明显的差别在于 SIGNED INTEGER, 我也曾经开贴问过。C 在这方面是好用很多的。。。
回复

使用道具 举报

发表于 11-3-2011 12:06 PM | 显示全部楼层
小弟第一接触是 C 及 ASSEMBLY, 工作后因公司用 BASIC,就丢下 C 两三年, 那时觉得 BASIC 还真好用,但随着 ...
tjtan81 发表于 11-3-2011 11:52 AM

是用那一种PICBasic?  

Basic 很适合业余爱好者, function 也很多。。。
比如
FREQOUT 13, 400, 2500 ' Beep to indicate ready

DTMFOUT PORTB.0,[0,5,2,3,8,7,5,2]

C 可能你要写很多很多行了。。。
Basic 好像自动排挡的车, 踩油就走了。。。简单。。。
只是, 没有力。。 你不能控制细节。。。
回复

使用道具 举报

发表于 11-3-2011 12:14 PM | 显示全部楼层
我是用 MELABS 的 PIC BASIC PRO。

也对,所以有察觉到好多学院学生,尤其 MECHATRONIC 的学生都用它来控制 ROBOT,才几行 CODE 而已呀,哈哈。

但对于要做大 PROJ, 就不建议咯。。。
回复

使用道具 举报

发表于 12-3-2011 02:33 PM | 显示全部楼层
我是用 MELABS 的 PIC BASIC PRO。

也对,所以有察觉到好多学院学生,尤其 MECHATRONIC 的学生都用它来控 ...
tjtan81 发表于 11-3-2011 12:14 PM

有用过BasicStamp 吗? 我看都没看过。。听说也是很简单很好玩, 很适合业余爱好者的。。
还有Arduino, 玩简单robot的人也很喜欢。。。

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

 

ADVERTISEMENT



ADVERTISEMENT



ADVERTISEMENT

ADVERTISEMENT


版权所有 © 1996-2023 Cari Internet Sdn Bhd (483575-W)|IPSERVERONE 提供云主机|广告刊登|关于我们|私隐权|免控|投诉|联络|脸书|佳礼资讯网

GMT+8, 18-4-2024 09:17 AM , Processed in 0.077099 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表