嵌入式开发调试学习与思考
该项目是对公司设计的基于powerpc的处理器进行FPGA仿真阶段的软件验证,以及bootloader和kernel移植,以便芯片进行投产,主要完成的工作如下:
(1)调试环境的搭建
(2)处理器核功能验证,如异常 cache TLB等
(3)bootloader以及kernel中处理器基本外设驱动调试,如USB SPI I2C MAC SDIO UART等,kernel最小系统启动进控制台。
由于该项目处于预研阶段,并且FPGA仿真板数量不多,所以公司投入人力不大,只安排让我来做这个项目。
对我来说,莫大荣幸有机会来独立完成这样一项软硬件综合调试(各种硬件问题搞得我都快要奔溃了)
由于FPGA板很久不用了不稳定,加之各种硬件问题。折腾5个月的时间总算是将FPGA阶段工作完成。
但是在最后阶段USB调试通过,整个系统调试完成时,心里却有一种怅然若失的感觉,毕业工作之后一直萦绕我脑中的一个问题:
嵌入式开发调试,最后我到底学到了什么?
工作至今三年有余,翻看自己的csdn博客发现,刚工作时写博客总结,总是会关注一些具体代码细节,如C语言的变参宏定义 某个具体驱动的实现等。
工作2年后,更多的总结是一些有意思的代码框架,以及自己对问题的见解,如kernel的时钟机制,系统调用等。
这是一种进步。
但是今天我却感觉,对于嵌入式开发调试,学到的最重要的东西并不是上述这些知识,而是积累下来的思路和经验。
记忆力是有限的,我之前有过这样的疑惑:
做过一些项目,对于处理器及各种外设都接触调试过,但是再次调试还是需要对其datasheet,涉及的specification,以及软件代码进行复习。
做过项目的一些调试,写博客总结相关知识,但是一个月后,再看博客,跟看别人写的一样,顶多混过脸熟。
但是我却发现,虽然这样,但是我再次调试,却比第一次接触时要从容很多。
以最近两星期进行的一些外设模块调试为例。
调试USB,USB2.0协议我也只是脸熟,枚举过程大体清楚,但是也背不出来。
但是我知道遇到问题,首先去排查哪个过程出错,枚举?class driver? 硬件是否正常,示波器测phy给出的clock是否正确,phy的状态引脚是否正常。
实在不行,USB协议分析仪呗,抓下USB包,一个包一个包排查。
调试mac,TCp/IP协议我也只是脸熟,mac的datasheet我也得在熟悉下。
但是遇到问题,我知道首先确定phy自动协商完成了没,再将mac以及dma寄存器全部打印出来对比,将dma descriptor queue打印出来,根据状态描述符来查,怀疑硬件问题,可以采用mac以及phy的loopback模式来进行排除。总能将问题定位出来。
调试spi i2c uart,协议需要熟悉下。
但是遇到问题,spi 3根线,i2c 2根线,uart 4根线(调试串口,非全功能串口),示波器直接抓信号,对着协议和数据手册查,一定能找出问题。
等等。。
各种奇奇怪怪的问题,总能找到解决方法。
现在遇到问题不会像刚工作时那样手忙脚乱,因为我相信,各种调试工具,示波器,万用表,逻辑分析仪,协议分析仪,抓信号,量电压,软硬件结合调试,总会找到问题所在!
这些是在调试过程中积累下来的思路和经验,当然,工作3年初学者跟大牛的经验相比,还是有很长的路,需要努力学习。
但是却说明了,工作中学习知识之外,更多的是对解决问题思路和经验的积累。
所以以后就不要纠结于知识的遗忘,而应该注重解决问题思路的培养和经验的积累。
kerneler,不仅是为表明自己是内核系统开发者,更多的是希望自己成为一个追求事物本质的人!
嵌入式开发调试学习与思考相关推荐
- ARM嵌入式开发板学习路线指引
如何入门嵌入式?嵌入式开发学习方法步骤 如何入门嵌入式?嵌入式开发学习路线指引 嵌入式开发就是指在嵌入式操作系统下进行开发,一般常用的系统有linux,android. 平台:Cortex-A9 ...
- 一位久经沙场的嵌入式er站在初学者角度谈谈嵌入式开发与学习的一些问题
一位久经沙场的嵌入式er站在初学者角度谈谈嵌入式开发与学习的一些问题 在刚刚涉足嵌入式开发的时候,总想找到这样一本书,它可以解决我一些这样那样的疑惑.但是遗憾的是,到现在也没有这样一本书面世,而且我想 ...
- 嵌入式开发需要学mysql吗_学习嵌入式开发需要学习哪些课程?如何学习?
针对很多的大学生嵌入式开发初学者来说,对嵌入式开发的学习还很迷茫.今天信盈达嵌入式培训老师给出参考建议:首先:嵌入式开发需要学习哪些课程?因为嵌入式开发的方向不同,所学习的内容会有所区别,但是无论是哪 ...
- 零基础学习嵌入式开发难吗?嵌入式开发需要学习什么
对于零基础刚开始学习嵌入式的同学很多都会有这样的一个想法,嵌入式开发需要学习什么?如果是电子或计算机专业的人,相对来说,会比较容易入门;而非电子或计算机专业的人,应该先从基本的电路和C语言编程开始学. ...
- 嵌入式开发必须学习qt吗?
作为一名嵌入式开发行者QT是必须要学的,也许现在不学以后也要学习的.一方面,在嵌入式初学阶段,也就是裸机开发,可能需要自己写上位机,QT就是一个做上位机的一个好用的工具,一般只要会c++学习QT一天就 ...
- 嵌入式开发需要学习哪些东西
刚刚读到这篇文章,对于刚入门嵌入式来说挺有用的,献给向我一样正在迷茫,苦于没有头绪,没人指引的学习朋友们. 主要讨论下嵌入式技术学习方法,主要是针对嵌入式软件. 嵌入式技术是一门边缘科学(又称交叉科学 ...
- 嵌入式入门学习笔记6:[转]嵌入式开发需要学习哪些东西
本文转自迅为开发板iTOP-4412开发板实战手册:http://www.topeetboard.com 刚刚读到这篇文章,对于刚入门嵌入式来说挺有用的,献给向我一样正在迷茫,苦于没有头绪,没人指引的 ...
- #杂谈 个人嵌入式开发的学习
本人目前从事的是嵌入式软件开发的相关工作.这是一个关于个人做项目时用过的开发工具的杂谈,仅是为了记录学习经历,同时也为和我有同样瞎搞东西的爱好者提供一个学习思路. 前言 我的技术栈: 下面介绍一下我用 ...
- 嵌入式开发/调试辅助工具
开发辅助工具开发环境组成通常开发环境由三部分组成: 构建环境:包括代码编写,程序编译,版本控制等功能. 调试环境:用于定位问题的辅助工具集 测试环境:用于验证目标程序是否满足用户要求的显性需求和隐性需 ...
最新文章
- SAP QM 执行事务代码QA11 报错- Selected set code does not exist, or data entered is incomplete-
- 指针和数组的区别是什么?
- 查看文档(API) (NSString)
- webpack+vue+mint-ui 实现上拉加载更多(Loadmore组件)
- wince工业平板电脑_如何防止工业平板电脑温度过高?
- 基于Redis优化购物车 - 添加商品
- php session和cookie区别,php中session和cookie的区别是什么?
- 2013递归求解单链表中的结点个数(C++,附递归函数思路讲解与手绘图)
- pythonif语句如何循环播放_python – 循环播放文本,一次3个字符
- 【英语学习】【Daily English】U07 Restaurant L03 What do you recommend?
- Android Activity(一)Activity间的跳转
- Java开源大全 网站
- 心理学和管理学的一些效应学习
- 图像处理之LSB替换隐写算法的实现
- 计算机网络由 子网,计算机网络系统是由通信子网和资源子网组成的。()
- 盘点百度开放云编程马拉松八大亮点
- 吐血整理出来的大数据知识点,你掌握多少?
- 海外市场交易执行策略的实践
- static关键字是什么意思?java中是否可以覆盖一个private方法或者static方法
- 【深度学习】大牛的《深度学习》笔记,Deep Learning速成教程