自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

  • 博客(46)
  • 资源 (10)
  • 问答 (1)
  • 收藏
  • 关注

原创 制作openeuler的livecd

【代码】制作openeuler制作livecd。

2023-11-27 19:32:24 800 4

原创 debian环境交叉编译

【代码】debian环境交叉编译。

2023-10-28 15:16:37 150

原创 qsort排序二维数组

void qsort(void *base, size_t nitems, size_t size, int (*compar)(const void *, const void*));base-- 指向要排序的数组的第一个元素的指针。nitems-- 由 base 指向的数组中元素的个数。size-- 数组中每个元素的大小,以字节为单位。compar-- 用来比较两个元素的函数,即函数指针(回调函数)对于arry[][]初始化的数据和malloc出来的二维数组,传参的解析方式不同。#i

2021-09-05 14:28:39 2740 1

原创 使用GDB中的watch来调试指来指去的指针

引言C代码中经常会有大量的指针在很多不同函数中传来传去,甚至还有强制类型转换,让阅读代码和调试BUG的人苦不堪言。更有甚者将全局变量指针赋值给局部变量,然后再作为参数传出并修改。 这是官网的说明:http://sourceware.org/gdb/current/onlinedocs/gdb/Set-Watchpoints.html#Set-Watchpoints说明watch是gdb众多命令中的一个,用来检测变量,当被监测的变量被修改时,...

2021-08-15 22:59:39 2166

原创 movaps指令引起的复位

最近项目升级了gcc编译器,需要增加编译选项-ftree-slp-vectorize,加了后发现程序莫名其妙挂掉,使用gdb挂起也没看到有内存错误,使用disassemble才看到当程序运行到movaps指令时挂掉了。上网搜索发现这是SEE指令,movaps要求操作地址是16字节对齐。但是由于项目使用的并不是glibc的malloc,而是自己研发的malloc,这个malloc并不像是glibc一样在64位系统下16字节对齐,而是4字节对齐,所以当申请的地址不能被16整除时,movaps指令异常,程序挂掉。

2021-02-13 18:22:18 1545

原创 关于gdb的使用心得

GDB作为一个很强的调试工具,我以为已经是人尽皆知了,至少在嵌入式中是这样,但是在平时工作中发现并非如此,很多人依然在使用加log的方式来定位诸如段错误之类的问题,不是说加log不好,只是有时候GDB效率更高。关于用法网上的资料已经很丰富了,这里只是做个简单的总结,以及我经常用到调试方法,我把它分成三部分:常用命令 难以复现的问题 没有加-g的文件调试。常用命令1.setargs:设置入参,有的程序需要传参#include <stdio.h>int main(in...

2021-01-09 21:28:49 686

原创 由“Couldn‘t resolve host ‘mirrors.tencentyun.com‘“引发的安全问题

最近买了一个腾讯的云服务器,刚开始几天用起来没有一切都正常。后来发现使用yum update会报下面的错误:Loaded plugins: fastestmirror, securitySetting up Install ProcessLoading mirror speeds from cached hostfilehttp://mirrors.tencentyun.com/epel/6/x86_64/repodata/repomd.xml : [Errno 14] PYCURL ERROR

2021-01-03 10:06:20 1963 3

原创 char* 与 char[] 返回值

环境Linux VM-0-2-centos 2.6.32-754.35.1.el6.x86_64 #1 SMP Sat Nov 7 12:42:14 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux示例#include <stdio.h>char* get_name_1(){ char name[] = "zhaoyuhe"; return name;}char* get_name_2(){ char *name = ".

2021-01-02 13:19:49 3130

原创 虚拟内存与函数栈

我们知道一段程序要在计算机中运行,他需要占用内存,一部分用来存储程序内容,一部分用来运行程序(程序运行过程中也是需要申请内存的)。忽略部分细节,一段程序加载到linux内存后大概是这样存储的。 内核空间 内核空间 1G 用户空间 3G 栈 内存映射区 堆区 bss段 数据段 代码段 保留区...

2020-12-20 13:37:17 285 1

原创 计算机中的二进制表示

