嵌入式开发总结---应用篇

实验目录:

其间遇到的问题:

  1. 系统崩溃

    这种问题是由于当时自己修改了系统内核里面的某个.c文件引起的,然后我自己编译内核,步骤参考赛佰特PDF说明。而且,PDF里面说,烧完内核后,重启恢复到原先的内核,经过我的测试,这句话有问题。我按照PDF说明,重启直接崩溃,一直在reboot,后来就直接乱码了。

    这句话有问题:

    出现下面的问题是由于我把IP地址设置错了

    需要重新设置。

    下面的问题就是无缘无故修改内核参数所导致的问题:

  2. 重装系统

    步骤如上所示,完全按照PDF文档即可。需要说明的是,系统里面本身烧写了 tftp 工具。

    第二个注意的地方就是,网段的问题,你在arm上输入的IP和你tftp里面的IP可以不一样。

    我的开发环境是笔记本电脑,也就是说,我有两个网卡,我只需要保证pc端IP和arm的IP可以ping通即可。这个时候网线可能还没连接。

    此时我们自己设定有线的网络的IP地址即可。这样的话,本机和arm就可以相互ping通,然后我们就可以通过tftp工具去下载和上传arm系统。也就是

    uImage系统。下面的就按照文档中步骤操作下去就可以了。

  3. 关于IO口的物理连接关系

    对于板子上的连接关系,我们一般需要看cbt210-dvp底板。具体看下面的图片

  4. 关于驱动开发

    之前对驱动开发理解比较浅显,最近在做CAN开发的时候,感觉比较吃力。原来嵌入式里面也有比较多可以搞的地方。我们买的核心板都是一样的。

当然,光核心板这一块就有很多不同款式的可以选择。但里面的东西大同小异,根据里面的资源不同,我们可以开发出很多自己想要搞的功能。

我目前所用的开发板是 S5PV210,想要好好了解这块单片机,可以参考它的 USER-Mannal datasheet 或者它自身有的datasheet。这些都是开发必备的东西。

对于某一款芯片来说,它的驱动都是国外人写好的东西,具体可以在下面这个目录中可以找到。

上面是一个完整系统的源码,啥都有。

整个系统结构如下所示:

我们这里只是集中在Driver层,主要涉及driver层开发。这里面,出厂的时候,厂家都已经把每个管脚的功能已经驱动都写好啦。

我们编写自己的驱动的时候,只需要调用厂家写好的驱动即可。

这里举个例子:在adc开发中,我们根据硬件本身的写好的驱动,直接调用即可。对于linux而言,一切皆文件。

我们只要做的就是读文件,写文件,操作文件,注册文件,关闭文件。操作文件,我们可以理解为配置文件。这是指添加一些除读写外的一些个操作。

可以这么说,只要是板子里面管脚的复用功能,你只要连接上,都可以用它已经写好的驱动程序进行自己的工程构建。

在此,赛佰特公司所做的工作,其实就是把核心板引脚所具有的功能,加上了外设而已。

当然了,我刚刚也提过,对于驱动的加载有两种方式:1、编译内核 2、以模块的形式添加驱动

两种方式各有优缺点,以模块方式添加驱动,可以收到卸载与添加,灵活性比较好。具体请参照:内核驱动入门章节部分。这个部分讲解了如何手动

加载驱动程序。有几个关键命令:insmod mknod 等。驱动程序一般以 xxx.ko 结尾。

第二种方式就是编译内核,一般先通过 make menuconfig 来添加或者删除指定的模块,然后make,也就是编译。编译完之后,生成某个xxImage文件,然后转换一下格式,加载到arm中即可。这个一般用tftp来搞。

  1. 关于调试

    Linux里面最大的不方便的地方就是调试,调试一般不怎么人性化,需要我们自己下载调试工具进行调试。目前一般有两种方式:1)加breakpoint。

2)用gdb来实现,gdb有arm端和linux端的,这样的话,我们可以实现远程调试。这个还可以对程序进行分析,验证是否正确。

参考资料:http://my.oschina.net/gzhuo/blog/323434 arm-linux gdb 调试工具的安装

