![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
嵌入式学习
文章平均质量分 69
u010068160
这个作者很懒,什么都没留下…
展开
-
网络 IO 模型
IO 是计算机体系中重要的一部分。不同的 IO 设备有着不同的特点:数据率不一样、传送单位不一样,数据表示不一样,等等。所以,很难实现一种统一的输入输出方法。IO 有两种操作,同步 IO 和异步 IO。同步 IO :必须等待 IO 操作完成后,控制权才返回给用户进程。异步 IO:无须等待 IO 操作完成,就将控制权返回给用户进程。下面学习一下常见的 5 种 IO 模型。1、阻塞 IO 模型: Linux 默认情况下所有的 socket 都是阻塞的。...原创 2021-07-24 16:28:49 · 133 阅读 · 0 评论 -
linux 无法ping域名方法
在开发项目时,arm 板可以ping的通外网的IP地址,但是去ping域名时却无法ping通。如下图:查看 "/etc/resovl.conf" 文件,发现缺失了该文件,将PC端的"/etc/resolv.conf"拷贝到arm上,修改resolv.conf中的 "nameserve "后面所配置的网关地址,将该网关地址改为arm板上的网关地址,重新ping域名,即可pingtong,如果ping不通,可采用 "service network restart" 来重启网络后即可ping通。不...原创 2021-06-27 18:39:29 · 2637 阅读 · 2 评论 -
core dump文件的生成和使用
1.什么是core dump文件当程序运行的过程中异常终止或崩溃,操作系统会将程序当时的内存状态记录下来,保存在一个文件中,这种行为就叫做Core Dump(中文有的翻译成“核心转储”)。core dump 对于编程人员诊断和调试程序是非常有帮助的,因为对于有些程序错误是很难重现的,例如指针异常,而 core dump 文件可以再现程序出错时的情景。2.如何生成core dump文件在终端中输入命令 ulimit -c ,输出的结果为 0,说明默认是关闭 core dump 的,即当程序异常终止转载 2021-06-03 14:50:29 · 836 阅读 · 0 评论 -
核心转储 (coredump)配置、产生、分析以及分析示例
应用程序在运行过程中由于各种异常或者bug导致退出,在满足一定条件下产生一个core文件。通常core文件包含了程序运行时内存、寄存器状态、堆栈指针、内存管理信息以及函数调用堆栈信息。core就是程序当前工作转改存储生成的一个文件,通过工具分析这个文件,可以定位到程序异常退出的时候对应的堆栈调用等信息,找出问题点并解决。1. 配置coredump如果需要使用需要通过ulimit进行设置,可以通过ulimit -c查看当前系统是否支持coredump。如果为0,则表示coredump被关闭。转载 2021-06-03 14:47:30 · 5374 阅读 · 0 评论 -
三种select模型介绍和例子挺不错的
socket编程的select模型 在掌握了socket相关的一些函数后,套接字编程还是比较简单的,日常工作中碰到很多的问题就是客户端/服务器模型中,如何让服务端在同一时间高效的处理多个客户端的连接,我们的处理办法可能会是在服务端不停的监听客户端的请求,有新的请求到达时,开辟一个新的线程去和该客户端进行后续处理,但是这样针对每一个客户端都需要去开辟一个新的线程,效率必定底下。 其实,socket编程提供了很多的模型来处理这种情形,我们只要按照模型去实现我们的代码就可以解决这...转载 2021-03-28 00:41:54 · 317 阅读 · 0 评论 -
嵌入式Linux中printf重定向到串口
PC机上,printf输出到显示设备,在嵌入式linux系统,一般利用printf输出调试信息,需要重定向到串口。以AT91RM9200为例,简要说明如何利用串口输出printf的打印信息。 在u-boot传递给内核(kernel)的参数中,有"console=ttyS0,115200"的字样,printf就是使用ttyS0这个串口输出信息的,为了使用ttyS0这个设备,需要在根文件系统的/dev目录下创建设备节点: mknod ttyS0 c 4 0...转载 2021-03-27 01:19:51 · 1466 阅读 · 0 评论 -
海思HI35xx平台交叉编译链安装
将海思安装包解压后得到三个文件:使用sudo权限运行“cross.v300.install”或者直接运行“cross.v300.install”脚本,然后再在提示后面选择你要使用的权限如下图:然后source /etc/profile 使环境变量生效,在使用输入“arm-hi”+Tab键查看是否有安装成功。...原创 2021-01-18 14:53:04 · 504 阅读 · 0 评论 -
typedef 与define的区别
以前初学c语言是大致知道typedef 和 define都可以用来定义别名,在单片机中因为使用管脚都是宏定义,使用define做别名,为了方便unsigned int和unsigned char都是直接使用define定义成别名,今天在linux 中使用define定义int ,编译时莫名其妙的报出一堆错误,网上查了相关资料才知道是因为使用define做别名引起的,换成typedef 就好了,特此下记录。1) #define是预处理指令,在编译预处理时进行简单的替换,不作正确性检查,不关含义是否正确照样转载 2020-11-22 21:14:16 · 693 阅读 · 0 评论 -
嵌入式Bootloader简介
Bootloader又称引导加载程序,是系统上电运行的第一段软件代码,是整个形同执行的第一步。 PC机系统中引导加载程序是由BIOS和位于硬盘MBR中的OS Bootloader完成的,OS Bootloader 常见的有LILO和GRUB等。BIOS在完成硬件检测和资源分配后,将硬盘MBR中的Bootloader 读到系统的RAM中,然后将控制权交给OS Bootloader。Bootloader的主要运行任务就是将内核映像从硬盘上读到RAM中,然后跳转到内核的入口处去运行,也即启动操作...原创 2020-11-12 00:39:54 · 1372 阅读 · 0 评论 -
C语言解析ip地址的字符串转换为整型例程
#include <stdio.h>#include <stdlib.h>#include <string.h>#include <sys/socket.h>#include <netinet/in.h>#include <arpa/inet.h>long ivp4ToInt(char *str){ int i,slen = 0; int numTemp = 0; int dotNum = 0;...原创 2020-09-15 09:15:41 · 1916 阅读 · 0 评论 -
relocation R_X86_64_32 against `.xxxxx‘ can not be used when making a shared object;
解决.a静态库,链接成一个.so动态库出现:relocation R_X86_64_32 against `xxxxxxx' can not be used when making a shared object; 的错误。 在编译的时候出现relocation R_X86_64_32 against `.xxxxx' can not be used when making a shared object; 的错误。原因是因为生成静态库时没有加 -fPIC 选项。起因: 在Ub...原创 2020-08-27 15:50:21 · 2707 阅读 · 0 评论 -
ubuntu中忘记账户密码
在ubuntu开机后,长按shift或者是按esc键进入grub界面如下图:或者然后按回车键进入选项中选择带有recouvery mode的选项, 不要按回车键,按“e”进入编辑模式中,删除带有"ro recovery nomodeset find pressed ......."(到整行完),如下图画红线部分:删除完后添加上“rw init=bin/bash”后,接着按下“F10”键,出现先如下界面:在命令行里输入“cat /etc/shadow”可以查看到都有哪些账号,.原创 2020-08-16 07:18:12 · 2266 阅读 · 0 评论 -
ptrdiff_t 类型定义
1简介ptrdiff_t是C/C++标准库中定义的一个与机器相关的数据类型。ptrdiff_t类型变量通常用来保存两个指针减法操作的结果。ptrdiff_t定义在stddef.h(cstddef)这个文件内。ptrdiff_t通常被定义为long int类型。ptrdiff_t定义在C99标准中。ptrdiff_t标准库类型(library type)ptrdiff_t 与 size_t 类型一样,ptrdiff_t也是一种与机器相关的类型,在 cstddef 头文件中定义。size_t 是u.转载 2020-08-03 16:52:48 · 928 阅读 · 0 评论 -
linux 调用 setgid()、initgroups()、setuid() 修改执行权限
有时,我们需要在程序执行过程中修改程序运行权限。一、源码修改程序权限主要分三步。1. 调用 setgid() 修改组ID。2. 调用 initgroups() 修改附加组ID(一个用户可以属于多个组)。3. 调用 setuid() 修改用户ID。#include <stdio.h>#include <unistd.h>#include <shadow.h>#include <pwd.h>#include <grp.h&g转载 2020-07-28 17:12:46 · 631 阅读 · 0 评论 -
Linux 环境设置共享库
移植ssh到arm班上时,出现:说不能打开动态库文件,这种情况有来个两种原因,一种是库函数的存放路径有问题,一种是系统里面缺少库文件。使用命令 find -name libcrypto.so.1.1(库文件名称) 从当前目录下面开始查找,找到了我的库函数存放路径地址为根目录下面的一个我自己新建的文件夹里,系统默认的库函数的路径为根目录下的 /usr/lib/ 和/usr/local/lib;而我的路径为/usr/lib_m32(我自己新建的文件) ,所以没找不到该库文件,解决办法是打开根目录..原创 2020-07-24 14:15:05 · 273 阅读 · 0 评论 -
git 版本管理代码仓的使用讲解
git从本地提交代码到服务器:1、将要提交的代码放到指定的文件夹下,进入要提交代码的项目文件夹中。2、设置用户名和邮箱: git config --global user.name 用户名 //用户名的字符串要用 " " 包含起来 git config --global user.email 邮箱名 //邮箱名的字符串要用 " " 包含起来3、将该文件变成 git管理起来: git init4、添加要上传的文件到缓冲区中:...原创 2020-07-11 15:14:58 · 530 阅读 · 0 评论 -
sqlite3 用gcc 编译出错
安装了sqlite3,并且在终端输入sqlite3后也能进入应用程序中如下图,但是使用gcc 编译出错,如下图因为没有连接到库,所以出现这种问题,在 编译时加上 -lsqlite3 即可。原创 2020-06-09 16:34:28 · 909 阅读 · 0 评论 -
如何在linux添加路径到PATH环境变量中
1. 全局的对所有用户都可以的使用的PATH: 可以通过修改zd配置文件: /etc/bashrc 和 /etc/profile 来时配置,全局的PATH;例如:内 vi /etc/profile在最后后加一行:PATH=THE_SET_GLOBLE_ENV_PATH:$PATH;接着换行: export PATH如果使其立即生效: source /etc/profile2. 对于普通用户也可以设置,自己的路径:在自己的home目录中:ls -a | grep bash会找到两个文件: .ba转载 2020-05-16 11:03:38 · 4635 阅读 · 1 评论 -
关于shell脚本中执行cd命令无效的分析
###Date: 2017/1/7###Author: SoaringLee###Content:关于shell脚本中执行cd命令无效的分析=======================================================================缘起: 我在shell中写cd目录为什么不会到我想去的目录中? shell脚本中使用c...转载 2020-02-18 23:04:22 · 1292 阅读 · 0 评论 -
Linux 中Ubuntu下的文件压缩和解压缩
归档文件和压缩文件的区别: 归档文件:一个文件和目录的集合被存储在一个文件中,没经过压缩。 压缩文件:也是一个文件和目录的集合被存储在一个文件夹中,所占的磁盘空间比其中所有的文件和目录总和要少。在Ubuntu中可以使用的压缩工具有 “bzip2 、gzip、zip ”,bzip2可以最大限度的压缩文件,如果要在Linux系统和其他系统如windows之间传输文件,则选用zip,...原创 2020-02-14 13:29:21 · 282 阅读 · 0 评论 -
Linux 下c解析xml
1、在Linux下采用libxml2解析xml文件,先通过终端对libxml2库函数进行安装,在终端输入: sudo apt-get install libxml2-dev 安装完后,会在 “/usr/include”中产生一个“libxml2/libxml”的文件夹,头文件都在这个文件夹里面,但是这里面的头文件在包含其他的头文件时路径是“#includ...转载 2020-02-12 21:35:21 · 1190 阅读 · 0 评论 -
JSON基础学习
1、json支持两种数据结构: 名/值对集合:这一数据结构由不同的编程语言支持; 有序的值列表:包括数组,列表,向量或序列等等。2、json语法法则: 数据在“名/值”对中;数据又逗号隔开;花括号保存对象;方括号保存数组。 名称/值对: 名称/值对包括字段名称(在双引号中),后面写一个冒号,然后是值。例如: ...原创 2020-02-12 21:32:19 · 106 阅读 · 0 评论 -
Linux 下c++解析json
1、首先要在Linux下面安装jsoncpp库: 在Ubuntu终端中输入 sudo apt-get install libjsoncpp-dev 命令;2、在你编写的项目例程中添加上头文件,“ #include <jsoncpp/json/json.h>”;3、 编译的时候要加上 -ljsoncpp 命令;4、在Linux下使用c++解析json文...原创 2020-02-12 21:31:18 · 2743 阅读 · 1 评论 -
Qcamera调用电脑摄像头实现画面实时显示
main.cpp :mycamera.h:videiosurface.h :videiosurface.cpp :mycamera.cpp :ui :原创 2019-11-06 16:58:21 · 2152 阅读 · 3 评论 -
Dos 命令
Dos命令:指Dos操作系统的命令,一种面向磁盘的操作命令,主要包括目录操作,文件操作,其他命令。进入Dos命令窗口方法:1、win键+R ----->运行窗口键入cmd;2、开始菜单----->运行----->cmd常用Dos命令:(1)dir:显示当前路径下所有文件与目录 dir /p:按分页显示 dir /w:...原创 2019-05-24 15:31:24 · 155 阅读 · 0 评论 -
Linux 下常用名令
shell:终端命令:ls:查看当前目录下所有文件pwd:查看当前目录的路径cd:更换目录到...cd 参数为空 : 切换到当前用户所在的目录cd / :切换到根目录cd 目录名 :切换到指定目录cd ../返回上层目录./ :当前路径/目录名1/目录名2... 绝对路径mkdir 目录名 创建目录touch 文件名 创建文...原创 2019-05-24 13:51:59 · 341 阅读 · 0 评论 -
直插排序法讲解
排序原理讲解:假设我们输入的是 “5,1,4,2,3” 我们从第二个数字开始,这个数字是1,我们的任务只要看看1有没有正确的位置,我们的做法是和这个数字左边的数字来比,因此我们比较1和5,1比5小,所以我们就交换1和5,原来的排列就变成了“1,5,4,2,3 ”接下来,我们看第3个数字有没有在正确的位置。这个数字是4,它的左边数字是5,4比5小,所以我们将4和5交换,排列变成了 “1,4,...转载 2019-06-03 14:55:57 · 1238 阅读 · 0 评论 -
单链表的冒泡排序和选择排序
选择排序:void select_Sort(Fruit* point){ Fruit *t=point; for(Fruit *temp_point=point;temp_point!=NULL; temp_point=temp_point->next){ for(Fruit *temp2_point=temp_point; tem...原创 2019-07-05 09:29:36 · 479 阅读 · 0 评论 -
卸载ubuntu下自带的qt4
命令行下输入sudo apt-get autoremove --purge libqt4-[a-z]*转载 2019-08-05 22:48:42 · 500 阅读 · 0 评论 -
ubuntu下QT的安装和卸载
安装: sudoapt-getinstallqt4-dev-toolsqt4-docqt4-qtconfigqt4-demosqt4-designer sudo apt-get install qtcreator卸载qtcreator: sudoapt-getremoveqtcreator查看qt安...转载 2019-08-06 15:45:59 · 8317 阅读 · 0 评论 -
qt中文乱码问题
以下是dbzhang关于qt中文乱码问题原因的阐述,觉得不错:首先呢,声明一下,QString 是不存在中文支持问题的,很多人遇到问题,并不是本身 QString 的问题,而是没有将自己希望的字符串正确赋给QString。很简单的问题,"我是中文"这样写的时候,它是传统的 char 类型的窄字符串,我们需要的只不过是通过某种方式告诉QString 这四个汉字采用的那种编码。而问题一般...转载 2019-08-09 14:12:05 · 130 阅读 · 0 评论 -
Sqlite3终端操作命令
1、sqlite3 name.db :name.db类似文件夹,sqlite3在没有name.db时创建name.db,若name.db存在则为打开name.db。2、.table或 .tables :查看该.db目录下所有表格3、create table table_name (id int); :创建名字为name_table的表格,"id"为标格的列名,“int"为列数据的变量类型;...原创 2019-08-29 23:57:36 · 571 阅读 · 0 评论 -
GCC 与GDB的使用
1、gcc 语法: gcc [options] [filenames] options:编译选项 -c:只编译不连接,生成目标文件 -S:只编译不汇编,生成汇编文件 -E:只进行预编译 -g:包含调试信息 -o:指定输...原创 2019-05-25 14:08:40 · 460 阅读 · 0 评论