话题讨论:MSP430编程方式选择

对于MSP430来说,有一些芯片是有库函数的,大家喜欢继续沿用寄存器开发还是使用新的库开发,还是二者都用?

有何想法见解,欢迎点击阅读原文跟帖回复讨论。对于优秀的见解,我们将选择3名,赠送精美实用礼物。下面就一起看看网友们的精彩讨论吧!

freeelectron:

库函数,库函数更容易上手,开发更快。

石玉:

如果同时也提供了一些库函数的例程的话当然是用库函数开发,怎么方便怎么快就用什么

先把要做的功能实现了再有时间去仔细了解深层原理,有感性认识后学习也会快一些

zhang7309:

用库上手快,并且比较方便,不过对于寄存器的配置有时候还是需要用的,但是感觉有的库可能为了兼顾通用性不够精简,必要时可以自己简化一下。

电子微创意:

1.对于想快速了解并上手开发还是用库比较方便,甚至不需要对芯片手册仔细研读就可以开发。相对复杂的如涉及到usb协议的还是要用库开发更省劲!
2.想了解芯片还是用寄存器方式更好,尤其对于Debug更有利!
3.还可以两种方法混用,对于芯片的初始化工作可以调用库来完成其他内容就操作寄存器,我就是这样用ti的

lcofjp:

用库开发是趋势,代码简洁,开发效率高,缺点可能是生成的二进制体积会略大,运行效率或许也有轻微影响,所以我觉得容量小的单片机可以优先使用寄存器来开发,因为容量小的功能相对简单,寄存器也少,用寄存器操作相对来说难度也会小。但是容量大功能复杂的单片机,用库来开发肯定是首选,或者至少也是需要库和寄存配合使用。
以上仅是个人观点。

phwj2006:

430一般我还是使用寄存器操作。因为主要是低功耗的内容,自己操作库更简洁。但是也有麻烦的地方。需要一定的开发经验。

库函数我认为开发简单适合初级者开发使用。一些开发复杂的内容,比如触摸按键还是用库比较合适。

汤权:

非常非常喜欢这个问题,一直想跟别人讨论关于库函数和寄存器的优劣,其实不管是什么处理器都有这个问题,因为之前弄STM32和MSP430的时候都有这样的疑问,用库函数的话程序显得很死板,而且编译出来的bin文件好像还大一点,最重要的是没有一种自己在操控处理器的感觉,而是使用库、库、库。所以一开始的时候开发我都是执着于使用寄存器开直接开发程序,感觉使用寄存器的位操作心里很舒服。不过到了后来发现有的时候只使用寄存器是不太现实的,比如使用到了USB、以太网、SD卡的时候,光是这些个硬件的协议都能整死人,别说是用寄存器来一点点调配这个外设的参数了。所以后来我还是使用了库函数来开发,但是单纯使用库函数会有一些问题,就是速度,毕竟调用函数的速度和直接操作寄存器的速度还是差了么点,有的地方例如高频率的中断处理函数中使用几行寄存器的操作就搞定使用一大堆库函数的任务了,速度和大小都会是最优的, 所以我还是将库函数和寄存器两者结合在一起使用,将一些常用的例如GPIO口的操作都使用宏来定义。最后我想说的是想要小打小闹的玩玩MSP430的话直接使用寄存器没问题,但是想要做工程,做复杂,个人来看还是需要库函数,也可以适当加入一点寄存器的成分。(注:上面的寄存器是指“直接操作寄存器”)

Bingqi23:

做小项目的时候还是习惯直接寄存器操作,在做一些大点的项目时候,优先选择库函数了

hjl240:

当对效率要求不高的时候,使用库函数方便。对效率要求比较严格的话,还是要用寄存器开发。

clls2080000:

功能多的,容量大时,用库函数,功能少,容量小时,用寄存器

elvike:

