6750|17

7815

帖子

56

TA的资源

裸片初长成(中级)

楼主
 

Google也选择了Arduino,你呢?(选项中包含优势也包含劣势) [复制链接]

本帖最后由 辛昕 于 2015-3-3 17:46 编辑

    坦白说,对于Arduino,我个人是属于不选择的。
    虽然我对它还是很感兴趣,因其在世界范围内受到的推崇和欢迎,强大无比的生态。

    但是,几个事实让我对它挺失望的。
    第一,它只支持AVR一家的单片机。没有我自己喜欢的stm32,也没有什么51,msp430。如果说后两者它可能嫌弃它落伍性能差,那面对32位的ARM,这又是为何?还是说,如同我此前所了解的,Arduino有意只构建AVR(Atmel)的生态?不管如何,这和开放的精神是相违背的;
    其次,就这个问题,我曾经试着在官网看了一下它的底层,我发现它通通采用的 宏 的方法,这其实是一种很常见的手法,包括很多基于stm32的例程,各种各样的都有这种做法。有很喜欢的也有很讨厌的(比如我)。

    我基于当时自己的理解,心里得出的结论是——或许就是因为这个导致它没办法扩展到支持其它单片机。
    当然,如今我对这句话表示沉默,因为,我还没有完整看过整个项目的代码,并不能证明一定如此。

    而且,即便如此,也总是有办法可以实现的——因为我就见过一些库也是采用这种方法,比如 contiki。

    最重要的还是,我认为它只支持AVR单片机,很缺乏开放精神。


     但是,我刚刚重新搜索这个关键词的时候,我发现一个相当惊讶的消息。
     Google把Arduino作为其 Android的标准配件。
这两个曾经经常让我混为一谈或者看错的东西终于勾搭成奸了,并且媒人还是 骨哥。

      http://www.wo3g.cn/index.php?opt ... -17-27-47&Itemid=84


     如果说之前,它只是小打小闹的圈内的玩具,最多也就是GEEK们的高智商工具以外,那现在,搭上了google这条大船,事情则完全不一样。

     前面的5个选项,我觉得还是比较空——因为我个人对它的兴趣不大,也就没有深入使用和研究的经验,没法想到更多。
欢迎你来补充。

     特别希望你在投票之后,在为偶们添加上新的选项之后,说说你自己对Arduino的看法——不管你是喜欢还是讨厌或者不屑。
以我个人来看,虽然我并不喜欢它,当然这不是为了炫耀自己是一个专业的单片机开发者而鄙夷业余爱好者的玩具。而仅仅只是出于一种或许略显保守和误解的怀疑。
     但不管如何,它的确是一个不容忽视的存在,并且已经存在好久好久。将来也可能更加地辉煌——至少现在它搭上了google的顺风船。

多选投票 : ( 最多可选 5 项 ) , 共有 20 人参与投票
登录注册,参与投票或查看投票结果。

最新回复

只能用来玩玩 用在项目不可能  详情 回复 发表于 2015-3-4 18:48

赞赏

1

查看全部赞赏

点赞 关注
个人签名

强者为尊,弱者,死无葬身之地


回复
举报

3416

帖子

0

TA的资源

纯净的硅(高级)

沙发
 
作验证真的很快,省时省力。觉得Ardino这货,编译器完成了相当一部分工作,这也是古狗在意的原因之一吧。话说,真的好玩。
 
 

回复

14

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
感觉用起来不爽         
 
 
 

回复

1万

帖子

25

TA的资源

版主

4
 
