自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(32)
  • 资源 (1)
  • 收藏
  • 关注

原创 嵌入式面试题汇总 (持续更新)!

1. C语言中,修饰符volatile含义是什么?其应用场合有哪些? volatile提醒编译器它后面所定义的变量随时都有可能改变,因此编译后的程序每次需要存储或读取这个变量的时候,都会直接从变量地址(内存)中读取数据。如果没有volatile关键字,则编译器可能优化读取和存储(直接从cache中读取),可能暂时使用寄存器中的值,如果这个变量由别的程序更新了的话,将出现不一致的现象。 2. 关键字volatile有什么含义,并给出几个应用场合。 volatile的本意是“易变的” 由于访问寄

2020-11-27 12:31:05 1105

原创 学嵌入式以来踩到的坑!!!持续更新

1.由于虚拟机所在环境为64位,而交叉编译工具和其他工具大部分是32位的,所以要安装32位的工具sudo apt-get install lib32ncurses52.make menuconfig出现 'make menuconfig' requires the ncurses libraries. sudo apt-get install ncurses-dev 3.make ex...

2020-04-18 19:34:45 402

原创 PCIe枚举源码分析

PCIe枚举源码分析

2023-08-07 16:47:06 696 1

原创 网络编程的进阶1------------tftp协议

我们在学完网络编程TCP/UDP客户端,服务端之后可能就觉得网络编程差不多就那样了,的确如此,其他知识都从这些基本的知识扩展开来的,我们现在就去学习基于这些扩展的知识---------tftp协议什么是tftp协议?TFTP(Trivial File Transfer Protocol,简单文件传输协议)是TCP/IP协议族中的一个用来在客户端与服务器之间进行简单文件传输的协议。和使用TCP的文件传输协议(FTP)不同,为了保持简单短小FTP协议在日常生活中我们用的还是比较多的,用来传输大文件,而tf

2021-06-21 11:36:40 316 1

原创 linux多线程----------->线程池的介绍和使用

通俗一点来说线程池就是将线程放在这个"水池"中,我们可以加水也可以防水对吧?其实线程池也是这样的,主要的任务是新建进程和销毁进程来管理整个线程池。我们可以想象这么一种情况,面对一个要接收多个任务的情况,我们正常的做法就是,来一个任务我就新建一个线程去处理,然后任务处理完了就要销毁这个线程,就要一直去关注情况是怎么样的,极大的消耗了资源。在这种情况下就诞生了一种处理线程新的机制---------------线程池所谓线程池,我们可以将它比喻成一个水池一样,水满的时候防水,没有水的时候加水,保持一个有

2021-05-28 20:28:14 348 2

原创 Linux多进程机制和锁(四)信号量

我们在面试的时候经常会被问到,进程间的方式有几种分别应用于哪些场景?其中有一项最容易答漏的便是信号量信号量不仅可以用来完成进程间的通信,还可以用来进行线程中的通信信号量用在多线程多任务同步的,一个线程完成了某一个动作就通过信号量告诉别的线程,别的线程再进行某些动作。信号量不一定是锁定某一个资源,而是流程上的概念,比如:有 A,B 两个线程,B 线程要等 A 线程完成某一任务以后再进行自己下面的步骤,这个任务并不一定是锁定某一资源,还可以是进行一些计算或者数据处理之类。信号量(信号灯)与互斥锁和条件变量

2021-04-28 20:58:09 436

原创 Linux多进程机制和锁(三)生产者与消费者模型

在上章节我们使用读写锁效率已经变得相对高了,这里介绍一个模型---------生产者与消费者模型什么是生产者与消费者模型呢?学过操作系统这门课的人们都应该记得线程的调度的时候有一个”生产者与消费者“模型,在我们多线程这里其实也是一样的生产者生产出资源的时候消费者出消费,同时消费者和生产者的操作都是串行操作的,现在我们来举一个例子来进一步了解这个模型生产者有 5 个,往链表头部添加节点,消费者也有 5 个,删除链表头部的节点。#include<stdio.h>#include<

2021-04-26 11:06:42 217

原创 Linux多进程机制和锁(二)进程的同步----------读写锁