楼上的都说了,容量大的用库,容量小的用寄存器。我想说的是除了看mcu本身存储器之外还要看系统功能,比如有一些时间比较苛刻的代码,用库的后果是哭成海。除此之外还要看个人,如果是江湖高手那自然不用说了,新手还是从库入门然后看懂库的流程,修改成寄存器这个办法不错的。现在mcu的性能越来越高了,以前用个51的地方都想换个m3,我们队长说过一句话:水平不够,性能来凑。这句话哪个在前哪个在后,貌似都有理

shinykongcn:

两者都需要吧,库虽然方便快速,但是寄存器有时候更高效啊,操控感更强~

16号哨兵:

还是库方便点,注意效率和器件性能限制的时候再用寄存器。队长的水平不够,性能来凑。真是如此

dageliu:

在学习STM32的固件库,对比430我还是觉得430直接配置寄存器比较简单,可能是习惯了直接配置。但库还是必要的。就像楼上说的,二者各有各的优点,要根据实际情况决定是用库还是直接配置,这也得看个人喜好!

RCSN:

对于DIY或者个人开发的,新手或者刚接触TI的, 还是先用寄存器操作,毕竟寄存器开发更能理解TI的MCU的寄存器,后续再使用库函数来进行开发。
   对于公司开发的,可以用TI已经成熟的库函数进行开发,这样有助于后期人员因为调动等原因引起的不必要的交接困难。

lansebuluo:

开始学习的话,用库函数,上手快,要是想明白原理,还是要仔仔细细看库内容。
这些库,是经过严格测试的,拿到产品上用,比自己编写可能更稳定

数码小叶:

要说MSP430编程方式选择,实际上估计没有多少人用库,个人觉得这个就和TI有关了,库的通用性太弱,不是支持所有器件,参数太复杂,和ST没法比,也可能和TI的库出现不久有关吧。所以花时间去适应库觉得意思也不是很大,所以430一般更倾向于寄存器操作,一是没那么复杂,二是,每个模块都有例程,上手也不难。
另外,TI的Grace本来是个很不错的开发工具,可惜貌似被放弃了,然而ST却推出了类似的CUBE

,让开发大大简化

zgf004494:

没有用过函数库,一般都是参考列程+ PDF , 调完程序,再也不回头看,  希望 有更多函数库这样参考性更多,通用性强

rowen800:

寄存器开发缺点:程序可读性差、开发速度慢,但执行效率高点。库函数开发是 趋势,代码易读,移植性好。

xunke:

用库比较方便,然后再优化。

DavidZH:

底层+库,必须的,搞起

huaiqiao:

1、针对楼主提出的问题,以前我也有此疑问?
为什么430要像51一样,如此麻烦的操作寄存器,没有更加简单的方式? 后来接触到32我才发现,其实库函数的本质还是在操作寄存器。这个只是相当于“站的高”一些而已;
以前刚开始接触430的时候是f149,属于比较经典的老款单片机了。写代码的时候,要一遍看用户手册,一遍在iar中敲代码。
其实如果是经常用430的工程师,可以将一些常用的寄存器的操作封装成函数。这样直接引用函数就好。这个思路其实我在最近学习2530的时候想到的,可能我自己比较笨,也许有更好的办法。

上次我跟一个网友交流说,现在比较新的430的片子有库函数了,不过我听了以后没有去深究。

2、既然提到IDE,那么ti在430 这块的话,开发环境据我了解还是以ccs和iar为主。说实话,ccs我没有碰。原因是因为它很大,动不动就几个G。。。。听说它很强大,但是对于我来说,我不想浪费电脑空间。所以就选择了iar。。。。

3、当然从开发的方便的程度来说,库函数开发可能会更加容易上手一些,或者说更加方便一些,这也就是我身边的几个同事都偏向于使用32,而非TI的430或者飞思卡尔,以及小日本的额瑞萨。如果ti能把这块做的像32一样漂亮(说实话,新的库我没有接触过哦),从低功耗的角度来讲的话,会更加的受欢迎。
寄存器,这个最底层的东西。因为debug的时候,一看就知道,语句操作寄存器操作的对不对?
我是奔着插线板来的,评不到的话,其他奖品留给其他网友。哈哈,就这么“无耻”。O(∩_∩)O哈哈~

