【i.MX6ULL】驱动开发11--LCD驱动实践
之前在Linux系统移植时提到过LCD驱动,本篇来看下Linux设备树如何配置LCD驱动。
1 知识点首先需要了解一个新的概念:Framebuffer
1.1 FramebufferFramebuffer直译即帧缓冲,简称 fb,它是Linux将系统中所有跟显示有关的硬件以及软件集合起来,将底层的LCD虚拟抽象出一个/dev/fbX设备,应用程序可以通过操作/dev/fbX来实现对屏幕的显示控制。
NXP官方Linux内核已默认开启了LCD驱动,在dev/目录下可以看到fb0这样一个设备
Framebuffer在内核中的表现就是fb_info结构体:
完整的结构体定义如下:
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960struct fb_info { atomic_t count; int node; int flags; struct mutex lock; /* Lock for open ...
玩转SQLite6:使用C语言来读写数据库
上篇文章介绍了如何使用Pyhton语言来操作SQLite数据库,对于嵌入式开发,更多的是使用C/C++语言进行开发,因此,本篇介绍如何使用C语言来操作SQLite数据库。
1 SQLite C语言API函数SQLite的C语言API函数的官方文档地址:https://sqlite.com/capi3ref.html#sqlite3_free
对于数据库的基础操控,可以先了解以下几个最基本的API函数:
1.1 打开数据库 sqlite3_open该函数用于打开sqlite3数据库的连接
1234int sqlite3_open( const char *filename, /* Database filename (UTF-8) */ sqlite3 **ppDb /* OUT: SQLite db handle */);
参数含义:
filename: 数据库文件名
ppDb: 数据库handle ,用结构体sqlite3来表示一个打开的数据库对象
1.2 执行sql语句 sqlite3_exec1234567int sqlite3_exec( ...
玩转SQLite5:使用Python来读写数据库
前面几篇,介绍了命令行方式和图形界面方式读写数据库,而数据库的实际应用,通常需要与程序结合起来,通过程序来实现对数据库的访问和读写。
SQLite支持多种编程语言的开发调用:C, C++, PHP, Perl, Java, C#,Python, Ruby等。
本篇先介绍Python语言来调用SQLite数据库,为什么先介绍Python呢?因为Python用起来十分方便,简单的几行代码,就能够实现我们想要的功能(当然前提是先配置好python的开发环境)。
1 Python读写SQLite基本流程这里先列举出Python读写SQLite数据库的基本流程:
2 编程实现2.1 基本流程引入sqlite3依赖包后,首先是连接数据库,调用的是connect方法:
12fileDB = 'test4.db' # 数据库文件conn = sqlite3.connect(fileDB) # 连接数据库
然后需要创建游标:
1cur = conn.cursor() # 创建游标
这时,就可以通过execute方法执行sql语句了,比如查询语句:
12sql = 's ...
玩转SQLite4:SQLite数据插入与查看
之前两篇文章,介绍了命令行和图形化的方式进行数据库的创建和表的创建,相当于创建了一个框架,还没有具体数据,本篇就来介绍如何将数据添加到数据库的表中,以及如何查看表中的数据。
同样,本篇继续使用命令行和图形化两种方式进行操作。
DB Brower方式 数据插入首先是图形化的方式进行数据插入。
打开之前创建的test4.db数据库,准备向SCORE表中插入数据:
将窗口切换到“浏览数据”,进行数据的编辑。
点击插入数据的图标,依次输出几条数据。注意id这一项在点击插入数据时,是自动填充的,这是因为之前在创建表时,对id字段勾选了“自增”。
命令行方式查看数据select语句select语句的基本语法为:
123SELECT column1, column2, columnN FROM table_name;-- 或:select column1, column2, columnN from table_name;
因为SQLite命令不区分大小写,所以上面两种方式都可以。
另外,SQLite支持通配符,例如可以使用*号表示所以,下面就是通过select语句来查询SCORE表中的所有数 ...
玩转SQLite3:SQLite图形软件基本操作
上篇文章,介绍了sqlite3命令行操作来创建数据库与表,该方法需要有一定的数据库基础知识。
本篇,使用图形化的工具,来实现同样的功能,并且这些方式,不需要熟悉SQL命令。
1 SQLite Expert 基本操作SQLite Expert在第1篇文章中,已经介绍过了,现在来看下如何使用:
1.1 创建数据库与表新建数据库
新建的test3数据库,可以在左边的列表中看到
test3上鼠标右键,点击New Table,为数据库创建一个表:
首先要为创建的表起一个名字,比如STUENT:
然后点击到Columns窗口中,编辑表中的具体内容。一般情况下,每个表都会有一个id字段,用来标识每一条数据:
接下来可以再添加几个字段,比如name和student,用来标识学生的名称和班级。
对于数据类型,先直到INT表示整数,TEXT表示字符串即可,后面再详细介绍SQLite的数据类型。
Not Null那一列,勾选上对勾,表示这些字段不能没有数据。
然后点击到Primary Key窗口中,这里是设置表的主键,可以理解为通过哪个字段来识别表中的各条数据,通常就是使用id字段来作为主键,如 ...
玩转SQLite2:SQLite命令行基本操作
本篇介绍SQLite的命令行基本操作
1 SQLite 点命令SQLite 的点命令,是一些以点为开头的命令:
完整的点指令如下:
.archive ... Manage SQL archives
.auth ON|OFF Show authorizer callbacks
.backup ?DB? FILE 备份DB数据库(默认是 “main”)到 FILE 文件
.bail on|off 发生错误后停止,默认为 OFF
.binary on|off Turn binary output on or off. Default OFF
.cd DIRECTORY Change the working directory to DIRECTORY
.changes on|off Show number of rows changed by SQL
.check GLOB Fail if output since ...
玩转SQLite1:SQLite简介与安装
1 SQLite简介SQLite,是一个C语言库,诞生于2000年,它实现了一个小型、 快速、 自包含、 高可靠性的SQL数据库引擎,与其他数据库管理系统(如SQL Server或Oracle)的一大区别,是它非常的轻量级(小于500Kb大小)。
SQLite官网:https://www.sqlite.org/index.html
1.1 SQLite的特点
SQLite是完全开源免费的
QLite是无服务器的,不需要服务器进程或系统来操作
SQLite是一个跨平台的数据库系统
SQLite一般用于处理小到中型数据存储,对于高并发高流量的应用不适用
支持多种开发语言,C, C++, PHP, Perl, Java, C#,Python, Ruby等
2 SQLite安装2.1 Windows系统安装SQL官网下载地址:https://www.sqlite.org/download.html,下载 sqlite-dll-win32-*.zip 和sqlite-tools-win32-*.zip 压缩文件
在任意文件夹下解压上面两个压缩文件,如我的是在D:\sqlite,解压得到 ...
【i.MX6ULL】驱动开发10--阻塞-非阻塞式按键检测
上篇文章,介绍了linux中的五种I/O模型,本篇,就来使用阻塞式I/O和非用阻塞式I/O两种方式进行按键的读取实验,并对比之前使用输入捕获和中断法检测的按键程序,查看CPU的使用率是否降低。
[TOC]
1 阻塞I/O方式的按键检测1.1 阻塞I/O之等待队列 阻塞访问最大的好处就是当设备文件不可操作的时候进程可以进入休眠态,这样可以将CPU资源让出来。但是,当设备文件可以操作的时候就必须唤醒进程,一般在中断函数里面完成唤醒工作。Linux 内核提供了等待队列(wait queue)来实现阻塞进程的唤醒工作。
等待队列头使用结构体wait_queue_head_t 表示:
123456struct __wait_queue_head { spinlock_t lock; struct list_head task_list; }; typedef struct __wait_queue_head wait_queue_head_t;
使用 init_waitqueue_head 函数初始化等待队列头:
12345/** * q: 要初始化的等待 ...
【i.MX6ULL】驱动开发9--Linux-IO模型分析
前面两篇介绍按键的文章,无论是用GPIO来读取,还是用中断的方式,其应用程序通过循环读取的方式获取按键值,都会使得CPU的占用率很高。本篇先来介绍Linux中几种的I/O模型,以后使用这类方式进行按键值的读取,可以极大降低CPU的使用率。
1 Linux中的I/O模型这里以网络I/O为例进行分析,网络IO的本质是socket的读取,socket在linux系统被抽象为流,对于一次IO访问,以read为例,当一个read操作发生时,它会经历两个阶段:
等待数据准备 (Waiting for the data to be ready)
将数据从内核拷贝到进程中 (Copying the data from the kernel to the process)
网络I/O的模型,可以分为五种,这里先分类列出:
2 五种I/O模型分析2.1 阻塞式I/O模型阻塞式I/O模型是最常用、最简单的模型。阻塞就是进程被休息, CPU处理其它进程去了。
应用程序进行recefrom系统调用,操作系统收到recefrom系统调用请求,经过两个阶段:
等待数据准备好
内核将数据从内核缓冲区复制到用 ...
JSON-Schema基础入门
JSON,是一种轻量级的数据交换格式,基本结构是“名称/值”对的集合,非常易于人阅读和编写,也易于机器解析和生成。
之前的文章: cJSON基础介绍与代码测试,已介绍过C语言格式的cJSON库的使用,本篇来介绍与JSON紧密相关的JSON Schema。
1 问题引入假设实际的项目中,我们使用json来描述一款产品的信息,该产品具有:
标识符: productId
商品名称: productName
销售价格: price
一组可选的标签:tags
用JSON表示,如下:
123456{ "productId": 1, "productName": "A green door", "price": 12.50, "tags": [ "home", "green" ]}
看起来很简洁明了,但这种描述也留有一些问题,比如:
productId的含义是什么?
productName是必须的吗?
price可以为零吗?
...