打印

最近想学arm了,学过一段时间的51,怎么入门

[复制链接]
2611|15
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
282045368|  楼主 | 2013-3-23 12:25 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
沙发
dirtwillfly| | 2013-3-23 15:11 | 只看该作者
多写程序,多练习

使用特权

评论回复
板凳
lr2131| | 2013-3-24 09:40 | 只看该作者
你学过51,应该算是有裸机编程的经验的。但是上到6410的话,几乎很少有在上面跑裸机的。也就是说,从51迁移到6410上,你的那个裸机编程的经验几乎是没法迁移过来的。

买什么板子不是最重要的,重要的是你想学什么东西。ARM涉及到的东西太多了,简单的说,在软件上分:
1.内核驱动程序
2.应用程序。
你决定学哪块这个才是最重要的。

对于初学者,板子的话,当然买一个的好,要买就买资料丰富,学的人多的板子,这样遇到问题,有很多参考的对象。
对于初学者,入门级的板子,要买就买性价比高,价格合适的板子。
这两点,OK6410当然都是能达到的。其实我也买得是这块板子。

使用特权

评论回复
地板
啥是arm| | 2013-3-24 10:53 | 只看该作者
同意上面说的 对于初学者 资料全 是王道 因为你总不能在如何下载程序之类的事情上浪费一两天的时间吧(我就是 没有配套资料惹的祸)  从51直接到arm的过渡其实还蛮简单的 多给自己点信心

使用特权

评论回复
5
leixiaoxiong| | 2013-3-24 16:47 | 只看该作者
lr2131 发表于 2013-3-24 09:40
你学过51,应该算是有裸机编程的经验的。但是上到6410的话,几乎很少有在上面跑裸机的。也就是说,从51迁移 ...

这位大哥,内核驱动程序是个什么概念,上操作系统和不上操作系统有差吗

使用特权

评论回复
6
lr2131| | 2013-3-24 17:24 | 只看该作者
leixiaoxiong 发表于 2013-3-24 16:47
这位大哥,内核驱动程序是个什么概念,上操作系统和不上操作系统有差吗 ...

上操作系统和不上操作系统当然有差距啊。一般指的是上Linux和Wince这类的操作系统。

当然,你要是说上的UCOS2这类没有虚拟内存管理、没有复杂文件系统。根本的说,对驱动程序是没有结构上要求的操作系统,那当然和裸机驱动开发没有什么特别大的区别。它仅仅提供多线程和线程同步互斥,还有简单的内存管理(不是虚拟内存管理哦),驱动程序和应用程序没有像Linux和windows那样需要中间的模块来连接(这块是内核做的,我也不清楚内幕),应用程序是可以直接访问驱动程序的。

内核和驱动应该算是2个概念,只是说站在应用层,它们可以不分别。
从功能上来说,广义的驱动程序,指的是能直接操作硬件的那部分最底层的程序。

内核,感觉想说也说不清的那种。什么调度器呀,线程同步互斥模块呀,文件系统呀....这些是组成内核的部分。外边有相应的接口来访问,例如系统调用,也有相应的壳,一般是shell。Linux一般给出系统调用来让用户访问内核。windows似乎是通过它自己的API来访问,具体的我也说不上来。

使用特权

评论回复
7
leixiaoxiong| | 2013-3-24 17:30 | 只看该作者
lr2131 发表于 2013-3-24 17:24
上操作系统和不上操作系统当然有差距啊。一般指的是上Linux和Wince这类的操作系统。

当然,你要是说上的 ...

有点小明白了
那这样的话,裸跑的话,驱动程序是不是就是自己编一些寄存器配置文件
比如说,我要写adc的驱动,就自己写个adc.c之类的文件将寄存器进行配置,供主函数调用就可以了
像stm32f10x_adc.c之类的库函数不需要改动吧

使用特权

评论回复
8
lr2131| | 2013-3-24 18:07 | 只看该作者
leixiaoxiong 发表于 2013-3-24 17:30
有点小明白了
那这样的话,裸跑的话,驱动程序是不是就是自己编一些寄存器配置文件
比如说,我要写adc的 ...

你理解得对了哦。