ketose:

用库函数,还是使用寄存器,这个话题经常看到在很多论坛都有讨论。喜欢用寄存器的说:库函数效率低,不能了解低层。喜欢用库函数的说:寄存器开发代码看起来晦涩,开发效率低,开发复杂。总之是公说公有理,婆说婆有理。

在我看来不能一概而论,首先任务事物的发展都要经历从低级到高级,从简单到复杂的这么一个过程。单片机软件开发也不例外。从最初的只能用汇编写,到现在可以使用C来写代码,再到可以使用C++来写代码,再发展到现在可以使用脚本(Python)来写.无不是多少软件硬件工程师努力的结果,其目的只有一个:就是希望简化单片机开发难度,提高单片机开发效率。

我们再来看单片机的发展,从最初的4位机,到8位机,到16位机,再到现在普遍使用的32位机,单片机的硬件也是超来超复杂,寄存器也从原来的十几个到二十几,三十机到现在的近百个。刚开始编程可以使用寄存器,我们能记住那么区区几个寄存器,可是越到后面寄存器越来越多,我们已经无法记住所有寄存器的使用方法。但是我们人类是聪明的动物,我们会总结过去的经验,把一些比较模式化的寄存器操作封装成一个一个的函数,而且起一个比较直观的名字。以后使用的时候,我们只需要调用一下以前总结的函数,不用一句一句的写寄存器了。库函数就这样诞生了。哇,人类又向前迈进了一步。。。

接下来我们再来看看软件的发展,现在比较流行的Arduino,为什么能火起来?ARM为会么要致力推广Mbed?为什么单片机也要跑操作系统?回答这个问题我们先得了解下Arduion和Mbed,使用过这两个系统的人都会为它们的简单而折服,我不需要有很深的单片机知识,我一样能让我的四轴飞行器飞上天,一样能让两轮平衡车站起来,我只需要有数学知识和一点点电路知道就够了。这就是Arduion和Mbed努力的目标。就是因为软件工程越来越复杂,一个人的能力是有限的,所以我们要分工合作,熟悉低层的人可以来写低层驱动。熟悉算法,但对低层不熟悉的人可以来写上层业务算法,术业有专攻这样岂不更好。库函数是对寄存器操作的封装,而Arduion和Mbed在库函数的基础上更进一步抽象,使得单片机也面向对象,更符合人们认识事物的逻辑。哦还忘了说一个最重要的使用Arduion和Mbed写出来的程序,移植性更好。虽然现在MSP430还只是发展到库函数,但是总有一天也会像Arduion和Mbed看齐,我希望看到那一天的到来。

总结在单片机硬件越来越复杂,性能越来越强的情况下,我们会优先选择开发更为简单点的方式,在能满足要求的前提下,我们应该优先选择Arduion和Mbed,然后是库函数,最后才是寄存器。当然使用Arduion和Mbed的同时我会穿插使用库函数,使用库函数的同时我也会穿插使用寄存器,也并不是那么绝对。既然人类已经进入了信息化工业时代,我们为什么非要回到石器时代呢?

jishuaihu:

个人其实更喜欢用寄存器来操作各类MCU,430当然也不例外,好处嘛,当然就是能够更清晰的了解内部寄存器的结构,理解每一个制定的具体意义,这样基本上可以确保不会有多余的操作步骤,对于一些有严格操作顺序的寄存器,在学习寄存器的定义的时候肯定也就注意到了,避免了误操作之后再去找原因。同时,使用寄存器操作的代码文本量一般回小一些,执行效率一般也会高一些。不过呢,使用寄存器操作的缺点就更多了,首先就是意义不明确,时间稍微一长就记不清到底表示说明意思了,为了解决这个问题,不得不去写一大堆注释,或者弄一大堆宏定义来表示寄存器的意义。其次,使用寄存器操作在跨平台移植的时候也很麻烦,上述的工作又得重新来一遍,在更好新平台之前需要重新了解一遍寄存器,并且都更改了。