http://www.cnblogs.com/hankers/archive/2012/12/07/2806836.html gdb调试一些命令的使用

  1. 关于应用程序开发(界面有无)

    这里主要讲解有界面和无界面。有界面就是QT开发,关于QT开发现在一般在windows上面写代码,然后到linux里面就交叉编译,看看有没有错误。

    一般情况下讲,linux端的程序和arm端的程序差不多,库啥的都是可以通用的。所以QT程序的开发类似于windows下面MFC的开发。

    但是有一个不同的地方是QT是跨平台的,它可以在apple、linux、windows上面跑,源码都是一样,但是编译器却是不一样的。也就是说,你可以在windows上面跑qt程序,开发windows端的qt程序,不过此时你不能调用linux端的库函数,在某个平台上玩爽,都要遵守某个平台的规则,不能不按规则出牌。当然了,我们也可以在linux上面开发,但是这里讲一个便利点,假如你已经熟悉windows系统,你就完全可以先在windows上面把程序编好。

    然后拿到linux下面去编译,这样可以省大量的时间和精力。这点需要注意。当然,如果你的程序是要跑在arm上的,那你就用交叉编译环境去编译。然后就可以运行在arm端上面的linux系统里面了。因为是带界面的,所以需要加上 LCD库,让其能够显示。

    对于无界面的程序开发,就和vs上面编写.c 和 .h类似。不过,没有vs那么方便,需要用gdb调试。

    当然,上面讲的都是编写源码,对于源码的编译也是一个可以讲究的东西。无界面和有界面是不一样的。对于无界面程序的编译,我们现在一般需要编写 Makefile 文件。最简单的Makefile文件如下,设置好依赖库,以及每个 文件的由来,清除文件等。

    至于Makefile文件的编写,可以参考下面的资料:

    http://blog.csdn.net/haoel/article/details/2897 跟我一起写Makefile。用makefile文件有一个很好的地方就是,我们可以不需要用 静态库和动态库的方法了。当然,假如你想引入其他第三方库,就是一个.so文件的话,这个可以在Makefile文件里面配置。这里强调一点,对于驱动程序开发项目中,我们编写驱动模块的Makefile和普通英语程序是 不一样的,这个也是需要编写专门的Makefile文件,当然,这个都是可以参考其他人所写的东西。

对于QT程序的开发,会专门生成makefile文件,不用自己专门去写。假如没有project的话,可以自己去生成,Makefile会自己生成,这个不用担心。

  1. 关于CAN开发

    最近做CAN开发的时候,遇到的问题还蛮多的,主要是自己刚开始搞,好多东西都不太会,所以需要的时间比正常人有点长。

    硬件接口:

对于上面的接线图,其实GND和5V是可以不用接的,我们只需要接两根线canH 和 canL即可。USBCAN2那边也是。

开发板上,用的模块是MCP2510 http://wenku.baidu.com/link?url=sgIr2WM0lg1A9G4efVooZj1Up-BgUnmxlNjdotneuA_zIOQmiv2Q2pLRKhjWlBWIcCwcWEOrOAwJtSnBunZHJOTbkDBCIa4lMe3CGcekQ0W 中文文档

此芯片是spi与can通信的设置:http://blog.163.com/zhaozhi_q/blog/static/170060833201211165956770/

驱动开发实例: http://blog.csdn.net/xiafeng1113/article/details/7881900

?

还有一个问题就是时间问题:

至今未解决,我尝试修改can发送的时间间隔发现,只要当CAN发送>100ms,此种问题出现很少。所以,我想着是否可以提高

Can的速率,但是can速率和你发送间隔是没有关系的,这个只能说spi通讯的问题,然后尝试修改内核里面的驱动函数:

位置:这里面有210开发板初始化时的spi速率的设定。

?

后来,想着这个玩意与can相关,代码肯定在can驱动里面,于是又找到can驱动相关的代码:

字符型设备:代码在此。

?

一个小地方:

注释掉CAN 通讯main.c里面的#define DEBUG 1,会出现调试信息看不见的情况。这个注意一下就行。

  1. 遇到的难解问题

    一个 /n 惹的祸。

    之前编写程序的时候,在主线程里面写了这么一句话:

    Printf("Ok + %d",i); //注意没有加 /n.

    这个问题纠结了我好久,之后程序可以编译通过,但就是不是像以前一样,每隔100ms给我发送数据,而是等很长时间,一次性给我发送数据。错误如下:

    刚开始的时候,我怀疑是我函数封装的有问题,就是把自己用的某几个函数封装在.c 和 .h当中,函数就在.h里面声明,变量就用extern。

    编写的时候,有一个变量是static的,然后我的can一直发送不出去,一直失败,后来我发现 原来是这个变量惹的祸,可能定义为static类型的之后,

    失去了作为全局变量的作用。因为satic 全局变量只在定义它的源文件当中有效,其他地方无效。

    参考资料: http://blog.csdn.net/keyeagle/article/details/6708077 c语言中static的用法

    对于linux当中,你的屏幕输入 stdout 也是一个文件,也是有缓存区的,可能不能一次性输入多个文件,所以上面的程序执行会出现上面的问题。

时间: 2024-10-11 21:18:43

嵌入式开发总结---应用篇的相关文章

转:Qt 嵌入式开发环境搭建

地址: http://www.cnblogs.com/lishixian/articles/3013897.html         作者:lsx_007 这里主要是记录了自己在搭建嵌入式开发环境时阅读的一些有价值的参考文档,文档主要来自于网络,由于是从文库中下载,所以也不知道 文档的出在哪?因为个人觉得总结的比较好,我暂且拿过来记录下,当然在此基础上也会加上我自己的理解!这篇文章主要是以问答的形式来组织. QT嵌入式开发环境是本文所要介绍的内容,我们先看看Qt的各个版本简介: 1.什么是QT

在三星smart TV上开发widget-入门篇

