
嵌入式开发
文章平均质量分 94
芯想事程
嵌入式路程上的点点滴滴
展开
-
GN实践详解
跨平台:GN实践详解(ninja, 编译, windows/mac/android实战) 置顶 TechGhost 2019-...转载 2021-03-22 20:10:44 · 8397 阅读 · 1 评论 -
基于linux(raspberry pi)的BLE开发
参考资料:1、Linux(RaspberryPi)上使用BLE低功耗蓝牙2、Linux下Bluez的编程实现3、和菜鸟一起学linux之bluez学习记录24、BLUEZ在Linux下的移植5、编译bluez-5.25 通过 Linux环境下运行6、树莓派安装BlueZ协议栈(Raspberry pi Bluetooth LE)7、蓝牙最新版本 2020/9/118、在blueZ 协议栈的 基础上 用 python 方式进行编程 ,python 库 bluepy参考博客:https://w原创 2020-09-11 11:41:47 · 581 阅读 · 0 评论 -
Linux 树莓派 Can编程
参考博客地址:http://velep.com/archives/1181.html《Linux CAN编程详解》是一篇百度文库上的文档,主要描述了以下内容:can总线介绍及其帧类型;Linux 系统中CAN 接口配置;Linux 系统中CAN 接口应用程序开发;Linux 系统中CAN 接口编程实例总体来说,这篇文档,对于嵌入式linux can应用编程还是有很大的帮助。特别是里面关于“Linux 系统中CAN 接口应用程序开发”的介绍,总结的很全面,讲述的比较清楚。原博主编写的linux原创 2020-09-10 15:06:41 · 1400 阅读 · 1 评论 -
对‘gettid’未定义的引用解决办法
在写程序时想通过gettid()函数获取线程id,但是编译时报错,undefined reference to gettid()原因:是因为gittid是linux实现的,外面无法调用解决办法:将gettid()函数里的实现在外面封装实现一下即可,代码如下//包含此头文件#include <sys/syscall.h> pid_t gettid(void){ return syscall(SYS_gettid);}然后再调用gettid()函数即可。...原创 2020-08-12 11:12:28 · 2438 阅读 · 0 评论 -
linux gcc strip命令
参考链接:https://blog.youkuaiyun.com/mayue_web/article/details/104001392?utm_medium=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromMachineLearnPai2-1.compare&depth_1-utm_source=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromMachineLearnPai2-1.c转载 2020-07-09 17:47:56 · 1268 阅读 · 0 评论 -
获取进程信息
#include <stdio.h>#include <string.h>#include <unistd.h> int main(){ pid_t pid = getpid(); char strProcessPath[1024] = {0}; if(readlink("/proc/self/exe", strProcessPath,1024) <=0) { return -1; } char *strProcessName = .原创 2020-06-10 12:10:39 · 391 阅读 · 0 评论 -
valgrind linux下内存泄露检测工具
一linux下安装valgrind 步骤1、下载最新版本2、tar -jxvf valgrind-3.15.0.tar.bz2.tar.bz23、cd valgrind-3.15.04、sudo ./configure5、sudo make6、sudo make install7、sudo vim /etc/profile.d/valgrind.sh添加VALGRIND_ROOT=/home/edan/download/valgrind-3.15.0VALGRIND_INCLUDE=/u原创 2020-05-26 14:54:04 · 229 阅读 · 0 评论 -
xshell评估过期解决办法,非常简单
首先,你的xshell不要卸载,不需要动任何地方。进官网:https://www.netsarang.com/zh/,翻到最下面,下载那里点家庭/学校免费。然后会跳转到下面这个界面,按图中标注操作点击下载按钮:然后会有这段文字:打开邮箱,没什么问题的话过十几秒就能收到两封邮件:然后安装然后发现可以打开了,而且许可类型是家庭/学校:用这种方式有一个大好处就是你不需要卸载xsh...转载 2020-04-23 11:41:20 · 19458 阅读 · 6 评论 -
vmware虚拟机共享主机ip
当主机是使用的无线网时,虚机的无线网配置步骤分为三步:第一步:主机网络设置——将无线网络共享给VMware Network Adapter VMnet1或者VMware Network Ad...转载 2020-04-22 12:58:55 · 6111 阅读 · 0 评论 -
通过网络服务器获取时间
工作项目中终端联网后不会自动同步系统时间,导致一些依赖时间的证书无法生效,所以需要在系统启动时手动获取系统时间,并设置系统时间。时间服务器地址1时间服务器2我用的是第一个。步骤:1.通过libcurl的api获取网页信息,2、通过json对数据解析,将时间字符串转化为longlong类型3、通过settimeofday()设置息系统时间。...原创 2020-04-16 17:45:36 · 485 阅读 · 0 评论 -
linux中proc/pid/status含义
参考链接:https://blog.youkuaiyun.com/ibless/article/details/85123386原创 2019-12-20 14:29:05 · 337 阅读 · 0 评论 -
git的详细教程
参考链接:https://blog.youkuaiyun.com/qq_36150631/article/details/81038485 预警:因为详细,所以行文有些长,新手边看边操作效果出乎你的预料)一:Git是什么?Git是目前世界上最先进的分布式版本控制系统。工作原理 / 流程:Workspace:工作区Inde...转载 2019-12-16 18:55:43 · 127 阅读 · 0 评论 -
gdb调试步骤详解
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声...转载 2019-12-03 15:13:11 · 381 阅读 · 0 评论 -
交叉编译inetutils工具支持telnet登陆
1.源码下载地址:http://ftp.gnu.org/gnu/inetutils/2.解压后进入目录,我下载的是inetutils-1.9.tar.gz版本tar xzvf inetutils-1.9.tar.gzcd inetutils-1.9//这里prefix不要随意修改,据说文件会自动去搜索/etc下面的文件,修改后就会乱sudo ./configure --host=arm...原创 2019-12-02 13:15:23 · 1383 阅读 · 0 评论 -
arm-linux 开发板修改时区
开发板环境编译好之后,发现时间设置好之后,重启立刻就变了,正好是8个小时,应该是时区的问题。使用date查看时间是UTC时间而不是CST,解决办法:将ubuntu系统下面的/usr/share/zoneinfo/Asia/shanghai文件复制到开发板的/etc/目录下,并改名为localtime。在启动初始化文件/etc/init.d/rcS文件中添加一行,/sbin/hwclo...原创 2019-11-15 12:36:42 · 604 阅读 · 0 评论 -
linux设置时区
Linux系统时区设置</div> 开始设置时区时,参考网上的资料,使用tzselect 命令来进行,结果发现tzselect命令只是告诉了设置时区的方法,而并不是真的去修改/etc/sysconfig/clock这个文件。换句话说就是tzselect命令仅仅告诉我们通过设置TZ这个环境变量来选择的时区,然后将变量添加到.profile文件中。下面就简单介绍...转载 2019-11-15 12:25:36 · 188 阅读 · 0 评论 -
android jni 将BYTE* 和 jbyteArray 之间的转换
工作中用到jni字符数组返回的情况,按照字符串返回出现了数据异常今天,简单讲讲如何在jni中将BYTE* 转成 jbyteArray。这个是我在做jni时碰到的问题。因为c传回的值是BYTE*,而返回给java代码是byte[],对应的jni的数据必须是jbyteArray,所以需要转换。在网上搜索了资料,终于是解决了这个问题。C++中的BYTE[]转jbyteArray //...转载 2019-10-31 16:42:15 · 3560 阅读 · 0 评论 -
cmake使用二
参考链接cmake 是一个跨平台、开源的构建系统。它是一个集软件构建、测试、打包于一身的软件。它使用与平台和编译器独立的配置文件来对软件编译过程进行控制。 二、常用命令1. 指定 cmake 的最小版本cmake_minimum_required(VERSION 3.4.1)这行命令是可选的,我们可以不写这句话,但在有些情况下,如果 CMakeLists.txt 文件中使用了...转载 2019-10-16 15:24:11 · 234 阅读 · 0 评论 -
cMake的使用
一、 基本使用安装:下载二进制包后可直接解压使用...原创 2019-10-16 14:55:23 · 353 阅读 · 0 评论 -
回调函数
C语言回调函数详解 - 江召伟 - 博客园<link rel="stylesheet" href="/css/blog-common.min.css?v=HrvK75b61-WJQPXtn_liCIWUC4EcnwT_lmrRbncieJo" /><link id="MainCss" rel="styl...原创 2019-09-16 15:59:42 · 148 阅读 · 0 评论 -
VScode 的c++ 环境配置
参考链接:https://www.cnblogs.com/ghjnwk/p/9806677.html原创 2019-09-08 16:47:00 · 139 阅读 · 0 评论 -
protobuf,protobuf-c的安装和交叉编译
一 、 protobuf 安装下载链接1. 确认安装依赖库:automake ,autoconf ,libtool2. 下载 protobuf 安装文件,protobuf-cpp-3.5.0.tar.gz ,解压,./configuremakemake checksudo make install【默认安装路径:/usr/local/】3. 安装完添加环境变量, vi...原创 2019-06-13 14:24:03 · 5401 阅读 · 0 评论 -
虚拟机开机出现welcome to emergency mode! 解决方法
CentOS7.3昨天用的还好好的的,但是今天开机提示如下(如图提示): welcome to emergency mode!after logging in ,type “journalctl -xb” to view system logs,“systemctl reboot” to reboot ,“systemctl default” to try again to boot int...转载 2019-09-20 11:09:54 · 3380 阅读 · 0 评论 -
PGP密钥对生成和应用
一、安装方法[root@centos gnupg-2.1.4]# yum install gnupg二、检查安装是否成功[root@centos gnupg-2.1.4]# gpg --help如果屏幕显示GPG帮助,就表示安装成功。三、生成密钥对[root@centos gnupg-2.1.4]# gpg --gen-keygpg (GnuPG) 2.0.22; Copyrig...原创 2019-09-20 14:12:40 · 2774 阅读 · 0 评论 -
程序员适用工具网站
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 ...转载 2019-09-23 13:25:43 · 388 阅读 · 0 评论 -
三次握手,四次挥手
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 ...转载 2019-10-09 10:01:21 · 111 阅读 · 0 评论 -
VScode配置c/c++环境
版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。 ...转载 2019-08-27 11:52:18 · 242 阅读 · 0 评论 -
linux内核的双向链表
一、概述 Linux内核中大量使用了链表这个基本数据结构,因此有必要去窥探一下其“葫芦里卖的是什么药”。先来些基本知识点吧: 1.数据元素间是一对一关系; 2.链表中的元素个数是有限的; 3.同一表中各数据元素的类型和长度相同。 二、实现 先上代码,有个感性的认识,后面再解释。 #include<...转载 2019-08-20 12:45:52 · 190 阅读 · 0 评论 -
mv命令的c代码实现
主要通过rename()函数来实现,不过如果新路径文件已存在则会直接覆盖,如果像要询问后操作是否覆盖,可以通过调用access()函数来处理;小记:以下仅供参考,经测试,直接使用rename()函数就可以实现mv的功能。之所以贴出该代码,其中宏定义的打印函数值得借鉴源码#include <stdio.h>#include <dirent.h>#include &...原创 2019-08-01 15:41:42 · 2114 阅读 · 0 评论 -
c语言实现rm命令,删除指定文件或目录
Linux下系统api int rmdir(const char *pathname);可以删除目录。但使用rmdir函数时,目录必须为空,否则调用失败,函数返回-1,执行成功时,函数返回0。也可以通过shell命令rm -rf删除掉非空目录。但在程序中若要调用shell命令必须通过system或者exec函数簇启动一个进程。这样一是耗费系统资源,降低程序执行的效率。二是无法知道执行的结果。故自...原创 2019-08-01 13:20:00 · 7577 阅读 · 0 评论 -
智能卡ISO7816协议学习参考记录
1.智能卡7816协议2.ISO 7816协议及智能卡驱动介绍3.ISO7816 传输协议 T0 T14APDU5.IC卡通信协议详解(7816-3)原创 2019-07-16 12:35:35 · 1410 阅读 · 0 评论 -
linux基础之spi驱动
转 linux基础之spi驱动程序理解 2012年10月06日 16:57:03 齐鸣飞 阅读数 21979 ...转载 2019-06-13 17:01:32 · 429 阅读 · 0 评论 -
十个值得学习的c开源项目(嵌入式)
开源世界有许多优秀的开源项目,我选取其中十个最优秀的、最轻量级的C语言的项目,希望可以为C语言开发人员提供参考。十个最值得阅读学习的C开源项目代码1. Webbench2. Tinyhttpd3. cJSON4. CMockery5. Libev6. Memcached7. Lua8. SQLite9. UNIX v610. NETBSD1. Webbenc...转载 2019-06-13 15:33:49 · 10358 阅读 · 0 评论 -
交叉编译openssl和paho-mqtt
下载源码官网下载最OpenSSL V1.1.0交叉编译tar zxvf openssl-1.1.0g.tar.gzcd openssl-1.1.0g/./config no-asm shared --prefix=$PWD/install --cross-compile-prefix=arm-none-linux-gnueabi-参数解析:no-asm : Do not use...转载 2019-06-06 16:42:43 · 1069 阅读 · 0 评论 -
paho-mqtt交叉编译
1、下载paho.mqtt.c工程源码# git clone https://github.com/eclipse/paho.mqtt.c.git2、创建编译目录1. # cd paho.mqtt.c2. # mkdir build_arm3、生成编译...转载 2019-06-06 12:10:53 · 3328 阅读 · 1 评论 -
VM虚拟机扩展硬盘容量
VM虚拟机扩展硬盘容量第一步,关闭系统,给虚拟机硬盘增加空间。第二步,启动系统。查看硬盘大小和分区情况。第三步,分区。第四步,格式化分区。第五步,挂载。第六步,开机自动挂载。第一步:当前硬盘大小:扩展到80GB:点击扩展:第二步:parted –l命令查看硬盘空间和分区情况(也可以使用fdisk -l),注意使用root权限可以看到硬盘空间为85.9GB(至于为...转载 2019-05-16 16:26:26 · 1641 阅读 · 0 评论 -
can通信协议
译 CAN通信协议(一) 文章目录目录前言CAN基础知识介绍CAN的特点物理层特征通讯节点波特率及位同步位时序分解波特率总结链接地址前言因为工作,需要研究CAN总线。博主的CAN学习参考正点原子和野火的教程。虽然没有买板子,不过对于博主现在来说,感觉开发板都差不多吧!毕竟工作中开发板肯定是不一样的!CAN基础知识介绍CAN是Con...转载 2019-05-15 10:09:46 · 1379 阅读 · 0 评论 -
UNIX域套接字二
版权声明:开心源自分享,快乐源于生活 —— 分享技术,传递快乐。转载文章请注明出处,谢谢! https://blog.youkuaiyun.com/luckydarcy/article/details/78352230 </div> <link rel="sty...转载 2019-04-19 10:46:13 · 172 阅读 · 0 评论 -
mv命令的c代码实现
主要通过rename()函数来实现,不过如果新路径文件已存在则会直接覆盖,如果像要询问后操作是否覆盖,可以通过调用access()函数来处理;小记:以下仅供参考,经测试,直接使用rename()函数就可以实现mv的功能。之所以贴出该代码,其中宏定义的打印函数值得借鉴源码#include <stdio.h>#include <dirent.h>#include &...原创 2019-08-01 16:00:55 · 2680 阅读 · 0 评论 -
mv命令的c代码实现
主要通过rename()函数来实现,不过如果新路径文件已存在则会直接覆盖,如果像要询问后操作是否覆盖,可以通过调用access()函数来处理;小记:以下仅供参考,经测试,直接使用rename()函数就可以实现mv的功能。之所以贴出该代码,其中宏定义的打印函数值得借鉴源码#include <stdio.h>#include <dirent.h>#include &...原创 2019-09-16 16:00:29 · 882 阅读 · 0 评论