不只是AVR吧,也有ARM版了,还有支持MSP430版本的Arduino(Energia: http://energia.nu/),Intel也有Arduino的版本。
 
 
 

回复

7815

帖子

56

TA的资源

裸片初长成(中级)

5
 
dcexpert 发表于 2015-3-3 22:03
不只是AVR吧,也有ARM版了,还有支持MSP430版本的Arduino(Energia: http://energia.nu/),Intel也有Arduino的版本。

多谢分享


 
个人签名

强者为尊,弱者,死无葬身之地

 
 

回复

3416

帖子

0

TA的资源

纯净的硅(高级)

6
 
dcexpert 发表于 2015-3-3 22:03
不只是AVR吧,也有ARM版了,还有支持MSP430版本的Arduino(Energia: http://energia.nu/),Intel也有Arduino的版本。



嗯,是的我也凑个热闹
好多厂家的控制器都有Arduino评估板了,STM32、Microchip等等

不过底层的兼容性,只能呵呵了
真正用心在做Arduino的,个人觉得还是ATMEL的AVR
可能其他厂家的OSer们没啥动力去做
 
个人签名

So TM what......?

 

 

回复

4996

帖子

19

TA的资源

裸片初长成(初级)

7
 
有道理,我也混淆了。
 
个人签名我的博客
 
 

回复

7815

帖子

56

TA的资源

裸片初长成(中级)

8
 
@ljj3166 @dcexpert

我刚打开了 Energia,是个 MSP430版本的 Arduino
也搜索了一下雅虎, 针对STM32 ARM的 版本,名字叫 The Maple

确实有,此前我就有印象听到有人说已经有其他单片机版本,但当时我没想到名字改了,所以只是跑到了 Arduino官网,却一无所获(当时是因为觉得这类信息只有官方宣布才可信任)

 
个人签名

强者为尊,弱者,死无葬身之地

 
 

回复

7815

帖子

56

TA的资源

裸片初长成(中级)

9
 
ljj3166 发表于 2015-3-4 01:19
嗯,是的我也凑个热闹
好多厂家的控制器都有Arduino评估板了,STM32、Microchip等等

不过底层的兼容性,只能呵呵了
真正用心在做Arduino的,个人觉得还是ATMEL的AVR
可能其他厂家的OSer们没啥动力去做
关于底层的兼容性,我觉得很大可能和它那个底层寄存器的封装(也就是驱动的实现方式有关系)

其实在这个问题上我也想了很多。
而我最终选择的方法就和他们这种靠大量宏的方式不一样。

虽然这种方式使用的非常多(如 contiki,如 libopencm3,以及网上stm32/8的一些例程之类的,有一类甚至还封装了一个所谓的 xx_iostream.h,包括我们公司自己封装的库)

不过具体的,我觉得还是得完整看完他们的实现方案才能 有底气的分析 是否症结所在。

其实这方面我现在自己采取的方案是不用宏作为封装单位,而是 读写总线,用函数实现,以函数指针等方案实现一种 注册机制。当然还有一些问题,比如能否类似 windows/unix系统提供一个统一的文件或者句柄操作——

不要误解,其实我自己的实践经验是,如果不需要 windows/linux那类的复杂操作和复杂情形, 句柄或者文件名,说到底只是一个指针,同样可以很简单,开销也不需要担心。



 
个人签名

强者为尊,弱者,死无葬身之地

 
 

回复

7608

帖子

2

TA的资源

五彩晶圆(高级)

10
 
本帖最后由 freebsder 于 2015-3-4 10:30 编辑

纠结底层实现就没必要抠arduino,它的优势不在技术。
 
 
 

回复

7815

帖子

56

TA的资源

裸片初长成(中级)

11
 
freebsder 发表于 2015-3-4 10:28
纠结底层实现就没必要抠arduino,它的优势不在技术。
不是纠结底层
是想着有没办法用另一套底层替代它,但是同时坐拥它的资源。



 
个人签名

强者为尊,弱者,死无葬身之地

 
 

回复

7608

帖子

2

TA的资源

五彩晶圆(高级)

12
 
不好整,这货上面的processing不是一天就完美支持的,如同上面有人说的兼容性问题。现在大部分小评估板都有arduino接口,可也只能复用arduino里的shield,所有的用户依赖都在软件,arduino的目标客户不都是工程师,就像google的客户也不都是工程师一样。
 
 
 

回复

7815

帖子

56

TA的资源

裸片初长成(中级)

13
 
刚看了一下 Arduino/Enegia 的 底层寄存器封装。

基本上理解了Arduino在这上面的思路。
它就是提供了一个到引脚级别的直接操作的API(不管是宏还是函数,也不管是怎么算出来,根据地址偏移来的)。
怎么来都不重要。
重要的是,它提供了这种操作的能力。

除此之外,对于ATMEL家的芯片,Arduino的git里,我看到并非只有AVR的mega,还有 sam之类的也都支持。
或者 对于 MSP430 C2000等TI家的 Enegia,它们采用的也是一种相类似的IO脚统一编号,再通过计算或者查表等等方式操作。

那个 Maple,看起来更像是一小伙人在玩,没看到源码公开,但可以想见,要么是采用st库那种 通过结构体封装,省却了自己计算偏移量(我个人挺喜欢这种方式)。
要么估计也是这种偏移计算。

不管如何吧。

最终,呈现给应用者的都是 PinMode() 这一类的APIs.

看到这里,我就觉得,其实已经没什么好纠结的了,对于它的底层。

移植的困难就在这个地方,但是,这也是它方便易用的最重要的基础。
因为我可以直接操作IO(以及寄存器)

这种情况下,应用和驱动其实基本就不存在什么界线了——当然,对于单片机这种小应用,这也没什么,这种场合,驱动和应用本身就相差不大。

而至于 效率 什么的,这里也不多说,因为我也还没有实实在在做过定量的测试对比,没有数据,没法让人信服。

而网上更多的口水战更多的只是不同的人各自基于自己的理解(对错不明,但都没有真正定量测试数据)争个头破血流,对此,我不掺和。

然后如果仅仅是从 编程的 易读性啊,可维护性啊,可移植性啊,那就更惨了,这种主观占了很多成分的话题,口水战更加严重。
有人说他根本不在乎可移植,只要支持 avr或者stm32就成。
也有人说,你觉得结构体(比如st库的封装)好,可我还他妈觉得看起来特么费尽。(其实应该是st库的写法很费劲吧。)
他就喜欢宏。

.......

所以这个地方,没啥好说的。不然就没完没了了。

唯一我想说的是。

在底层封装方面,我更倾向于模仿unix/windows的方法,句柄或者文件名只是个称呼的不同,但其内涵都是 抽象成一组读写总线,而不直接操作IO和寄存器。

应该说,这种封装方式,会对可移植性有较大益处。
但也存在的问题是,由于它不直接允许应用层操作 硬件,对于 Arduino/单片机小应用的场合,对于并非专业编程者而言,可能是很大的困扰和麻烦。

而假使如此,那只能说,这种方式是完全没办法获得 因 简单易用 而喜欢,推崇Arduino的人的。
 
个人签名

强者为尊,弱者,死无葬身之地

 
 

回复

7815

帖子

56

TA的资源

裸片初长成(中级)

14
 
想了想,其实说错了,其实 文件或者句柄的封装方式,对可移植性的意义其实还不算太明显。

它最大的优势应该是可以 更加动态 更加灵活的 管理 不同的外设,无论是从 外设/设备的 类型,数量(同类设备,即所谓的 多重性问题),特别地是在于 运行时动态增删设备,以节省早已不用或者失效的硬件对宝贵的内存等资源的占用 等等等等。

bsd,linux等选择这种方式,自然是有它的道理的。

而这种优势,对于 单片机/物联网 这种 芯片种类多多,外设种类多多 ,而且还可能随时更换,变动 的应用场景,其实应该是意义更加重大的,甚于 通用PC上。
 
个人签名

强者为尊,弱者,死无葬身之地

 
 

回复

7815

帖子

56

TA的资源

裸片初长成(中级)

15
 
freebsder 发表于 2015-3-4 10:58
不好整,这货上面的processing不是一天就完美支持的,如同上面有人说的兼容性问题。现在大部分小评估板都有arduino接口,可也只能复用arduino里的shield,所有的用户依赖都在软件,arduino的目标客户不都是工程师,就像google的客户也不都是工程师一样。
偶也发现了~



 
个人签名

强者为尊,弱者,死无葬身之地

 
 

回复

7815

帖子

56

TA的资源

裸片初长成(中级)

16
 
贴一段它的pin代码,以免 光听我说,无码无真相。
是Enegia的。Arduino的我回头找对地方了再发,居然不是.c文件里有,有点邪恶~~

这段代码截自 其中的pin.c文件的一部分,其他的大同小异,反正都是各种计算,对了,这是ti提供的文件。
上面有很长的license声明,我给略了~

  1. //*****************************************************************************
  2. // Macros
  3. //*****************************************************************************
  4. #define PAD_MODE_MASK                0x0000000F
  5. #define PAD_STRENGTH_MASK        0x000000E0
  6. #define PAD_TYPE_MASK                0x00000310
  7. #define PAD_CONFIG_BASE                ((OCP_SHARED_BASE + \
  8.                                   OCP_SHARED_O_GPIO_PAD_CONFIG_0))

  9. //*****************************************************************************
  10. // PIN to PAD matrix
  11. //*****************************************************************************
  12. static const unsigned long g_ulPinToPadMap[64] =
  13. {
  14.         10,11,12,13,14,15,16,17,255,255,18,
  15.         19,20,21,22,23,24,40,28,29,25,255,
  16.         255,255,255,255,255,255,255,255,255,255,255,
  17.         255,255,255,255,255,255,255,255,255,255,255,
  18.         31,255,255,255,255,0,255,32,30,255,1,
  19.         255,2,3,4,5,6,7,8,9
  20. };


  21. //*****************************************************************************
  22. //
  23. //! Configures pin mux for the specified pin.
  24. //!
  25. //! \param ulPin is a valid pin.
  26. //! \param ulPinMode is one of the valid mode
  27. //!
  28. //! This function configures the pin mux that selects the peripheral function
  29. //! associated with a particular SOC pin. Only one peripheral function at a
  30. //! time can be associated with a pin, and each peripheral function should
  31. //! only be associated with a single pin at a time.
  32. //!
  33. //! \return none
  34. //
  35. //*****************************************************************************
  36. void PinModeSet(unsigned long ulPin,unsigned long ulPinMode)
  37. {

  38.   unsigned long ulPad;

  39.   //
  40.   // Get the corresponding Pad
  41.   //
  42.   ulPad = g_ulPinToPadMap[ulPin & 0x3F];

  43.   //
  44.   // Calculate the register address
  45.   //
  46.   ulPad = ((ulPad << 2) + PAD_CONFIG_BASE);

  47.   //
  48.   // Set the mode.
  49.   //
  50.   HWREG(ulPad) = (((HWREG(ulPad) & ~PAD_MODE_MASK) |  ulPinMode) & ~(3<<10));

  51. }
复制代码


 
个人签名

强者为尊,弱者,死无葬身之地

 
 

回复

7608

帖子

2

TA的资源

五彩晶圆(高级)

17
 
管理必然有成本的,越好的管理成本可能越高,单片机上的取舍比pc上明显很多。这也可能是单片机行业中各种看起来很好手段大家不用的原因之一吧,比如c++(又黑一次)呵呵。
 
 
 

回复

774

帖子

2

TA的资源

纯净的硅(中级)

18
 
只能用来玩玩
用在项目不可能
 
 
 

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

查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表