嵌入式Linxu应用编程
以实战应用为主的笔记记录
Engineer-Bruce_Yang
本科毕业于华南理工大学,美国Carroll University工商管理硕士,曾就职于世界名企伟易达,安防军工砺剑防卫公司,多年嵌入式产品开发经验,在智能玩具、安防产品、平板电脑、手机开发有丰富的实战开发经验。
展开
-
Linux QT 4G发送HTTP POST请求发送JSON格式的数据
接上一篇文章:Linux下4G模块高新兴物联中兴ME3630拨号上网4G网络打通以后,接下来就可以上传和接收数据啦!有点小兴奋!我们来看看QT上如何来发送一个HTTP的POST请求。HTTP协议在这里就不多说了,百度自己看。一、在PC Window(QT5版本)1.1、构建URL1.2、构建HTTP请求头1.3、连接信号与操作,接收服务器回复的消息槽函数这里我们要在头文件定义...原创 2019-10-09 11:29:29 · 2477 阅读 · 3 评论 -
Linux下4G模块高新兴物联中兴ME3630拨号上网
以下是我用的开发板方案,来自周立功的A6G2C平台。原创 2019-10-08 11:07:23 · 3696 阅读 · 0 评论 -
会C/C++就可以开发Linux/Android应用程序?替代传统串口屏的Yoxios了解一下!
1、UI软件逻辑开发痛点串口屏相信各位开发者都不陌生了,它解决了大多数开发者在嵌入式UI应用方向的痛点,常见的痛点主要有以下几个方面:1、市面上的UI框架层出不穷,不知道如何选择,常见的...原创 2020-05-28 08:27:04 · 2510 阅读 · 3 评论 -
Linux多线程编程
开篇来一首音乐放松一下,来自歌手简弘亦的:就算我唱遍所有情歌。1、线程与多线程的定义线程存在于进程当中,是操作系统调度执行的最小单位。说通俗点线程就是干活,多线程也就是同时可以干不同的活...原创 2020-09-10 17:32:55 · 434 阅读 · 0 评论 -
Linux进程间通信(下)之共享内存实践
上节和上上节我们分享了Linux进程间通信的管道、消息队列、信号以及信号量的基本原理和实践,文章如下:Linux进程间通信(上)之管道、消息队列实践Linux进程间通信(中)之信号、信号...原创 2020-09-09 09:04:39 · 531 阅读 · 0 评论 -
手把手教你快速使用Vmware虚拟机安装Linux操作系统实验环境
使用Vmware虚拟机学习Linux系统,即是你不需要去真实的安装一个Linux系统,通过虚拟机你就可以获得和真实Linux系统大部分功能的体验。那么如何获取Linux系统的镜像呢?在企...原创 2020-09-09 09:04:39 · 1146 阅读 · 0 评论 -
Linux进程间通信(中)之信号、信号量实践
上节我们分享了Linux进程间通信的其中两种方式:管道、消息队列,文章如下:Linux进程间通信(上)之管道、消息队列实践这节我们就来分享一下Linux的另外两种进程间通信的方式:信号、...原创 2020-09-08 08:48:54 · 1438 阅读 · 2 评论 -
Linux进程间通信(上)之管道、消息队列实践
1、进程间通信简述进程间通信的几种方式:无名管道、有名管道、消息队列、共享内存、信号、信号量、套接字(socket)。进程间通信是不同进程直接进行的一些接触,这种接触有简单,有复杂。机制...原创 2020-09-01 08:59:07 · 786 阅读 · 1 评论 -
Linux系统编程---实现目录或者文件拷贝
关于拷贝文件,前面写过一个例子:点击打开链接 ,可以看看,实现cp命令。这次我们实现一个目录和文件的拷贝,综合点。#include #include #include #include #include #include void copy_file(const char *src , const char *dest);void copy_directory(const cha原创 2016-09-30 09:07:58 · 3929 阅读 · 0 评论 -
Linux系统编程-----进程fork()
在开始之前,我们先来了解一些基本的概念:1. 程序, 没有在运行的可执行文件 进程, 运行中的程序2. 进程调度的方法: 按时间片轮转 先来先服务 短时间优先 按优先级别3. 进程的状态: 就绪 ->> 运行 ->> 等待 运行 ->> 就绪 //时间片完了 等待 ->> 就绪 //等待的条件完成了查看当前系统进程的状态 ps auxf原创 2016-09-30 09:21:06 · 1140 阅读 · 0 评论 -
Linux系统编程---守护进程
守护进程是什么?就是在后台运行的进程。那么如何创建守护进程呢? 1. 创建孤儿进程 2. setsid() 创建进程会话 3. 重定向标准输入, 标准输出 4. chdir, 改当当前进程的工作目录接下来看一个例子:#include #include #include int main(void){ //进程成为守护进程的步骤 //代号:Ss //守护进程也称为精灵进程原创 2016-09-30 09:29:06 · 1203 阅读 · 0 评论 -
Linux系统编程----僵尸进程
什么是僵尸进程?僵尸进程, 指子进程退出后, 父进程还没有回收子进程的资源,这个子进程就处在于僵尸状态。来看看如何产生?#include #include int main(void){ pid_t pid ; //zombie 子进程先退出,父进程没有回收子进程资源 //这就是僵尸进程 //僵尸进程不能被直接杀死,只能通过杀死父进程来终止僵尸进程 pid = fork(原创 2016-09-30 09:31:59 · 1250 阅读 · 0 评论 -
Linux系统编程:标准IO操作--索引对应路径下的文件
#include #include #include #include #include #include #include #include #define MAX_FILE_NUM 128#define MAX_PATH_LEN 128char file_path[MAX_FILE_NUM][MAX_PATH_LEN];char *pFilePath[MAX_FI原创 2016-12-28 00:23:45 · 731 阅读 · 0 评论 -
线程等待执行完毕
关于线程等待,有一个很好的例子,代码如下:#include #include #include #include pthread_t tid ;void *thread(void *arg){ printf("1s\n"); sleep(1); printf("2s\n"); sleep(1); printf("3s\n"); sleep(1);}int main(vo原创 2017-06-08 11:40:43 · 544 阅读 · 0 评论 -
POSIX线程同步
在posix编程中,如果在不同的线程中几乎同一时间操作同一个变量的时候,就会出现不同步。如何解决这样的问题,这里需要用到互斥量,互斥锁的概念。请看UNIX环境高级编程P299页#include #include #include //线程1 void *thread_func1(void *arg);//线程2 void *thread_func2(void *arg);pthrea原创 2017-07-10 16:46:32 · 898 阅读 · 0 评论 -
线程锁实例2---读写加锁实例
#include #include #include struct student{ int a ; int b ; int c ; int d ; int e ; int f ;};char stu[6] = {10,10,10,10,10,10};//初始化一个线程mutex锁 主要用途是防止资源访问竞争pthread_mutex_t Mute原创 2017-07-10 17:23:24 · 619 阅读 · 0 评论 -
linu下C语言之BMP图片操作编程(下)
前面提高了一个将BMP左转的程序,右转其实也是类似的操作,就不写了,这节,我们来实现,将一张BMP图进行灰度处理,代码贴上:#include #include #include #define RGB(r,g,b) ((r+g+b)/3)typedef unsigned char U8 ; typedef unsigned short U16 ; typedef原创 2016-09-28 16:20:15 · 1410 阅读 · 0 评论 -
linu下C语言之BMP图片操作编程(中)
http://blog.csdn.net/morixinguan/article/details/50719472关于BMP图的介绍之前已经说过了,最近要用到,又要重新开始学习。现在实现一个让bmp左转的效果:#include #include #include #define RGB(r,g,b) ((r<<16)|(g<<8)|b)typedef unsigned c原创 2016-09-28 11:26:44 · 1324 阅读 · 0 评论 -
与音频相关的技术知识点总结(Linux方向的开发)
几个术语和概念:1. 关于PCM的 PCM是Pulse code modulation的缩写,它是对波形最直接的编码方式。它在音频中的地位可能和BMP在图片中的地位有点类似吧。 Sampling rate:从模拟信号到数字信号,即从连续信号到离散信号的转换都是通过离散采样完成的,Sampling rate就是每秒种采样的个数。根据香农采样定理,要保证信号原创 2016-09-25 19:09:57 · 2996 阅读 · 1 评论 -
Linux 系统应用编程——标准I/O
标准I/O的由来 标准I/O指的是ANSI C 中定义的用于I/O操作的一系列函数。 只要操作系统安装了C库,标准I/O函数就可以调用。换句话说,如果程序中使用的是标准I/O函数,那么源代码不需要任何修改就可以在其他操作系统下编译运行,具有更好的可移植性。 除此之外,使用标准I/O可以减少系统调用的次数,提高系统效率。标准I/O函数转载 2016-04-25 18:38:48 · 717 阅读 · 0 评论 -
Linux 系统应用编程——进程基础
一、Linux下多任务机制的介绍 Linux有一特性是多任务,多任务处理是指用户可以在同一时间内运行多个应用程序,每个正在执行的应用程序被称为一个任务。 多任务操作系统使用某种调度(shedule)策略(由内核来执行)支持多个任务并发执行。事实上,(单核)处理器在某一时刻只能执行一个任务。每个任务创建时被分配时间片(几十到上百毫秒),任务执行(占用C转载 2016-04-25 19:06:00 · 888 阅读 · 0 评论 -
Linux 系统应用编程——线程基础
传统多任务操作系统中一个可以独立调度的任务(或称之为顺序执行流)是一个进程。每个程序加载到内存后只可以唯一地对应创建一个顺序执行流,即传统意义的进程。每个进程的全部系统资源是私有的,如虚拟地址空间,文件描述符和信号处理等等。使用多进程实现多任务应用时存在如下问题:1)任务切换,即进程间上下文切换,系统开销比较大。(虚拟地址空间以及task_struct 都需要切换)2)多任务之间的转载 2016-04-25 19:22:21 · 754 阅读 · 0 评论 -
C语言高级应用---操作linux下V4L2摄像头应用程序
我们都知道,想要驱动linux下的摄像头,其实很简单,照着V4L2的手册一步步来写,很快就可以写出来,但是在写之前我们要注意改变系统的一些配置,使系统支持framebuffer,在dev下产生fb0这样的节点,这样我们才能在linux系统上操作Camera摄像头,framebuffer在之前的博文已经有说过了,这里就不再提了。 最重要的,我们需要改一个脚本,在/dev/grub.c原创 2016-03-28 22:27:48 · 19577 阅读 · 47 评论 -
摄像头ov2685中关于sensor id 设置的相关的寄存器地址
OV2685 : CHIP_ID address : 0x300A default : 0x26 address : 0x300B default : 0x85 address : 0x300C defailt : 0x00回到早上的话题,如果我想查看摄像头的ID,我的代码可以这么写,在GPL329A-sensor-ID设置原创 2016-04-22 16:17:29 · 5906 阅读 · 2 评论 -
Linux C系统编程:信号与定时器的使用
#include #include void do_alarm(int num);int main(void){ //注册一个定时器 if(signal(SIGALRM , do_alarm) == SIG_ERR) { perror("register alarm fail");原创 2016-07-11 16:05:38 · 6366 阅读 · 0 评论 -
linux C 获取当前的工作目录
#include #include #include int main(void){ char buffer[1024] ; //获取当前的工作目录,注意:长度必须大于工作目录的长度加一 char *p = getcwd(buffer , 40); char *dir = NULL; printf("buffer:%s p:%s size:%d \n" , buff原创 2016-07-06 13:49:46 · 11451 阅读 · 0 评论 -
Linux C OSS音频编程
在linux下也可以写一个类似麦克风和喇叭这样的应用程序,只要打开/dev/dsp这个设备驱动,对该设备read读操作相当于录音,对这个设备write写操作相当于放音。对于以下出现的一些参数我就不多说了,百度很多,大家可以自行查找,关于音频编程还有很多,alsa和OSS混合编程是目前用得最多的,如果对这方面有兴趣的可以深入研究。以下是当时我在学习这方面知识的时候写的一个测试程序:测试的结果就是当对原创 2016-07-06 14:05:21 · 2573 阅读 · 0 评论 -
动手实现linux中的cp命令(可自行拓展)
我们在学习系统编程的时候,一定会有这样的经历,让你动手实现一个简单的cp命令,也就是拷贝相应的文件到对应的目录,或者说是复制吧,当然,实现非常的简单,我们来看看源码吧:#include #include #include #include int main(int argc ,char *argv[]){ if(argc != 3) { fprintf(stderr , "in原创 2016-09-06 16:46:34 · 1951 阅读 · 4 评论 -
静态库与动态库相关知识笔记
1. ldd 可查看程序需要哪些动态库 nm 可查看程序,库里有哪些函数 file 可查看文件的类型 objdump -D 反汇编.o/.a/.so/elf可执行文件 2. 制作静态库 (test1.c test2.c) gcc test1.c -c -o test1.o gcc test2.c -c -o test2.o ar -cr libmy.a test1.o test原创 2016-09-06 17:01:56 · 2485 阅读 · 0 评论 -
与信号相关的linux系统编程API
1. kill(pid_t pid, int sig); //给指定的进程发送sig信号 raise(int sig); //给当前进程发送sig信号2. 处理指定的信号 typedef void (*sighandler_t)(int); sighandler_t signal(int signum, sighandler_t handler); //使用新原创 2016-09-06 17:10:07 · 797 阅读 · 0 评论 -
基于V4L2摄像头采集图片程序设计
#ifndef __COMMON_H#define __COMMON_H//该头文件定义的是摄像头在屏幕上显示的宽度和高度#include#include#include#include#include typedef unsigned char U8;typedef unsigned int U32;typedef unsigned short U16;#define原创 2016-09-20 23:47:14 · 2084 阅读 · 5 评论 -
关于V4L2中操作比较重要的几个命令以及一般操作流程总结
最近在做关于摄像头测试程序相关的一些开发,主要是想要实现在摄像头采集视频的过程中,通过按键来实现拍照,然后将拍照得到的数据保存到一个文件中,通过了解V4L2的一些相关操作,原来,拍照后的数据是保存在一个buf里,而这股数据流便是熟悉的YUYV,要看到相应的图片,还需要特定的转换才能将YUYV的数据转换成bmp图片。那么,在摄像头中,是怎么获取到图片的呢?通过V4L2的官方手册,我们得知是该控制命令原创 2016-09-21 23:00:41 · 2014 阅读 · 0 评论 -
文件lseek操作产生空洞文件的方法
在文件操作过程中,lseek操作可以偏移到文件的任意位置。在UNIX文件操作中,文件位移量可以大于文件的当前长度,在这种情况下,对该文件的下一次写将延长该文件,并在文件中构成一个空洞,这一点是允许的。位于文件中但没有写过的字节都被设为 0。如果 offset 比文件的当前长度更大,下一个写操作就会把文件“撑大(extend)”。这就是所谓的在文件里创造“空洞(hole)”。没有原创 2016-02-09 14:21:31 · 3517 阅读 · 0 评论