读写锁是互斥锁的升级版对于同一个变量我们对此同时写会导致数据不同步,但是却可以同时读,因此读是并行的,写是串行的正确的使用读写锁可以提高并发量下面是一个经典的例子,同样也是几个小孩数数,但是这次却有小孩记录读了多少一共有八个线程,一个全局变量,三个变量写此变量,五个变量不定时读变量代码如下:#include<pthread.h>#include <stdlib.h>int num=0;void w_num(void *arg);void r_num(void *a

2021-04-22 00:38:39 310

原创 Linux多进程机制和锁(二)进程的同步----------互斥锁

两个小朋友数数,从一数到100C代码实现如下#include<stdio.h>#include<pthread.h>int a=0;void *my_fun1(void *arg){ int i=0; for(i=0;i<50;i++) { int tmp=a; tmp++; usleep(

2021-04-21 01:09:57 162

原创 Linux多进程机制和锁(一)线程的创建以及基本函数使用

进程和线程进程是程序执行时的一个实例,即它是程序已经执行到何种程度的数据结构的汇集。从内核的观点看,进程的目的就是担当分配系统资源(CPU时间、内存等)的基本单位。线程是进程的一个执行流,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位。一个进程由几个线程组成(拥有很多相对独立的执行流的用户程序共享应用程序的大部分数据结构),线程与同属一个进程的其他的线程共享进程所拥有的全部资源。“进程——资源分配的最小单位,线程——程序执行的最小单位”进程有独立的地址空间,一个进程崩溃后,在保护

2021-04-20 00:54:58 147

原创 linux环境中gdb调试工具的使用

什么是GDB,能干啥? gdb是GNU开源组织发布的一个强大的Linux下的程序调试工具。一般来说,GDB主要帮助你完成下面四个方面的功能:1、启动你的程序,可以按照你的自定义的要求随心所欲的运行程序。2、可让被调试的程序在你所指定的调置的断点处停住。(断点可以是条件表达式)3、当程序被停住时,可以检查此时你的程序中所发生的事。4、你可以改变你的程序,将一个BUG产生的影响修正从而测试其他BUG。GDB调试的对象 GDB主要来调试C/C++语言写的程序,当然也就可以调试其他语言程序。这里我们

2021-04-19 01:16:50 296

原创 嵌入式软件------------网络编程

(一)Linux网络编程–网络知识介绍Linux网络编程–网络知识介绍客户端和服务端网络程序和普通的程序有一个最大的区别是网络程序是由两个部分组成的–客户端和服务器端.客户端在网络程序中,如果一个程序主动和外面的程序通信,那么我们把这个程序称为客户端程序。 比如我们使用ftp程序从另外一个地方获取文件的时候,是我们的ftp程序主动同外面进行通信(获取文件), 所以这个地方我们的ftp程序就是客户端程序。服务端和客户端相对应的程序即为服务端程序。被动的等待外面的程序来和自己通讯的程序称为服务端

2021-03-18 19:23:16 109

原创 Qt学习之路 (三)多个窗口之间的互相切换

使用按钮的话要在头文件包含#include , 通过QPushButton类创建一个对象,通过调用这个类的方法来设置按钮的属性#include "mainwindow.h"#include <QApplication>#include<QPushButton>int main(int argc, char *argv[]){ QApplication a(argc, argv); MainWindow w; w.show();

2020-12-04 16:45:58 1341

原创 Qt学习之路 (二)我的第一个第一个qt程序

我们运行qt的环境是linux,并且应用于嵌入式,所以我们的所有代码环境将适用于linux安装Qtcreator的过程太过于简单这里将不做赘述,我们直接开始安装好Qtcreator之后的首先点击 这个图标 打开 Qtcreator然后我们将看到这样的界面我们点击new project然后按照如图选择选择我们的项目名字,以及项目保存的路径然后我们要将这个勾勾打上,选择所有的编译器环境这个类名我们是可以设置的点击finish完成项目创建...

2020-11-21 12:00:28 897 1

原创 Qt学习之路 (一)概述

Qt(官方发音 [kju:t],音同 cute)是一个跨平台的 C++ 开发库,主要用来开发图形用户界面(Graphical User Interface,GUI)程序,当然也可以开发不带界面的命令行(Command User Interface,CUI)程序。Qt 是纯 C++ 开发的,所以学好 C++ 非常有必要Qt 还存在 Python、Ruby、Perl 等脚本语言的绑定, 也就是说可以使用脚本语言开发基于 Qt 的程序。开源社区就是这样,好东西就会被派生扩展,到处使用, 越来越壮大。Qt 支