一个 Smart TV 应用至少包含以下几部分: index.html 文件 应用程序的入口. config.xml 文件 这个xml文件放在应用结构的根目录,包含安装应用程序所需要的信息. JavaScript 文件 主要作用是控制应用程序的行为. CSS 文件 定义应用程序的布局,样式. Image 文件 图像资源. 示例应用 接下来会实现一个简单的应用程序,这个应用只包含了显示文本和打印遥控器的事件的功能. 实现config.xml文件 实现index.html文件 实现JavaScrip

【详解】嵌入式开发中固件的烧录方式

版本:v1.2 Crifan Li 摘要 本文主要介绍了嵌入式开发过程中,将固件从PC端下载到开发板中的各种方式,主要包括NFS挂载,Nand Flash和Nor Flash,USB,RS232,网卡NIC等方式. 本文提供多种格式供: 在线阅读 HTML HTMLs PDF CHM TXT RTF WEBHELP 下载(7zip压缩包) HTML HTMLs PDF CHM TXT RTF WEBHELP HTML版本的在线地址为: http://www.crifan.com/files/do

零基础Android嵌入式开发视频教程

零基础Android手机嵌入式开发实战课程(网吧计费系统.多功能播放器.驱动开发) 适合人群:初级 课时数量:176课时 用到技术:Bootloader开发.裸板开发 涉及项目:网吧计费系统.多功能播放器.驱动开发等 咨询qq:1840215592 零基础Android嵌入式开发教程总共分为八部分,零基础起步,由浅入深,全面系统的介绍了Android系统从应用开发.系统移植.再到设备驱动开发的全过程,总课时预计174讲! 课程内容简介: 本套Android嵌入式开发教程从最础的C语言和数据结构起

零基础Android手机嵌入式开发实战课程

亲爱的网友,我这里有套课程想和大家分享,如果对这个课程有兴趣的,可以加我的QQ2059055336和我联系. 课程章节分布: 第一部分 嵌入式C与数据结构篇 (20讲) 第二部分ARM裸机开发篇 (43讲) 第三部分 Linux应用开发 (28讲) 第四部分 Linux系统移植 (5讲) 第五部分 Linux设备驱动 (13讲) 第六部分 Android应用开发 (38讲) 第七部分 Android系统移植 (11讲) 第八部分 Android设备驱动 (14讲) 零基础Android手机嵌入式

嵌入式开发中常见3个的C语言技巧

Hey,大家好!我是CrazyCatJack.今天我来说几个在嵌入式开发中常用的C语言技巧吧.也许你曾经用过,也许你只是见到过但是没有深入理解.那么今天好好补充下吧^_^ 1.指向函数的指针 指针不光能指向变量.字符串.数组,还能够指向函数.在C语言中允许将函数的入口地址赋值给指针.这样就可以通过指针来访问函数.还可以把函数指针当成参数来传递.函数指针可以简化代码,减少修改代码时的工作量.通过接下来的讲解大家会体会到这一点的. /*函数指针简单讲解 *通过指向函数的指 *针调用比较两个数 *大小

嵌入式开发需要学习哪些东西

本文转自迅为开发板iTOP-4412开发板实战手册:http://www.topeetboard.com 刚刚读到这篇文章,对于刚入门嵌入式来说挺有用的,献给向我一样正在迷茫,苦于没有头绪,没人指引的学习朋友们.主要讨论下嵌入式技术学习方法,主要是针对嵌入式软件.嵌入式技术是一门边缘科学(又称交叉科学),涉及的内容非常广泛,前几年很多学校,包括一流的大学都在讨论要不要设置这个专业.不是说设置这个专业本身有什么问题,而是因为课程设置不容易安排,如果偏硬件的话那就成了电子工程一类的专业,如果偏软的话

嵌入式开发学习笔记 ( java - c/c++ :从入门到入门 )

发现放到Blog之后排版全乱套了.. 已经把PDF上传到资源页了  http://download.csdn.net/detail/lyy289065406/8934637 那边排版好看一点...看官们随意吧 >...< · 目 录 导 航 1. 引言 1.1. 编写目的 1.2. 阅读范围 1.3. 声明 1.4. 缩写词/名词解释 1.5. 参考资料 2. 嵌入式开发学习笔记 2.1. 开发环境/测试环境 2.2. 开坑:提要 2.3. 入坑:JNI 2.3.1. navicate 接口定

Android Metro风格的Launcher开发系列第二篇

前言: 各位小伙伴们请原谅我隔了这么久才开始写这一系列的第二篇博客,没办法忙新产品发布,好了废话不说了,先回顾一下:在我的上一篇博客Android Metro风格的Launcher开发系列第一篇写了如何配置Android开发环境,只是用文字和图片展示了开发Metro风格Launcher的初步设计和产品要求,这一篇文章将会从代码上讲解如何实现对应的UI效果,好了,评书开讲! Launcher主体框架实现: Launcher主体框架我选用的是大家所熟悉的ViewPager控件,因为ViewPager