需要实现ADC提供给上层的接口:
1.输出化ADC。ADCInit(相关的选项和参数,自己定义吧)
2.运行ADC转化。
3.我也忘了,反正类似按上层功能的需求来定义吧。毕竟驱动是给上层功能层使用的。

你可以模仿STM32库提供的函数来做,可能像它那样完全实现有些难度,你可以先做得简单些,有时间有能力你可以慢慢完善。

然后再写一个简单的应用实例来调用驱动程序的接口来说就可以了。估计这个你应该有现成的,简单改改就可以了。

使用特权

评论回复
9
xunchangreng| | 2013-3-24 20:03 | 只看该作者
学过51,如果想学习嵌入式设计,应该是精通51或者CORTEX-M3的编程,这样学习嵌入式才不会吃力

另外,是学习嵌入式软件编程,比如Linux应用编程,而不是去学习ARM11。ARM11只是ARM内核的一种芯片,而且目前的态势这个内核的芯片会越来越少。

常见的ARM嵌入式学习问答,设计者和学习者最关心的10个问题:
1.          ARM嵌入式是学习硬件好还是学习软件好?
2.          嵌入式软件和硬件,哪一种职位待遇更高?或者说,在设计中哪一个更重要?
3.        学完51单片机后,想买ARM开发板继续学习,是买ARM7还是ARM9?
4.        到底是学习哪种内核:ARM7、CORTEX-M3、CORTEX-M4、ARM9、CORTEX-A8还是CORTEX-A9?
5.        ARM芯片如何选择型号?
6.        学习ARM主要学习啥?
7.        是先学习基于操作系统的应用层程序的编程,还是先学习基于操作系统的驱动程序的编程?
8.        一定要学习GUI界面设计吗?
9.        买哪种ARM开发板?
10.        电磁兼容号称黑色艺术,请问如何学习硬件设计中的电磁兼容设计?

1.        ARM嵌入式是学习硬件好还是学习软件好?

     答:

         学习硬件好还是软件好,如果你能精通其中的任何一个,都好!
       学硬件,绝大多数人大学毕业后都可以做硬件设计,这时候大家是一个差不多的水平线上,所以感觉上好像没有门槛!但是电子产品设计的难点是稳定性,尤其是电磁兼容性的设计。N年之后,也许三年,也许五年,也许八年,总之年数不等,这时候水平上就有了高低之分:有些人设计出来的电子产品就是不怎么出问题,有些人设计出来的电子产品就是一直有问题。硬件的设计,是设计经验和理论再学习的结合:电磁场与电磁波、微波与天线、高速信号处理、信号完整性、PCB布线的 实际措施、系统电磁兼容的处理措施、电路调试的能力与解决电路故障的能力,等等,
    学软件,很多人大学毕业后都无法从事这个设计工作,因为大家在学校的努力程度不同,很多人实际上还没有进入编程的门槛内。但是进入门槛后,绝大多数人的水平会处于差不多相同的水平线上,极个别的水平高一些,体现在程序的稳定性和程序运行效率上。软件的设计,主要体现在这两点
    单片机的硬件和软件,因为主频太低,很少出现稳定性的问题,软件的工作量也小,很多单位的软硬件都是一个人做。但是到了主频很高的32位微处理器后,硬件的稳定性特别容易出问题,功能复杂度增大,硬件设计的难度增加了,软件编程的工作量加大了,所以多数公司的软件和硬件开始有多人分开设计。树叶有专攻!大树叶负责系统设计,各种小树叶有的做硬件设计,有的做软件编程。宗旨就是发挥各自的强项!完成最后的系统功能设计

   另外一个需要强调的是,学习硬件还是软件,还要看个人对硬件感兴趣,还是对软件感兴趣?