2020-11-20 20:21:20 6560

原创 Linux进程间的通信(5)--------信号通信2 (进程的状态,运行,暂停,僵尸态,孤儿进程)

在上一章说到用kill发送内核信号中的其中一种给进程,进而进行通信这一章来讨论通过信号量来改变进程的状态我们单独的建立两个进程,然后用raise函数杀死进程,查看状态#include<stdio.h>#include<unistd.h>#include<sys/types.h>#include<stdlib.h>#include<signal.h>int main(void){ pid_t pid;

2020-10-25 17:08:54 115

原创 Linux进程间的通信(4)--------信号通信

现在为大家介绍与之前的管道通信完全不同的通信方式-------信号通信示意图如下,在用户空间是不可以发送信号量的,只能通过内核来发送而信号是分很多种的,我们通过命令kill -l可以看到Linux内核中有64中信号我们可以通过内核像指定的进程(pid号)发送这64种信号种的一种下面通过一个程序来实现信号的通信-------------发送信号终结其他进程的死循环死循环进程:在这里插入代码片...

2020-10-19 21:45:03 83

原创 Linux进程间的通信(3)--------有名管道

我们在使用有名管道的时候需要创建管道节点,通过mkdifo函数,创建成功并不会马上在Linux内核中生成管道,只有通过open函数打开节点以后才会有管道在Linux内核中生成

2020-10-17 15:25:11 114

原创 Linux进程间的通信(2)--------无名管道

在代码界一直流行着这么一句话,“Linux 一切皆文件!”所以文件IO的读写是 非常非常重要的!接下来为大家介绍一种Linux间的通信方式---------------无名管道在Linux里面已经规定0位输入(stdin),1位输出(stdout), 2为错误(stderror)例如用无名管道申请的文件描述符是从3开始的 0 1 2#include <unistd.h>#incl

2020-10-16 20:25:54 86

原创 Linux进程间的通信(1)--------概念

在我们学习进程间的通信的时候,我们需要知道的是,什么是进程,什么是线程。狭义定义:进程是正在运行的程序的实例(an instance of a computer program that is being executed)。广义定义:进程是一个具有一定独立功能的程序关于某个数据集合的一次运行活动。它是操作系统动态执行的基本单元,在传统的操作系统中,进程既是基本的分配单元,也是基本的执行单元。线程间的通信可以在用户空间中实现列如:在这里插入代码片...

2020-10-11 21:29:42 186

原创 关于tiny4412的重力传感器MMA7600实验以及解析

在tiny4412底板集成了重力传感器mma7600这是一款三轴加速度传感器以及角速度传感器(陀螺仪)linux内核中以及为我们写好了驱动代码,现在我们卸载该驱动然后写一个属于我们自己的mma7600驱动,mma7600该芯片支持的通信协议有很多,目前主流的都是使用IIC协议阅读这篇文章需要有一点的IIC,驱动框架,输入子系统作为知识铺垫我们就不介绍IIC协议的通信原理了,不了解的童鞋可以在CSDN上搜索,...

2020-09-07 12:51:46 258

原创 驱动开发-----定时器(蜂鸣器)-------------------基于tiny_4412

首先来说一下这个linux中的定时器,这个定时器会在特定的时间去调用特定的函数已达到实现某操作的目的,和我们的定时闹钟差不多下面来说下具体的参数代表的含义:jiffies:全局变量,用来记录自系统启动以来(也就是开发板上电以来)产生的节拍总数。启动时内核将该变量初始化为0;此后每次时钟中断处理程序增加该变量的值。每一秒钟中断次数HZ,jiffies一秒内增加HZ。系统运行时间 = jiffi...

2020-04-26 16:37:06 722

原创 构建一个platform总线模型

在此之前我们已经完成了自己创建一个总线并且在里面注册了dev和drv现在我们利用系统已经帮我们创建好的platform总线注册自己的platform_device和platform_driver这个过程其实和上一章的思路差不多在dev中我们要用 platform_device_register(&my_dev);注册到总线中并且实现platform_device结构体的方法st...

2020-04-24 00:44:45 150

原创 平台总线Bus介绍 并创建自己的总线bus,dev,drv

