嵌入式软件开发
文章平均质量分 76
无止境x
现为中科院工程师,更多内容关注微信公众号《科学无止境》。
研究生期间的算法工程师,毕业后进入中科院从事科学装置和系统的研究,分享AI和云计算领域的内容,一个有点自己想法的IT从业者,欢迎关注交流!
展开
-
Qt中利用定时器QTimer准实时显示当前日期和时间
Qt中利用定时器QTimer准实时显示当前日期和时间Qt中利用定时器QTimer准实时显示当前日期和时间Qt中,QDate类对应日期,QTime类对应时间。这两种类可以获取当前时间,但需要一个定时器来准实时显示当前日期和时间。下面说明方法:1. 在工程中声明一个全局QTimer对象[cpp] view plain copy转载 2018-01-15 11:57:29 · 1396 阅读 · 0 评论 -
嵌入式产品开发流程
嵌入式产品,与普通电子产品一样,开发过程都需要遵循一些基本的流程,都是一个从需求分析到总体设计,详细设计到最后产品完成的过程。但是,与普通电子产品相比,嵌入式产品的开发流程又有其特殊之处。它包含嵌入式软件和嵌入式硬件两大部分,针对嵌入式硬件和软件的开发,在普通的电子产品开发过程中,是不需要涉及的。嵌入式产品的研发流程具体如下图: 下面,针对嵌入式产品的开发过程中的各个阶原创 2017-08-18 19:18:20 · 712 阅读 · 0 评论 -
Linux USB 驱动开发-USB设备基础概念
Linux USB 驱动开发(一)—— USB设备基础概念 在终端用户看来,USB设备为主机提供了多种多样的附加功能,如文件传输,声音播放等,但对USB主机来说,它与所有USB设备的接口都是一致的。一个USB设备由3个功能模块组成:USB总线接口、USB逻辑设备和功能单元:a -- 这里的USB总线接口指的是USB设备中的串行接口引擎(SIE);b -- USB逻辑设备被USB系统软件转载 2017-08-18 16:31:09 · 330 阅读 · 0 评论 -
触摸屏-原理及流程回顾
1、工作原理首先我们要区分lcd和触摸屏,lcd是一个屏幕,触摸屏是贴在lcd上的两层膜。接下来我们说一下四线电阻触摸屏的原理:触摸屏就是上下两层膜,比如上层代表x轴(XM:负端,XP:正端),下层代表y轴(YM:负端,YP:正端)。当读取x轴坐标时,XP接3.3v,XM接地,从YM读取按下点的电压值作为模拟输入信号,再经过AD转换后就得到了x轴坐标。同理,当读取y轴坐标时,Y原创 2017-08-18 16:01:46 · 2164 阅读 · 0 评论 -
分离分层
bus_drv_dev模型: 简单说明:这张图就是全部了。device是与硬件相关的代码,driver是比较稳定的驱动代码。当修改硬件部分的时候,只修改dev里面的东西。=======================================================================================================原创 2017-08-18 15:16:49 · 417 阅读 · 0 评论 -
输入子系统代码测试
/* 参考drivers\input\keyboard\gpio_keys.c */#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #incl原创 2017-08-18 14:49:25 · 298 阅读 · 0 评论 -
为何引入输入子系统及其架构
1、为何引入input system? 以前我们写一些输入设备(键盘、鼠标等)的驱动都是采用字符设备、混杂设备处理的。问题由此而来,Linux开源社区的大神们看到了这大量输入设备如此分散不堪,有木有可以实现一种机制,可以对分散的、不同类别的输入设备进行统一的驱动,所以才出现了输入子系统。 输入子系统引入的好处:(1)统一了物理形态各异的相似的输入设备转载 2017-08-18 14:43:18 · 306 阅读 · 0 评论 -
异步通知
一、什么是异步通知异步通知类似于中断的机制。当设备可写时,设备驱动函数发送一个信号给内核,告知内核有数据可读,在条件不满足之前,并不会造成阻塞。而不像之前学的阻塞型IO和poll,它们是调用函数进去检查,条件不满足时还会造成阻塞。异步通知需要包含头文件xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx转载 2017-08-18 14:28:02 · 4629 阅读 · 1 评论 -
linux的poll机制
linux的poll机制 Poll就是监控文件是否可读的一种机制,作用与select一样。应用程序的调用函数如下:int poll(struct pollfd *fds,nfds_t nfds, int timeout); Poll机制会判断fds中的文件是否可读,如果可读则会立即返回,返回的值就是可读fd的数量,如果不可读,那么就进程就会休眠timeout这么长的时间原创 2017-08-11 11:09:16 · 438 阅读 · 0 评论 -
存储-SDRAM
设置SDRAM,将程序复制到SDRAM,然后跳到SDRAM继续执行项目工程见资源下载@******************************************************************************@ File:head.s@ 功能:设置SDRAM,将程序复制到SDRAM,然后跳到SDRAM继续执行@**************原创 2017-07-27 14:41:05 · 493 阅读 · 0 评论 -
中断-timer0
Init.c/* * init.c: 进行一些初始化 */ #include "s3c24xx.h" void disable_watch_dog(void);void clock_init(void);void memsetup(void);void copy_steppingstone_to_sdram(void);void init_led(void);void t原创 2017-07-26 15:56:22 · 2510 阅读 · 0 评论 -
libjpeg库的用法
libjpeg用法博客分类: Linux C编程C语言编程Linux 转自:点击打开链接libjpeg库简介 libjpeg是一个完全用C语言编写的库,包含了被广泛使用的JPEG解码、JPEG编码和其他的JPEG功能的实现。这个库由独立JPEG工作组维护。最新版本号是6b,于1998年发布。可以参考维基百科关于libjpeg的介绍http://zh.w转载 2018-01-13 09:34:41 · 12147 阅读 · 2 评论 -
图像缩放算法——近邻取样插值
近邻取样插值原理: 缩放后图片 原来的图片 对于缩放后图片中的某点 (Dx, Dy) 对应于原图片中的点 (Sx, Sy),它们之间存在如下的比例关系: (Sx-0)/(SW-0)=(Dx-0)/(DW-0) (Sy-0)/(SH-0)=(Dy-0)/(DH-0) 因此,已知缩放后图片中的任意一点 (Dx,转载 2018-01-12 15:52:25 · 1819 阅读 · 0 评论 -
S3C2440开发板上BMP图片的显示之三
三、BMP图片显示功能扩展1、图片显示的功能扩展(1)能够调整图片的显示区域,比如我准备了一张 480x384的图片,液晶屏大小只有它的九分之一,要通过键盘控制,“看到整张图片”。(2)能够显示单色、16色、256色、24位真彩色图片。(3)能够对图片进行缩小显示,比如前面那个480x384的图片,能够缩小比例显示在液晶屏上。这个实现应该不难,但是放大就比较麻烦了,转载 2018-01-12 15:06:19 · 624 阅读 · 0 评论 -
S3C2440开发板上BMP图片的显示之二
S3C2440开发板上BMP图片的显示之二二、BMP图片显示测试程序设计1、测试程序结构设计(1)目的确认对BMP结构的认识,加深对RGB颜色格式的理解。能够在液晶上显示一个160 x 128 大小的图片。(正好与液晶的大小相同) (2)实现方案添加一个命令mptest。在命令处理程序中,先打开图片文件,读入前面54个字节转载 2018-01-12 14:49:31 · 473 阅读 · 0 评论 -
S3C2440开发板上BMP图片的显示之一
一、BMP图片的格式分析1、BMP文件的大致组成BMP文件的数据由四个部分组成:位图文件头部、位图信息头部、彩色表和图像数据阵列字节。其中彩色表不是必须的,比如24位真彩色位图就没有彩色表。(1)位图文件头部的组成(前面14个字节)(2)位图信息头部的组成(从14字节开始,14-53共40个字节)(3)下面以一个文件的分解为例,加深对各个分量的理解。第一个文转载 2018-01-12 14:39:17 · 434 阅读 · 0 评论 -
嵌入式开发工程师修炼步骤
ARM+LINUX路线,主攻嵌入式Linux操作系统及其上应用软件开发目标:(1) 掌握主流嵌入式微处理器的结构与原理(初步定为arm9)(2) 必须掌握一个嵌入式操作系统 (初步定为uclinux或linux,版本待定)(3) 必须熟悉嵌入式软件开发流程并至少做一个嵌入式软件项目。从事嵌入式软件开发的好处是:(1)目前国内外这方面的人都很稀缺。这一领域入门门槛较高,所以非转载 2017-08-22 15:21:33 · 454 阅读 · 0 评论 -
LCD显示图片的函数-ARM体系-2440
void Paint_BMP(int x0,int y0,int level,int vertical,const unsigned char *bmp)/*在屏幕上画图*/{ int x,y; UINT32 col; int p = 0; UINT16 *addr; for( y = 0 ; y < 272 ; y++ ) { for(原创 2017-08-21 16:25:54 · 1543 阅读 · 0 评论 -
LCD显示文字的函数-ARM体系-2440
/**lcd显示汉字*输入参数:* x:开始位置横坐标* y:开始位置纵坐标* color:字体颜色* ch[]:文字* */void Draw_Text16(int x, int y, int color, const unsigned char ch[]) { unsigned short i, j ; unsigned char mask, t原创 2017-08-21 16:19:28 · 1553 阅读 · 1 评论 -
Linux驱动程序的结构例程
简单Linux驱动程序,借此搞清楚Linux驱动程序的结构Frist_drv.c#include #include #include #include #include #include #include #include #include #include static struct class *firstdrv_class;static struct cl原创 2017-08-11 10:33:48 · 408 阅读 · 0 评论 -
Linux驱动基础开发 Linux 内核配置机制(make menuconfig、Kconfig、makefile)讲解
Linux驱动基础开发Linux 内核配置机制(make menuconfig、Kconfig、makefile)讲解转自Linux公社前面我们介绍模块编程的时候介绍了驱动进入内核有两种方式:模块和直接编译进内核,并介绍了模块的一种编译方式——在一个独立的文件夹通过makefile配合内核源码路径完成 那么如何将驱动直接编译进内核呢?原创 2017-08-10 16:26:08 · 281 阅读 · 0 评论 -
Linux驱动基础开发 Linux 驱动开发前奏(模块编程)
Linux驱动基础开发Linux 驱动开发前奏(模块编程)转自Linux公社一、linux内核模块简介 linux内核整体结构非常庞大,其包含的组件也非常多。我们怎么把需要的部分都包含在内核中呢? 一种办法是把所有的需要的功能都编译到内核中。这会导致两个问题,一是生成的内核会很大,二是如果我们要在现有的内核中新增或删除功能,不得不重新原创 2017-08-10 16:24:15 · 250 阅读 · 0 评论 -
Linux触摸屏驱动-jz2440
s3c_ts.c#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include struct s3c_ts_regs { unsigned long a原创 2017-08-16 15:06:10 · 536 阅读 · 0 评论 -
指针专项
用函数指针变量调用函数#include #include int Max(int x,int y){ int z; if(x>y){ z=x; } else{ z=y; } return z;}/*int main(){ int x,y,m; scanf("%d%d",&x,&原创 2017-08-02 10:19:52 · 329 阅读 · 0 评论 -
触摸屏驱动-JZ2440
测试方法:1、make menuconfig 去掉原来的触摸程序 ->Device Drivers->Input device support->generic input layer->Touchscreens s3c2410/s3c2440 tsmake uImage使用新内核启动2、在虚拟机中编译tslib2.1、解压缩tar xzf t原创 2017-08-16 11:21:35 · 689 阅读 · 0 评论 -
LCD驱动-JZ2440
怎样写LCD驱动程序1、分配一个fb_info结构体,使用framebuffer_alloc()函数2、设置fb_info中的参数,1)固定参数(fix)2)可变参数(var)3)设置操作函数 fbops4)其他设置 如调色板pseudo_palette和屏幕尺寸screen_size5)分配显存 dma_alloc_writecombine(),返回的是虚拟地址3原创 2017-08-16 11:16:44 · 439 阅读 · 0 评论 -
Linux驱动开发概述
Linux设备分类设备的驱动程序也要像裸机程序那样进行一些硬件操作,不同的是驱动程序需要"融合进内核里",因此需要在驱动程序中加入操作系统规定的接口,这些接口都是独立于设备的。虽然操作系统为驱动程序设计者带来了"麻烦",却为应用程序设计者带来了"便利"。Linux下设备分为三类:字符设备、块设备、网络设备。字符设备是指必须以串行顺序访问的设备,比如触屏;块设备是指可以以任意原创 2017-08-08 21:33:06 · 281 阅读 · 0 评论 -
指针的点运算和箭头运算(->)的区别
指针的点运算和箭头运算(->)(其实点运算是结构体变量访问其成员的操作符 箭头运算是结构体指针访问其指向的成员变量的操作符)突然发现指针的两个运算符我是不太清楚的,就翻书搞了下:其实点运算和箭头运算都可以当作访问指针所指向的 结构体或者类对象的成员是用的操作符。比如:struct song{int a;}原创 2017-08-01 16:18:01 · 10207 阅读 · 1 评论 -
静态变量Static
用static声明局部变量有时希望函数中的局部变量的值在函数调用结束后不消失而保留原值,即其占用的存储单元不释放,在下一次该函数调用时,该变量已有值,就是上一次函数调用结束时的值。这时就应该指定该局部变量为“静态局部变量”,用关键字static进行声明。#include #include int f(int a){ auto b=0; stat原创 2017-08-01 11:27:46 · 262 阅读 · 0 评论 -
对话框-QDialog
QT-对话框-QDialog对话框一般用来提供反馈信息或从用户处获取输入,Qt 实现了很丰富的对话框类。1、首先我们来看看QDialog的类关系2、模态对话框和非模态对话框所谓模态对话框就是在其没有被关闭之前,用户不能与同一个应用程序的其他窗口进行交互,直到该对话框关闭。对于非模态对话框,当被打开时,用户既可选择和该对话框进行交互,也可以选择同应用程序的转载 2017-06-01 16:30:34 · 528 阅读 · 0 评论 -
linux硬件设备操作函数 linux硬件设备操作函数
open(/dev/ietctl, O_RDWR) 这是文件I/O的常用函数,open函数,open函数用来打开一个设备,他返回的是一个整型变量,如果这个值等于-1,说明打开文件出现错误,如果为大于0的值,那么这个值代表的就是文件描述符。一般的写法是if((fd=open("/dev/ttys0",O_RDWR | O_NOCTTY | O_NDELAY)<0){pe转载 2017-08-09 15:34:56 · 450 阅读 · 1 评论 -
按键-LED
利用查询IO口的方式实现按键控制LED‘灯的亮灭#include "s3c24xx.h"#define LED_ON 0#define LED_OFF 1#define KEY1_POS (0)//按键1在IO端口的位置,此处为GPF0端口,则值为0#define KEY2_POS (2)//按键2在IO端口的位置,此处为GPF2端口原创 2017-07-25 16:01:56 · 419 阅读 · 0 评论 -
Linux 设备驱动基本概念
Linux 设备驱动基本概念转自Linux公社学习linux设备驱动首先我们必须明确以下几个概念,为我们接下来学习linux驱动打下坚实的基础:应用程序、库、内核、驱动程序的关系设备类型设备文件、主设备号与从设备号驱动程序与应用程序的区别用户态与内核态Linux驱动程序功能一、应用程序、库、内核、驱动程序的关系原创 2017-08-10 16:19:47 · 163 阅读 · 0 评论 -
Linux 设备驱动概述
Linux 设备驱动概述转自Linux公社Linux软件工程师大致可分为两个层次: (1)Linux应用软件工程师(Application Software Engineer): 主要利用C库函数和Linux API进行应用软件的编写; 从事这方面的开发工作,主要需要学习:符合linux posix标准的API函数及系统调用,linux的多任务编原创 2017-08-10 16:15:19 · 287 阅读 · 0 评论 -
Linux进程间通信——使用共享内存
下面将讲解进程间通信的另一种方式,使用共享内存。转载一、什么是共享内存顾名思义,共享内存就是允许两个不相关的进程访问同一个逻辑内存。共享内存是在两个正在运行的进程之间共享和传递数据的一种非常有效的方式。不同进程之间共享的内存通常安排为同一段物理内存。进程可以将同一段共享内存连接到它们自己的地址空间中,所有进程都可以访问共享内存中的地址,就好像它们是由用C语言函数malloc分配的内存一转载 2017-08-10 15:37:52 · 166 阅读 · 0 评论 -
UART-中断模式
代码downloadinit.c/* * init.c: 进行一些初始化 */ #include "s3c24xx.h" void disable_watch_dog(void);void clock_init(void);void memsetup(void);void copy_steppingstone_to_sdram(void);/* * 关闭WATCHD转载 2017-08-03 15:02:25 · 1057 阅读 · 0 评论 -
Linux进程间六种通信方式
linux下进程间通信的几种主要手段: 1.管道(Pipe)及有名管道(named pipe):管道可用于具有亲缘关系进程间的通信,有名管道克服了管道没有名字的限制,因此,除具有管道所具有的功能外,它还允许无亲缘关系进程间的通信; 2.信号(Signal):信号是比较复杂的通信方式,用于通知接受进程有某种事件生,除了用于进程间通信外,进程还可以发送信号给原创 2017-08-10 15:29:59 · 318 阅读 · 0 评论 -
驱动-按键-中断模式
驱动-按键-中断模式eint_drv.c/*******驱动代码************/#include #include #include #include #include #include #include #include #include #include #include static struct class *eintdrv_cl原创 2017-08-09 15:57:28 · 309 阅读 · 0 评论 -
linux驱动模块组成
linux驱动针对S3C2440的GPG进行驱动程序设计驱动程序框架file_operations结构体设计file_operations结构体中的接口函数实现驱动程序初始化函数驱动程序退出函数file_operations结构体设计GPIO驱动程序需要实现以下几个接口函数open:用于支持应用程序的open操作release:用于支持应用程原创 2017-08-08 15:34:45 · 347 阅读 · 0 评论 -
中断-按键控制LED灯
三个按键分别控制三个LED灯初始化函数:/* * init.c: 进行一些初始化 */ #include "s3c24xx.h"/* * LED1,LED2,LED4对应GPF4、GPF5、GPF6 */#define GPF4_out (1<<(4*2)) //定义为01 输出#define GPF5_out (1<<(5*2))#define GPF6原创 2017-07-25 15:56:53 · 4199 阅读 · 1 评论