在计算机中数据运算的本质其实各种门电路的组合,这些门实现了加减乘除运算,这么门的输入和输出都是由0和1组成。由此不难推出,在计算机的世界中是使用0和1存储和计算所有数据的。其实在内存和硬盘中也是如此。据说量子计算机可以维持多种状态,跳出0和1期望可以看到。数据数据在计算机中可以分为正整数,负整数,浮点数三种。正整数为了方便数据表示,计算机中定义多种数据类型,每种数据类型取值范围和占用的内存不同,我们可以根据他们占用的内存来计算出他们的取值范围。比如C语言中unsigned int类型(这里先

2020-12-13 22:55:14 3860

原创 编译过程

gcc对C语言的编译分为四个步骤:预处理预处理阶段会针对#开头的语句做处理,头文件和宏定义会展开直接插入到代码中,但是比如#if这样的判断会根据条件是否满足做展开处理。#include <stdio.h> //预处理阶段此处会展开#include "io.h" //预处理阶段会在此处展开typedef struct{ int a; char b; short c;}ST_HELLO;#define WHILE(value) while((

2020-10-04 12:55:37 161

原创 git概述-脑图

2020-05-05 20:39:54 125

原创 硬件脑图

2020-04-04 21:05:41 192

原创 linux启动脑图

2020-04-03 18:14:22 126

原创 ARM概述脑图

2020-04-02 19:03:28 545

原创 一步一步写嵌入式操作系统----MMU

MMU作为一个硬件单元有把虚拟地址转换成物理地址的作用,操作系统可以让用户运行大量的程序,这些程序都需要分配内存,而一段程序重复运行的时候,如果没有MMU,一段物理地址不可能被重复使用,而有MMU的时候可以把同一虚拟地址映射到不同的物理地址段,这样就避免地址冲突了。而且大家都有体验,以linux为例,存在交换分区,它可以把硬盘的存储空间映射到虚拟地址中,这样一来相当于内存被扩容了,当然这样的便利也...

2019-12-06 15:49:27 261

原创 一步一步写嵌入式操作系统----启动

启动顺序:程序运行栈初始化→机器处理外设初始化文件调用顺序:leeos.lds(链接脚本决定从_start开始执行)→start.s(_start)→init.s(__vector_reset,plat_boot)→boot.cabnormal.s.global __vector_undefined.global __vector_swi.global __vector_pre...

2019-12-06 15:05:20 268

原创 一步一步写嵌入式操作系统----环境搭建

本文是《一步一步写嵌入式操作系统》的学习笔记。书籍工具下载可参考:https://github.com/Joyounger/leeos工具:skyeye 用于在linux上模拟开发板,书中使用的是s3c2410;ubuntu12.0+skyeye1.2.61.在ubuntu中安装skyeye1.2.62.配置skyeye.conf文件,文件和代码位于同级目录下#cpu型号c...

2019-12-06 13:39:04 500

原创 Imx6 网络烧录uboot和linux kernel

正常烧录uboot和kernel需要使用MfgTool2工具、串口线和boot下载模式;但是因为项目需要,机器无法连接串口线,且机器数量多,一个一个拆解升级太麻烦,所以寻找linux下网络更新方法。工具:putty或者xhell、烧录工具Profiles\Linux\OS Firmware\firmware-3035\initramfs.cpio.gz\initramfs.cpio\usr\b...

2019-10-24 11:15:52 346

原创 linux watchdog应用

最近机器运行一段时间后会出现卡顿,然后就是无法远程连接(ssh/telnet)均不可,接着就会出现无法ping通的问题;经过一番调查发现驱动程序里有一个线程死循环了,虽然使用了udelay()函数做延迟,但是我们知道这个函数不会让出CPU,而是让CPU计时,跟程序死循环的效果的是一样的,导致CPU占用率达到100%,这个时候一旦有另外一个内核进程不小心被用户手动开启,比如执行dmesg -n 8(...

2019-09-29 17:48:42 867

原创 一次linux网络和ssh异常分析

坐在安静空荡的办公室,听着楼下打球的声音和汽车的鸣笛声,浮躁的心此时有了片刻的宁静。最近部署在场外的机器陆续出现ssh远程无法连接的问题,更甚者无法ping通。经过一番调查发现是内存泄露导致,项目的程序随着时间会占用越来越大的内存,当超过系统极限时,操作系统会杀死该进程,如果到此还不会造成其他问题,我们会立刻发现功能无法使用,问题也会就此解决;但是为了确保该程序的运行,在系统的启动脚本里加了检...

2019-09-17 18:47:37 212

原创 im6x板Linux应用层I2C通信

驱动给应用层提供了open、read、write、ioctl等函数来实现对底层硬件的控制,前三个参数相比其他设备比如uart、spi等使用方法都一样,主要的不同在ioctl里。/* i2c_dev.h *//* ioctl函数参数 */#define I2C_SLAVE 0x0703 /* Use this slave address */#define I2C_SLAVE_FOR...

2019-08-01 18:38:59 538

原创 linux学习---嵌入式系统简单启动流程

2019-07-22 14:59:33 150

原创 交叉编译Linux常用命令

嵌入式Linux不像ubuntu等系统安装命令很方便,常常需要去下载源码然后再交叉编译,一个两个还好,多了会很麻烦。有没有类似工具包这种的源码,一次编译皆大欢喜呢?当然是有的。busybox中包含了大量的Linux常用命令,官方说明:Currently available applets include: [, [[, acpid, addgroup, adduser,...

2019-05-06 15:25:28 4530

原创 GDB调试之watch变量跟踪

开发中经常遇到某个变量明明已经赋值了,但是最后得到的结果却并非赋予的值。解决这样问题让人很头疼,原因我们可能都知道,可能是内存越界导致这部分值被覆盖掉了,但是什么时候被覆盖掉的呢?总不能在每个怀疑的地方打印这个值吧?这样效率很低,而且定位不一定准确。这个时候使用gdb调试中的watch就可以轻松搞定。顾名思义跟linux中的watch命令类似:实时的监视你需要查看的内容。比如下面程序:#...

2019-04-29 16:39:56 13931

原创 python爬取小说《剑来》

原理通过BeautifulSoup解析网页源码,通过正则表达式将小说正文从源码中筛选出来,根据标签取得下一章的url实现循环爬取整部小说。思路使用浏览器打开要爬取的网页,右键查看网页源码 分析要爬取的内容所在的标签 通过BeautifulSoup将要爬取的标签筛选出来 使用正则表达式做进一步的筛选处理按照上面的思路配合代码以及网页源码很快就能理解整个过程了# 导入url...

2019-04-18 10:31:18 629 1

原创 Linux 下 NTP 时间同步

问题项目中有arm开发板NTP时间同步失败,首先想到在windows下测试NTP服务器:w32tm /stripchart /computer:<ntp ip/url>C:\Users\bm>w32tm /stripchart /computer:192.168.2.140正在跟踪 192.168.2.140 [192.168.2.140:123]。当前时间是 20...

2019-04-16 16:23:31 359

原创 模块通讯之回调函数

如果模块A有数据要给模块B,很明显模块B提供API给模块A,A只需要调用API传输数据就可以轻松传输数据了。但是如果 B无法提供API给A呢?比如A用c语言开发,B用Java开发;又或者模块A是底层厂商的产品,提供给客户,那么上面的方法就行不通了,这个时候就要用到回调函数了。回调函数其实就是函数指针,即指向函数的指针变量。/**********模块A*************///回调...

2019-04-11 16:14:58 401

原创 s5p4418 android5.1编译

系统:Ubuntu14.04 (系统一定要用14.04 64位版本,之前用16出现了很多莫名其妙的问题)下载源码:http://pan.baidu.com/s/1qYPdgBU密码:6l7o(找荣品客服取得下载链接)系统设置内存>=4G,太小后面会不够用报错,不够的增加swap处理器根据电脑自身数量设置,最好设置到最大,数量越多编译速度越快硬盘最少40G,代码本身...

2019-04-08 17:21:38 332

原创 Activeandroid数据库删除前N行数据

项目需要实现一个维持数据库固定大小的功能,防止数据库无限增长占用空间,需要在数据达到某个数值之后删除多余的数据(删除早时间的数据)。比如要保存10000条数据,当数据达到12000时,删除1~2000数据。Activeandroid是基于sqlite实现的,直接delete from table order by id limit n会报错,下面是笔者实现的方法://将表数据按照ID倒叙...

2019-04-02 10:20:27 1139

原创 c线程通讯—数据缓冲

两个线程之间需要数据共享,由于两个线程处理速度不一,为了防止数据丢失设置一个缓冲buffer:#define MAX_LINE 1024 //数据buffer最大长度#define COUNT_MAX 128 //最大数据buffer数typedef struct{ unsigned int buffersize; //buffer长度 char buf[M...

2019-03-26 16:22:38 286

原创 python 循环接收http请求数据

最近做一个项目需要测试http请求,大量密集的http请求测试,网上只找到了postman这种client工具,没有发现http server工具,于是想手写一个。听闻python快捷,网上找了一个,但是只能接收一次数据,于是改动了一下,测试了一下效果还不错,这里记录一下。# coding:utf-8#环境:python2.7import socketfrom multiproces...

2019-03-25 16:03:21 5410

原创 libuv之管道

由于libuv的异步特性,相比一般轮询具有实时性高速度快的优点,这里介绍使用libuv实现进程间通讯,采用有名管道的通讯方式。当然还有其他IO方式,如下图。loop libuv的使用离不开loop循环,可以把它理解成一个队列,你可以向这个队列里添加自己要做的事情,libuv会根据你的设定执行队列里的任务。uv_loop_t * loop = uv_loop_ne...

2019-03-20 14:54:22 1077 5

原创 Android引用c语言so库

思路1.在linux环境编译交叉编译so库2.在Android Studio创建包含C++的工程3.在Android工程中引用so库,在C++中利用JNI编写java可以调用的API编译so库编译之前先了解以下Android系统的运行环境,从CPU分为以下几类:1.armeabiv-v7a: 第7代及以上的 ARM 处理器2.arm64-v8a: 第8代、64位ARM处...

2019-01-28 15:11:53 924

原创 linux下BLE(低功耗蓝牙协议)C语言开发笔记(2)---ble蓝牙扫描-连接-读写

前言bluez编译完后会生成很多命令行工具,比如gatttool、hcitool、bluetoothctl等,bluetoothctl的生成需要在configure的时候把--disable-test去掉。这些工具可以用来在linux环境下与ble设备进行调试,但是本人需要的是可用的c语言api,如果你只是开发经典蓝牙,那么恭喜你,交叉编译完后的的api足够用了;但是低功耗蓝牙用的C接口是没有...

2018-12-28 18:46:55 15706 31

原创 linux下BLE(低功耗蓝牙协议)C语言开发笔记(1)---经典蓝牙启动扫描

经过几天的煎熬,终于把bluez移植到了ARM环境上,终于可以开始使用了,但是在运行hci_get_route接口后提示找不到对应的设备,后来发现是蓝牙设备没有启用,下面用到命令在交叉编译的时候应该已经生成了,直接使用即可。1.先执行hciconfig看到设备 hci0就是蓝牙模块了2.执行hciconfig hci0 up,然后再调用hci_get_route就OK了。下面...

2018-12-20 16:45:21 5358 2

原创 bluez5.50交叉编译

编译环境:ubuntu14.04编译工具:arm-none-linux-gnueabi-gcc参考文档https://blog.csdn.net/gatieme/article/details/48751743这个文档说的很详细,但是编译的是低版本的bluez,下面是编译bluez5.50中遇到的问题总体思路:交叉编译过程中遇到提示缺少的库就去下载编译,有些库不是必须的,可以...

2018-12-20 13:40:17 4370

原创 宏定义秒数

一年秒数定义,忽略闰年#define SECONDS (365*24*60*60)UL宏定义数字默认是unsignedint类型,UL是指无符号长整型,365*24*60*60=‭288313344‬,这个数转换成16进制是0x‭112F5000‬,如果是32位机器用unsignedint标识完全够用;但是如果是16位机unsigned int类型范围是0~2^16明显不够用,所以稳妥...

2018-09-13 13:42:47 1155

原创 linux mysql 5.6 内存过大的问题

在linux上安装5.6版本的mysql后,发现内存达到700M,经过一番上网查找发现下面的设置可以减少内存:[mysqld]performance_schema_max_table_instances=400 table_definition_cache=400 table_open_cache=256重启mysq...

2018-09-07 16:46:33 3397 1

原创 局域网IP查询

1.linux局域网ip查询nmap -sP 192.168.1.0/24  查询192.168.1段内可ping通的所有ip并打印到屏幕上,还有很多参数,具体如下:-iL &lt;inputfilename&gt;:从主机/网络列表中输入-iR &lt;num hosts&gt;:选择随机目标--exclude &lt;host1 [,host2] [,host3],......

2018-05-21 17:05:54 10205 1

watchdog-5.9.zip

基于linux看门狗添加了CPU softlock检测程序,仅供参考

2019-09-29

llrp协议说明英文

llrp协议说明,包括盘点扫描设置等功能的message说明。

2019-03-21

Bluetooth for Programmers

ble hci、gatt、l2cap层说明及c语言编码,英文,入门级别

2019-01-03

基于bluez5.50修改的gatt api库

由于bluez并没有提供官方可用的C语言 gatt库,所以我对源码结构做了些修改,把用到的ap编译成静态库,使用前阅读readme.txt 详情参考https://blog.csdn.net/u010659887/article/details/85329276

2018-12-29

SM2椭圆曲线公钥密码算法标准说明文档

SM2椭圆曲线公钥密码算法国标,里面有详细的算法说明,需要一定的数学功底

2018-06-07

go1.10.2.windows-amd64.msi

最新的golong windows 64位安装 go1.10.2.windows-amd64

2018-05-04

libuv 源码+demon

libuv源码+demon,包含计时器、网络、管道、字符流等内容

2018-04-13

arm环境内存泄漏检测工具valgrind

arm环境内存泄漏检测工具valgrind,用于检测arm环境下的内存泄漏

2018-03-27

arm版gdb可直接使用

arm板子上使用的,不用编译,修改权限直接使用,项目中使用的,放心使用

2018-01-30

libuv API说明及用例

libuv api 说明及用例 英文文档 但是很好理解

2017-08-22

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

TA关注的人

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