arm公司发布的arm坂本从arm9的2440,2410,cortexA8的S5pv210再到A9的4412,其实有些驱动已经做得很好了,没有必要再重复写,我们把以前的驱动继承然后拿过来用就好了,但是现在涉及到一个问题,不同的平台寄存器的地址是不一样的,但是操作是一样的,我们将相同的操作写成一个driver驱动,不同的device中写入不同的资源,这样我们的一个驱动drv就可以去同时适应多个平台的...

2020-04-23 20:01:06 1515

原创 驱动开发----中断下半部

中断下半部,什么是中断下半部呢?其实我们之前做的中断都是中断的上半部为什么需要中断下半部呢?原因是当我们在正常运行程序时候,如果与遇到中断会直接停止然后去执行中断程序,如果中断的程序用时很长,那么主程序将被一直阻塞不能执行,所以就需要把中断分成两部分,一个是上部分一个是下部分,上部分完成对全局变量的初始化,并且启动下半部分,而下半部分则执行耗时的操作,放在全局,在后台慢慢执行,不影响主程序。...

2020-04-19 18:05:27 354

原创 中断处理------文件IO模型 (四)异步通知 基于tiny4412开发板

之前说的几个模型都是主动去监控的,那么这个异步通知就和之前说的不一样,是被动的,当中断发生时候去通知CPU,CPU就会过来做这件事,然后昨晚再跳回去做原来的事...

2020-04-18 17:28:46 103

原创 中断处理------文件IO模型 (三)POLL机制 基于tiny4412开发板

使用了阻塞模型,虽然把资源浪费的问题给解决了,但是又出现了新的问题,当我们没有按下按键时候,进程休眠,如果不按下按键,进程就一直休眠一直阻塞在那里,效率很明显就低了所以就引出有一种叫做poll机制的模型...

2020-04-18 17:23:34 150

原创 中断处理------文件IO模型 (二)阻塞模型 基于tiny4412开发板

在上一章实现了简单的按键驱动,但是我们通过insmod到内核,按下按键以后,查看CPU资源运行情况,发现就是一个简单的按键驱动竟然用了20%多的资源,tiny4412可是一个4核的cpu!!!为神马会出现这种情况,我们来分析一下并且改进它...

2020-04-15 00:15:44 114

原创 中断处理------文件IO模型(一)按键驱动的实现基于tiny4412开发板

按键驱动其实和简单的字符设备驱动一样,只是用特定函数实现特定的功能,下面就来写一个简单的按键驱动。我们将一个普通的字符的设备驱动给拿过来#include <linux/module.h>#include <linux/init.h>ssize_t my_read (struct file *filp, char __user *buffer, size_t cou...

2020-04-15 00:02:36 151

原创 如何在网线孔,micro usb坏的情况下写裸机,驱动(逆境学习法)

假如你买到一块开发板,网线孔,micro usb都坏了,那么基本代表着你不能按照视频中的方法下载到开发板,不能进行nfs,tftp,以及minitools的使用。这个时候不要放弃,方法还是有的,只需要一根串口线就可以完成裸机,和驱动的开发。首先是裸机,一般视频是用dnw来下载到开发版的,因为dnw是需要网线孔的,但是现在我们的坏了,这时候有一个神奇的工具叫做kermit....

2020-04-01 11:36:34 196

原创 自己试着做了个万年历,挺好玩的!!

代码如下://*******万年历#include "pch.h"#include &lt;iostream&gt;using namespace std;bool isleap(int year);//判断平润年int week_of_new_year_day(int year);//判断星期几int main(){ int year,month,day,weekday; c...

2018-12-30 01:31:53 281

原创 链表的基本操作(用switch实现命令操作)

自学的C语言可能算法比较垃圾,希望能够指出更好的算法,以下是C语言链表的一些基本操作:#include&amp;amp;amp;amp;lt;stdio.h&amp;amp;amp;amp;gt;#include&amp;amp;amp;amp;lt;stdlib.h&amp;amp;amp;amp;gt;#include//#define _CRT_SECURE_NO_WARNINGSusing namespace std;typedef str

2018-12-29 01:01:29 652

这是一个基于tftp的案例 tftpx.zip

这是一个基于tftp的案例,比较完整,有下载,上传等功能

2021-06-21

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除