2.        嵌入式软件和硬件,哪一种职位待遇更高?或者说,在设计中哪一个更重要?

      答:

     刚进入职场时,一般来说嵌入式软件的待遇会稍高一些。因为之前说了,很多人没有进入软件设计的门槛内。但是软件毕竟是青春性的职业,随着年龄的增加和设计经验、设计能力的增加,硬件设计的待遇水涨船高,慢慢会与软件职位的待遇相同甚至高于软件的职位。

     至于谁更重要,硬件相当于躯体,软件相当于血液,缺一不可,没有谁更重要的说法。如果从产品的角度看,硬件更重要一些。因为在产品中出了问题,硬件的稳定性问题基本上只有找高手重新设计,如果是电路原理上的问题还可以直接增加或者减少元件来解决。软件上不稳定问题基本上可以通过修改程序设计并重新下载程序到芯片中来解决。如果从设计的角度看,系统设计更重要,因为系统设计要求懂一些软件的基本设计,更要对硬件设计有相当的造诣,这样他才能把握住系统设计的要求,正确提出设计方案。

3.      学完51单片机后,想买ARM开发板继续学习,是买ARM7还是ARM9?

     答:

       如果你的单片机编程能力比较强,建议直接买ARM9的板子,跑linux系统的,学习嵌入式软件编程。
       如果你的单片机编程能力比较一般,建议先购买CORTEX-M3的开发板,比如盘古STM32开发板和盘古LPC1768开发板,先学习32位ARM的编程(支持轻量级的操作系统,比如UCOS),锻炼实际的编程能力。有了一定的编程能力后,再买ARM9的板子,跑linux系统的,学习嵌入式软件编程。
       总之就是多动手,遇到问题多了慢慢积累起来,就能够融会贯通了!

5.      ARM芯片如何选择型号?

答:

  ST公司:基于CORTEX-M3内核的芯片STM32F103、基于CORTEX-M4内核的芯片STM32F4,是目前最流行的CORTEX-M3内核的芯片。

  N XP公司:基于CORTEX-M3内核的芯片LPC1768、LPC1788、基于CORTEX-M0+内核的芯片LPC800系列,ARM9内核的芯片LPC3250,在设计中的认可率都比较高。

    ATMEL公司:一直采用ARM核心技术,最高也只采用到ARM9技术,旨在打造稳定的工业级芯片,不追求性能上的卓越,但求性能更加的可靠的工业级芯片。能克服各种恶劣的环境,及各种干扰,功耗低,让工业控制能更加稳定有条不紊的进行。现在的ARM9内核芯片有AT91SAM9260、AT91SAM9263、AT91SAM9G45等


       德州仪器TI: 一直致力于研究处理速度更快,功能更加强大的芯片。更是采用ARM最新技术Cortex A8来提升芯片的性能。使得一些芯片的处理速度与X86架构的MCU不分伯仲。但是最近OMAP系列芯片据说被裁了,可能会退出市场。这让选择TI芯片的人心里有点害怕!而且,TI的芯片更新速度太快,让选择他们芯片的厂家也无所适从。现在的CORTEX-A8内核芯片有AM3358、AM3359等。

SAMSUNG半导体: SAMSUNG生产ARM内核芯片的超高性价比是无人能敌的。正因为这点,其芯片也得到很多厂家的亲睐。例如S3C2440性价比极高,一般消费电子产品中应用较多,不适于在严苛的工控环境中使用。现在的ARM9内核芯片有S3C2440、CORTEX-A8内核芯片S5PV210等。

     最近老是看到不少个人和厂家宣传:使用三星的2440或者三星公司的其他型号设计为工控产品,而且我听到不少厂家说芯片的工作温度都做过老化试验,低温可以到零下40度。这个低温的实验条件只是工业级的一个强制性温度试验条件,并不是在这个低温下正常工作就是工控级芯片。工控级的应用真正难以实现的是在各种恶劣电磁环境下的稳定工作,可惜大部分芯片都不能实现这种要求。稳定性是工控级应用的第一要素,这也就是为何ATMEL的芯片很多型号一卖就是十几年,他们的芯片做的就是稳定。比如AT91RM9200、AT91SAM9260、AT91SAM9G45.

6.      学习ARM主要学习啥?