话说回来,喜欢归喜欢,但我现在大多时候也在用库函数,意义明确,使用方便,移植也方便,稳定性也比较好。至于效率低的问题,对于现在性能不断提升的MCU来说已经不算说明问题了。谁也不会把芯片的性能用到极致,否则升级的时候可能就麻烦了。

最终观点,实际使用的话更推荐使用库函数的方式,但喜欢以学习为主的童鞋们多了解一下寄存器的知识,这样对理解芯片的核心部分有好处。

yaoyuanytu:

个人感觉还是库函数比较方便些 理由1.库函数比较直观,方便简单集成度高  初学时候比较容易掌握各个需要的功能直接调用,省去了编写大量基础操作指令 理由2:库函数比较整齐简化,方便移植和交叉使用 理由3:寄存器指令虽然是最底层最核心的东西,但是需要的时候需要大量的基础操作,势必会增加工作量。

mark86739851:

如果要求实时性比较严苛的地方直接操作寄存器是比较节省时间的,如果这时候用一大堆库函数就不太合适了,但如果实时性要求不高的地方,大可放心的用库函数,一来能减少工作量,而来能避免出错,可移植性也大大增强了

wudianjun2001:

个人还是比较喜欢寄存器的,占用的存储空间少,但用库的话会省很多事情,阅读起来也方便,两者结合使用,效果更佳

woody_chen:

个人觉得MSP430没必要用库编程。
1)430没有什么复杂外设(如USB、Ethernet),寄存器配置起来还是比较简单的。
2)由于430存储空间小,不可能像M3一样寄存器都统一编址。这导致库不能统一。
我都是参考TI的示例寄存器代码稍微修改一下。
麻子照镜子,个人观点。

飞翔荷兰人号:

需要自己精确把控的一些内部资源,寄存器用起来还是比较顺手,但是一些复杂外设,像UART、USB这些,直接用库函数也很好

LeoMe:

初学的时候从寄存器+技术手册开始会让你受益匪浅,430是这样,stm也是这样,这些简单的微控制器其实寄存器布局和外设控制方式都很相似的(不信你去对比各厂商的timer的寄存器),这对你以后接触学习其他处理器和找硬件bug是很有帮助的

那么到了实际应用中,对于简单控制应用,寄存器+库函数结合起来效率更高,也可以尝试模仿官方库函数自己去写一些外设驱动(学习如何标准化接口和传递数据),如上面的兄弟所说,纯寄存器编程有利于压缩代码体积和压缩430唤醒后运行的时间,而遇到高级外设比如USB,函数库帮你跑赢deadline。

说到这个话题,从我接触16位MCU开始发现大家都会去纠结这个问题,特别是刚入门甚至还没入门的兄弟。其实这就跟论坛里问“现在是学stm32前景好还是学DSP好还是学FPGA前景好”这种问题差不多,有时间你都学都接触一下,自己找最适合自己的,或者找你所在地最好就业的,去智联搜一下相关职位描述的关键词试试,会帮你找到自己的答案。

库函数和寄存器各自的有点恐怕是一言难以盖全的,恐怕具体到某一行代码具体讨论都不为过。大方向是你要权衡1执行效率 2编程效率 3可移植性 这三点。我也经常鼓励刚入坑的兄弟们多动手动脑,在过程中自己找答案,而不是遇到问题就开始求助,重要的是解决问题的思路而不是解决问题的结果,前者才是你将来涨工资的基石。

笑鸟007:

还是,比较支持库函数,库函数容易上手。易读性、移植性等会更高。另外现在单片机的运行速度,flash等都比以前有了很大的提高,所有利用库函数开发也不要太担心执行效率的问题(当然特殊的要求还是利用寄存器)。当然再利用库函数的时候,一定要对寄存器有所了解,才能高效的开发应用。

(0)

相关推荐