微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > 嵌入式系统设计讨论 > 关于ARM和嵌入式学习的一些分享!

关于ARM和嵌入式学习的一些分享!

时间:10-02 整理:3721RD 点击:
  有人说我目前已经熟悉了stm32,飞思卡尔等单片机,想再学一学ARM,有价值吗!
  其实学嵌入式,不在于你会多少芯片,而更重要的是嵌入式程序设计思路,编程方法。比如循环队列,循环缓冲区等。如何接收中断程序效率最高?
  51单片机系列和ARM系列,只是一个工具。要根据实际的项目去选择。当然,会的芯片越多,上手其他的更容易。但是我觉得,重点还在于嵌入式软件的编程思想。比如函数代码和变量的可移植性,如何定义变量,尽量不要使用全局变量,如何更有效的记录日志等等。推荐基本书吧。林锐的《高质量程序设计》。
  如果是学习arm的话,ucos嵌入式操作系统是必须要学习一下的。而且它的代码开源,想要学习操作系统原理的同学,还是可以分析一下代码的。教材的话,可以看看这本书。
  《嵌入式实时操作系统UC/OS-11原理及应用》
  学会了ucos,怎么能不顺便学习一下Linux呢。Linux的多线程调度,线程进程间通信等等,推荐一个开源代码,mjpg-streamer,可以折腾一下,可以获取USB摄像头的数据,然后通过网页等途径访问摄像头。这个代码设计的也很不错,学习Linux的同学可以看一下。
  对的,还有数据结构也是很重要的,比如如何自己使用C语言实现一个队列?
  最近再搞嵌入式的程序,使用的是STM32,纯裸机编程。越来越明白一个好的架构的重要性了。所以想近期看一下ucosii的内核源码,学习一下架构设计相关的知识。比如说,如果写一个命令行AT指令解析的程序,应该如何编写呢,如何设计架构才更有利于后面指令的扩展呢?技巧性的东西真的是博大精深。正在慢慢的爬行在这无边无际的海洋中。自己以为到了大海,其实,只是一个臭水沟罢了。路还很长。
  如何学习嵌入式软件开发呢?这个问题好从自己大学说起。记得大二的时候接触51单片机,感觉这个东西使用起来好费劲,还设置各种寄存器,配置各种参数。当有一本书出现的时候,我豁然开朗了。这本书的名字叫《嵌入式软件程序设计,使用MCS-51》。这本书上介绍了很多我们常用到的一些单片机的功能和外设的控制。我需要使用单片机实现一个什么样子的功能,只需要找出相关代码,组合一下就OK了。so easy!
  单片机的路,就这么慢慢走着。比如控制步进电机、直流电机、舵机等。如何控制超声波测距、温度传感器等。这种设备的代码都是烂大街的,一抓一大把。
  顺便说一下,玩转嵌入式之前,C语言还是必须要搞定的。通过了计算机二级考试,可并不能证明你C语言合格。小平同志说过,实践是检验真理的唯一标准。多练手吧。《杜拉拉升职记》中也有一句话说的很正确,你能从书本上获得10%的经验,能够从前辈身上获得20%的经验,剩下的70%的经验都是从实践中得来的。
  后面开始接触STM32和Atmel的一款ARM7芯片,一对比才发现,STM32的例程好丰富,各种都给你写好了,又和学51单片机一样,找到了诀窍了。瞬间就可以搞定各种功能,实现各种小玩意。大四的时候也参加了《CCTV机器人大赛》。
  上了研究生之后,开始学习Linux,也不是自己想学,单纯是为了实验室项目的需要才不得不接触Linux,后面研究生也主要是在用Linux。期间也使用STM32做过一些项目。在这期间才学会了使用循环缓冲区的方式处理串口数据。此时,才真正静下心来思考,如何才能设计一个比较好的嵌入式软件架构。在代码编写中,也逐渐开始使用队列等结构。
  有一次找工作面试,被面试官问到函数指针的用法,才把注意力放在函数的指针上。PS:函数指针和指针函数有啥区别呢。
  还是那句话,不是说底层不重要,而是不能把所有经历都放在会多少个芯片上。别人问你的I2C的时候,是问你的协议,而不是说你用过哪些芯片的I2C。最近在创业公司写一个系统,代码量已经到达80K(不要吐槽代码量不大,因为功能有限,又不是做一个火箭),基本功能就是GPS定位,GPRS数据通信,三轴检测等等。使用的外设都是基本的外设,串口、AD、中断等等。业务逻辑是一个重点,GPS和GSM模块的驱动也是另一个重点,还有一个比较重要的是低功耗方面。
  在编程方面可以借鉴的地方罗列一下,仅供参考。
  1、添加了一个终端串口打印函数,对printf进行重新封装,可以直接打印时间,打印信息的分类和打印内容,便于通过标志位选择性的输出你所需要的打印信息。
  2、添加了AT指令的调试接口,可以通过串口终端发送AT指令获取系统的各个参数和变量的状态,并且可以出发某些事件,便于调试和查找问题。这些在系统正式上线的时候砍掉即可。

什么时候你才记得把悬赏改为0  

很不错~值得借鉴

多些前辈指导,受教了

嗯,受教了,虽然现在还不是很懂!

thanks
for
your
sharing

感谢小编分享

听不懂

技能都是可以学的,但是深浅得看思维了,这就是菜鸟和大牛的差别,也是身边大牛和我的区别

正在学习多线程

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top