答:

   在硬件上主要学习ARM内核芯片的电路设计及其附加外围电路(USB、SDIO、CAN、485、SPI、PCI等)设计以及高速数字信号处理、信号完整性设计、电磁兼容设计,说白了就是学习如何设计出高稳定的ARM系统电路。ARM内核(CORTEX-M3、CORTEX-M4、ARM9、CORTEX-A8、CORTEX-A9等)的芯片,主频越来越高,实现稳定性的设计难度越来越大。
     软件上主要学学习基于操作系统的应用层程序的编程和基于操作系统的驱动程序编程或者基于库函数的裸机程序编程等等。CORTEX-M3、CORTEX-M4内核的芯片,可以运行裸机程序或者轻量级的UCOS系统,软件上主要学习裸机程序的编程; ARM9、CORTEX-A8、CORTEX-A9内核的芯片,可以运行linux操作系统、android操作系统、wince操作系统等,学习基于操作系统的应用程序编程

7.      是先学习基于操作系统的应用层程序的编程,还是先学习基于操作系统的驱动程序的编程?

    答:

          基于操作系统的应用层程序的编程是嵌入式软件设计的基础,它基本上可以不需要熟悉底层硬件就可以完成程序设计,所以学习嵌入式linux应用程序编程买开发板时,只要可以运行linux系统的开发板都可以。。基于操作系统的驱动程序的编程设计,要求设计人员不仅要熟悉操作系统,还要熟悉底层硬件,最好有过基于寄存器的程序编写经历,对设计人员的要求比较高。

        现在的驱动程序的编程设计,芯片原厂大部分已经提供了。在芯片原厂做驱动程序设计的人员,水平会高得多,不过中国的芯片厂很少,大家暂时没多少机会。从产品的设计角度看,驱动程序的设计难度已经降低。

        所以建议:先学习基于操作系统的应用层程序的编程,有了一定的编程经验后再去学习基于操作系统的驱动程序的编程设计。

其他的内容请下载!
常见的嵌入式linux学习和如何选择ARM芯片问答.pdf (233.94 KB)

使用特权

评论回复
评论
a437916817 2013-4-12 09:52 回复TA
建议很好 
10
leixiaoxiong| | 2013-3-24 20:56 | 只看该作者
lr2131 发表于 2013-3-24 18:07
你理解得对了哦。

需要实现ADC提供给上层的接口:

库函数要自己写啊?
这个驱动到底包含些什么呀

使用特权

评论回复
11
lr2131| | 2013-3-24 21:05 | 只看该作者
leixiaoxiong 发表于 2013-3-24 20:56
库函数要自己写啊?
这个驱动到底包含些什么呀


你可以仿照这个文件中那些函数试着写一下,但是这个是LM3S的库函数。不过这个也无所谓,换成是STM32的,只是底层实现不一样而已,在应用层一般都应该是类似的函数接口。STM32的库函数我不是很清楚,你可以再网上搜一下,应该很多很全的。

模-数转换器(ADC).pdf

513.01 KB

使用特权

评论回复
12
leixiaoxiong| | 2013-3-24 21:09 | 只看该作者
lr2131 发表于 2013-3-24 21:05
你可以仿照这个文件中那些函数试着写一下,但是这个是LM3S的库函数。不过这个也无所谓,换成是STM32的, ...

库函数我有,买开发板时送的资料,看来我真的要重新编个库函数啊?

使用特权

评论回复
13
lr2131| | 2013-3-24 21:11 | 只看该作者
leixiaoxiong 发表于 2013-3-24 21:09
库函数我有,买开发板时送的资料,看来我真的要重新编个库函数啊?

是的,破除对底层实现的一种神秘感,是很长信心的。其实,光一个ADC,还是很简单的,不就是对着datasheet来调寄存器嘛,真的很难吗。

使用特权

评论回复
14
leixiaoxiong| | 2013-3-24 21:34 | 只看该作者
好吧,只是觉得都有库函数了,自己在编一遍有点,
有点懒啊我
好吧,我要上啦

使用特权

评论回复
15
hans.woody| | 2013-4-11 22:16 | 只看该作者
顶顶,早晚也玩玩arm,哈哈

使用特权

评论回复
16
e08610318| | 2013-4-12 08:54 | 只看该作者
如果你还是学生 那你就好好利用下这块板子吧
感觉直接从51跳ARM,开始应该有点不适应,尤其是不习惯看英文资料。
我是从8位单片机-16位-再到32位的,虽然漫长点,但是到后面容易上手

使用特权

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

本版积分规则

16

主题

19

帖子

0

粉丝