![](https://img-blog.csdnimg.cn/20201014180756919.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
工作笔记
Coder_BCM
深漂程序猿,从事嵌入式linux开发。
展开
-
嵌入式linux学习笔记-- 记录解决stdout 延迟的问题
公司某产品 需要对软件的运行日志进行记录,目前的方案使用的是 linux的匿名管道进行数据的转发,将业务进程的print的信息发送给一个专门的日志处理进程 ,但是遇到了 日志延迟非常高的问题 经查是因为 stdout 的缓冲机制导致的 默认情况下的 输出形式就是行缓冲 但是切换为数据流输出之后系统自动将前面的进程的输出转换为 全缓冲 ,所以需要主动的切换前一个进程的缓冲类型为行缓冲!主要就是介绍了 缓冲三种类型 全缓冲 行缓冲以及不缓冲, 我们的应用场景中应该使用行缓冲!原创 2022-12-21 00:27:53 · 265 阅读 · 0 评论 -
嵌入式学习笔记--- c++结构体的内存按bit存取的实现
今天拜读公司大佬写的代码 发现了 c++ 的结构体以及内存分布的一些实现细节,代码调整完demo 大概如下:(代码中的细节都删掉了,变量名全部换了 原本每一个bit 都带有自己的意义)后续对于bit 的访问 就可以直接按照上述的形式进行了,这样可以很方便的就操作到bit , 对于一些内存敏感的应用 会很方便,例如 modbus 直接修改某一个输入寄存器的bit。原创 2022-09-12 16:19:10 · 875 阅读 · 0 评论 -
嵌入式linux学习笔记-- c++ 的 操作符重载
复习了一下c++ 的操作符重载以及 模板,随便写了一个demo 记录一下。#include <iostream>#define LOG(str) {printf("this is %s:%d \t%s\n",__FUNCTION__,__LINE__,str);}class MyOptr final{private: uint16_t *m_ptr;public: MyOptr(); void init(uint16_t *ptr); MyOptr(原创 2022-05-08 23:16:43 · 602 阅读 · 0 评论 -
嵌入式c++学习笔记-- std:: function std::bind的一种使用方法
#include <stdio.h>#include <functional>class test{ public: void test1(void){printf("[%s] enter ...\n",__FUNCTION__);}; void test2(void){printf("[%s] enter ...\n",__FUNCTION__);}; void test3(void){printf("[%s] enter ...\n",__原创 2022-04-10 21:30:46 · 1147 阅读 · 0 评论 -
嵌入式linux学习笔记--linux的消息队列的坑
关于消息队列的一些总结:1. msgsnd的 mtype 不能为0 2. msgsnd 和 msgrcv 的 size 是不包含前面的 mtype的size 的大小。3. 使用消息队列的时候需要注意 处理残留的数据,如果进程因为一些原因 导致一些数据没被读走,那么这些数据会被留在队列里面!!!...原创 2022-04-10 17:31:08 · 546 阅读 · 0 评论 -
嵌入式linux学习笔记--- 使用文件锁来判断 进程是否活动
最近项目中 需要在一个进程中监控另外的一个进程 所以使用了文件锁的方案去实现代码如下:#include <sys/file.h>#include <stdio.h>#include <errno.h>#include <pthread.h>#include <fcntl.h>#include <unistd.h>#define file_lock "/home/someone/file_lock"void file原创 2022-03-26 15:42:30 · 546 阅读 · 0 评论 -
嵌入式linux学习笔记--- typedef的 一种使用方法
迅速记录一下 ,今天看到代码里面的typedef 的用法,我居然看不懂, 记录一下相关的代码段 大致如下typedef char Temp1[12];typedef char Temp2[123];typedef struct { // ....... Temp1 t1; // char [12] Temp2 t2; // char [123] // .......} someType;...原创 2022-03-08 21:49:53 · 673 阅读 · 0 评论 -
嵌入式linux学习笔记--gitlab学习笔记-gitlab-runnner简单的使用介绍
最近在搞gitlab 的环境以及 配套的自动化相关的一些尝试,记录一下。为了进行最近的实验,我特意开了一台虚拟机,使用的是dell R720XD 服务器配合 exsi 虚拟化了一台 ubuntu 18.04 配置如下0. 安装 gitlab服务器的安装部分网上很多教程 就不去班门弄斧了,链接如下:https://www.cnblogs.com/hgzero/p/14088215.html1. 简单的登录测试一下服务器从gitee 拉了一个项目做测试,随便挑了一个然后使用 将工程克隆岛 新原创 2022-03-07 00:23:10 · 3336 阅读 · 0 评论 -
嵌入式linux学习笔记-- 记录一种dlopen 打开的动态库无法被卸载的情形,情形分析以及对应的解决方法
项目中使用了rapidjson 的库函数,然后将这个库分别编译进入了不同的动态库中,然后产品的动态库设计上要能实现动态的卸载和装载 然后就遇到了问题。具体的表现就是 打开的动态库无法被卸载。...原创 2022-02-13 15:54:13 · 1236 阅读 · 0 评论 -
嵌入式linux学习笔记---关于linux系统的时间设置的一些理解、linux系统设置时间的方法
@echo offcd ./srccd %~d0set server_ip=192.168.5.1set date=%date:~0,4%-%date:~5,2%-%date:~8,2%set time=%time:~0,2%:%time:~3,2%:%time:~6,2%echo time now is %date% %time%plink.exe -ssh -l root -pw yourPasswd %server_ip% rm /etc/localtimeplink.exe -ssh原创 2022-02-13 16:30:28 · 868 阅读 · 0 评论 -
嵌入式linux学习笔记-- 对于动态库的一些操作 dlopen
最近公司重构代码,看到了公司的一位经验丰富的工程师的一些C++ 操作 属实有被秀到,估计光看他写的代码都够我写很多总结了。 根据他写的代码以及公司未来的代码的一些规划 我也总结一些无关痛痒的知识吧。我们的新一代的代码架构将会去做到能实时的更换模块(就是c 编译出来的动态库 能动态的去加载! 目前的思路就是使用dlopen 以及dlclose的操作去动态的加载库文件) 之前一直没想到动态库的加载还可以这么的简单,高效。下面的一些内容从大佬们的博客直接拼凑过来的 既然别人已经总结了一次 我就不去班门原创 2021-12-26 22:15:00 · 2279 阅读 · 0 评论 -
工作笔记-- Visual Studio Code无法监视此大工作空间中的文件更改
cat /proc/sys/fs/inotify/max_user_watches可以通过编辑/etc/sysctl.conf并将此行添加到文件末尾来将限制增加到最大。fs.inotify.max_user_watches=524288然后可以通过运行加载新值sudo sysctl -p。524,288是可以查看的最大文件数,但是,如果您的环境特别受内存限制,则可能希望减少文件数。每个文件监视占用1080个字节,因此假设所有524,288个监视都被消耗,则导致大约540 MiB的上限。htt转载 2021-12-08 23:56:01 · 398 阅读 · 0 评论 -
centos7 升级系统git的方法
yum remove gitcd /usr/local/src/wget https://www.kernel.org/pub/software/scm/git/git-2.15.1.tar.xztar -vxf git-2.15.1.tar.xzcd git-2.15.1make prefix=/usr/local/git allmake prefix=/usr/local/git installecho "export PATH=$PATH:/usr/local/git/bin" >原创 2021-12-05 21:44:39 · 606 阅读 · 0 评论 -
嵌入式linux学习笔记--- 记录几种 C++ 传递可变参数的方法
#include <iostream>#include <cstdio>#include <stdarg.h>template<typename... Args>void log(Args&&... args){ printf(std::forward<Args>(args)...);}#define macro_printf(...) printf(__VA_ARGS__)void my_printf(co原创 2021-11-14 21:43:26 · 1849 阅读 · 0 评论 -
嵌入式linux学习笔记-- linux设备一个网卡配置多个ip
简单记录一下今天学到的知识。 如何给一个网卡配置多个ip#ifconfig eth0 192.168.6.99 netmask 255.255.255.0 up#ifconfig eth0:0 192.168.6.100 netmask 255.255.255.0 up#ifconfig eth0:1 173.173.173.173 netmask 255.255.255.0 up#ifconfig eth0:2 119.110.120.1 netmask 255.255.255.0 up注意原创 2021-11-05 00:39:09 · 826 阅读 · 0 评论 -
嵌入式linux学习笔记--控制台的数据重定向 以及 进程打印 数据的重定向
记录一下今天的收获,项目上的一个需求是将嵌入式平台内的所有的打印信息输出到一个统一的地方,方便管理,为了实现这种需求 我一共尝试了几种方案,记录一下。1 . 需求1 嵌入式设备的串口打印信息转移到另一个控制台这种需求是因为产品的串口默认是不引出的,平时对产品进行调试的时候免不了需要去查看串口信息,那么 我们自然就希望将原本的串口控制台的输出信息转移到当前的通用ssh 登录的控制台。相关的代码的实现如下:#include <stdio.h>#include <stdlib.h>原创 2021-11-04 00:54:32 · 1087 阅读 · 0 评论 -
嵌入式linux学习笔记-- linux 开机总时间记录的一种方案
产品的一个功能就是在某一个界面上显示产品的总开机时间,之前一直担心因为频繁写一个块导致的EMMC 写坏,今天放下了这个思想的负担 重新尝试简单但是方便的,定时更新写入的逻辑,嗯 真香,真简单!!!! 时间计算的精度可能不是很高 还会出现丢失一些时间,不过这个应该也是无关紧要的,这个数据主要是给客户看 产品已经运行了多久了,大概评估寿命的? 不是很清楚具体这个参数的意义。直接上代码:// uptime.h#ifndef _UP_TIME_H_#define _UP_TIME_H_#includ原创 2021-10-24 16:41:59 · 1549 阅读 · 0 评论 -
嵌入式linux学习笔记---TCP立即发出 以及 TCP的keep alive
事情的起因是公司的产品的某一个功能上需要实现的功能不能满足,所以就有了本次的探索。需求: 产品在某一个端口上 定时的向外发送1440 字节的数据包,该数据包包含了产品当前的各种状态。需求2 : 产品本身绑定一个本地的端口 接收来自外部的字符串指令,并且需要对外部传入的字符串指令进行处理。1. TCP 立即发出这部分使用的是 TCP_NODELAY 这个标志去实现的。在创建完端口之后 使用以下的api 为端口设置不缓存的属性,可以实现数据的立即发出! int flag = 1; s原创 2021-10-23 15:59:34 · 2894 阅读 · 0 评论 -
嵌入式linux学习笔记-- 更换ubuntu服务器的vi
sudo apt-get remove vim-commonsudo apt-get install vim原创 2021-10-13 23:54:58 · 161 阅读 · 0 评论 -
嵌入式linux学习笔记-- 设置线程名称
// This define is from Linux's <sys/prctl.h> and is most likely very// Linux specific... Feel free to add support for other platforms// that has a feature to give a thread specific name / tag.static inline voidink_set_thread_name(const char *name原创 2021-10-03 18:58:50 · 266 阅读 · 0 评论 -
嵌入式linux学习笔记-- 解决 Broken pipe
Thread 1 "logServer" received signal SIGPIPE, Broken pipe.0x00007ffff7bc5a9e in __libc_send (fd=5, buf=0x5555555b2918, len=17, flags=0) at ../sysdeps/unix/sysv/linux/send.c:2828 ../sysdeps/unix/sysv/linux/send.c: No such file or directory.开发中遇到了如原创 2021-10-03 00:14:23 · 743 阅读 · 0 评论 -
lua学习笔记--注册钩子函数
最近发下了lua的回调函数的注册方法,记录一下 其实菜鸟教程写的非常详细了https://www.runoob.com/lua/lua-debug.htmldebug = require("debug")function myHook() print("this is my hook!!!") end-- c:每当调用一个函数时产生的 call 事件。-- r:每当函数返回时产生的 return 事件。-- l:每当开始执行一行新代码时产生的 line 事件。debug.s原创 2021-09-20 16:12:40 · 997 阅读 · 0 评论 -
嵌入式linux 学习笔记 --c++ 根据函数名称调用 函数的几种方法 map 查表
1. 需求的来源开发中 对外提供的用户接口会接收外部传递进来的函数名称以及参数,程序根据名称调用对应的函数。2. 实现的方案方案1 :if 名称 == 函数名 执行 xxx else if 名称 == 函数名 执行 xxx else if .......方案2 : 使用c++ 的类静态函数结合 map 实现方案3 : map + 结构体的id 实现3. 方案一#include <iostream>#include <cstdio>class functionCall原创 2021-09-20 01:04:10 · 822 阅读 · 0 评论 -
Linux学习笔记--动态库命名规则
https://blog.csdn.net/zhanglianpin/article/details/50491958转载 2021-08-11 20:19:56 · 251 阅读 · 0 评论 -
Linux根据端口号 获得pid
pid=(netstat−nlp∣grep:(netstat -nlp | grep :(netstat−nlp∣grep:port | awk ‘{print $7}’ | awk -F"/" ‘{ print $1 }’);$port 就是 目标端口号原创 2021-08-09 21:11:48 · 882 阅读 · 0 评论 -
linux学习笔记-- linux的 shell和linux C 程序 获取命令行参数和环境变量
常用的linux指令基本都支持命令行参数 例如 :ls -l rm -r rm -fcp -r 那么 这些参数都是如何去被应用程序获取的呢? 学习记录一下1. shell 脚本1.1 shell 脚本获得传入的参数shell 脚本部分的数据处理是分为 传入和解析对于参数的传入 一个简单的例子就是菜鸟教程中的例子 :https://www.runoob.com/linux/linux-shell-passing-arguments.html#!/bin/bash# auth原创 2021-08-08 23:20:10 · 748 阅读 · 0 评论 -
学习笔记--记录一种单片机获得系统时间戳的方案 定时器级联
最近在看SOEM 以及ethcat 相关的资料 ,看到了一个非常好的定时器获得时间戳的方法,记录一下资料的出处 :原创 2021-07-28 00:08:06 · 671 阅读 · 0 评论 -
2021-07-23--嵌入式linux设备的SFTP传输文件慢的原因
公司产品的升级包使用的是SFTP 将升级包传输到服务器上 然后进行更新的,但是传输的过程中经常就发现传输的速度慢的问题,(产品的SFTP 传输速度大约是2Mb/s )猜测中的原因是这几个SFTP 本身的原因,文件的传输需要在数据的接收端进行解密会占用大量的CPU资源,而嵌入式linux的CPU 本身就不是很强劲,主频不高而且SFTP 本身不支持多核。(错误,后续着重讲)带宽问题,设备本身的对外网卡是百兆的,而且是使用的USB进行了拓展。带宽上可能存在瓶颈。(后来经过证实 瓶颈不在这里!)磁盘问题,原创 2021-07-23 22:58:33 · 3686 阅读 · 0 评论 -
嵌入式学习笔记-- windows下的基于C++的串口程序开发
最近测试一款产品的时候用到了 windows下的串口开发的内容,稍微记录一下,以后再用到 直接来拷代码就好了。1. 需求介绍只是开发一个临时的程序 可以简单的去分析一下 从串口发过来的数据都是什么,可以将串口数据打印到控制台上,当然 也可以将这些数据进行一些其他的操作,比如进行数据的拼接,转换,校验等等 ,当然 这个后话 第一步就是通过我们的程序拿到串口的数据,这是最基本的。2. 代码的分析代码的查找过程也不去介绍了,大致就是在网上找类似的代码 然后 这边抄点 那边抄点 就出来了一份简单的demo原创 2021-06-26 19:03:05 · 914 阅读 · 4 评论 -
嵌入式linux学习--rapidjson使用笔记 writer范例
今天开发过程中遇到了一个需求就是说将我的配置信息 从 一个结构体转换为一个json,然后按照之前的想法一般就是 解析一个 “{}” 的document 然后一直的addmember 。但是看到了一种writer 的东西,所以记录一下。在我看来 writer 其实更加的适合于生成一个json的字符串。它 更像是我们书写一个json的内容 而不是将这些变量组织起来 去读取 。自己写的代码就不放了,放上官方的示例代码:#include "rapidjson/writer.h"#include原创 2021-05-28 21:45:29 · 906 阅读 · 0 评论 -
嵌入式linux学习笔记--spdlog自定义一个sink
最近看了spdlog 库的一些使用方法,记录一下自己写一个sink的过程。先介绍一下大致的背景,公司的产品需要调试工具,嵌入式linux 的产品按理说最简单的就是用 串口调试,但是产品没有留串口引出,所以这条路堵死。日志写文件也可以但是只能用于事后进行问题分析,不方便实时的观察设备的运行状态。基于这种情况,我们需要涉及一个日志的输出方法,可以使得当我们的调试器(tcp 接收 分析的一个集合工具)连接到机器的某一个端口的时候,机器会自动的将日志打印到连接上来的客户端,并且这个日志工具应该支持多个客户端连接。原创 2021-04-18 15:07:10 · 1450 阅读 · 0 评论 -
嵌入式linux学习笔记---开源库spdlog的使用笔记
今天整理代码,看到了公司的关于日志方面的代码,收获比较大,所以整理一下spdlog库的使用说明。https://github.com/gabime/spdlog.git本文主要是以下几个方面的整理,参考的主要依据就是 官方例程,位于github的example\example.cpp1. 日志等级的划分以及和日志等级相关的几个函数日志分成了以下的这几个等级,具体的等级就是其中的含义 ,最严重的的时间就是critical 级别 ,最不严重的是trace /*原创 2021-04-11 11:46:42 · 3163 阅读 · 0 评论 -
工作笔记-----mingw libgcc_s_sjlj-1.dll is missing
原文地址::https://www.cnblogs.com/tibetanmastiff/p/3581905.html习惯了在linux环境下工作,编译wingdows平台程序采用mingw工具。编译完,运行exe程序,弹出错误信息: libgcc_s_sjlj-1.dll is missing百度了一下,原来是编译的时候没有加上-static-libgcc -static-libstdc++这两个参数。...转载 2021-04-10 10:12:49 · 1240 阅读 · 0 评论 -
嵌入式linux学习笔记--软硬链接 ln
做驱动开发的例子的时候经常需要改韦东山老师代码里面的kernel dir 每次都改(因为环境是自己搭的,路径是不一样的) 所以就想有没有什么方法能去解决这个问题不用每次都去改文件路径。 有以下两个前提:我不想去老师设置的默认的路径下去操作。我不想进行大量的文件拷贝,也不想去浪费空间。(开发服务器是阿里云公网上的存储只有100G)基于以上的前提,我选择使用linux的软连接的方式,在原本的默认路径创建一个 软连接指向我的真实的位置,用这样的方法实现了目的ln -s /root/work/Linux原创 2021-04-05 22:56:50 · 222 阅读 · 0 评论 -
嵌入式linux学习笔记--sysinfo获取linux的开机时间
// 这里是linux 2.3.48以上版本的内核的信息#include <sys/sysinfo.h> // 需要包含的头文件int sysinfo(struct sysinfo *info);// 需要用到的函数的原型struct sysinfo { long uptime; /* 启动到现在经过的时间 */ unsigned long loads[3]; /* 1, 5, and 15 minut原创 2021-04-05 21:38:36 · 575 阅读 · 0 评论 -
嵌入式linux学习笔记--i2c协议的应用--基于imx6ull点亮oled
本周末着重看了IIC协议的内容,也尝试着自己抄了韦东山老师的虚拟IIC总线的内容,无奈还是不能完全理解,所以先记录一下最近的IIC的应用过程。去网上找IIC的应用不外乎就是两种主要的思路,一种是使用ioctl() 这个函数,一种就是直接使用标准的read() write() 去操作 直接当做文件去进行读写。这里我使用的是#include <errno.h>#include <stddef.h>#include <sys/ioctl.h>#include <原创 2021-04-03 12:15:46 · 762 阅读 · 0 评论 -
工作笔记-- 嵌入式linux设备的端口回收设置
之前公司的设备存在和其他的设备断开连接之后需要接近一分钟才能再次绑定端口。经过大佬的提醒才知道是端口回收的原创 2021-04-03 12:03:14 · 337 阅读 · 0 评论 -
工作日记--linux不执行shell脚本的可能的原因 换行符
如题今天的开发中遇到了shell脚本没法执行的情况,经过排查,最终确认是shell 脚本在windows上开发,使用windows的换行符 CRLF导致的,换用linux的换行符LF之后可以正常使用。在进行转换的时候使用了notepad++的替换功能。...原创 2021-03-23 21:37:18 · 348 阅读 · 0 评论 -
嵌入式linux学习笔记--lua技术整理--基于lua版本的crc8校验
CRC8校验 CRC-8 x8+x2+x1+1 0x07(0x107)最近做一款产品生态配件开发用到了crc8的校验,现在将demo贴出。例子中使用的是别人算好的crc 数组进行计算的,效率估计会更高一些。第一个函数是用于计算crc8的值,第二个函数是对整个table的结果进行校验,会先删除掉最后的crc值 然后计算crc并且和被删除的crc进行比较,如果返回原来的table则证明 crc校验通过,否则crc 校验不通过。-- caculate crc8 : x原创 2021-03-21 13:28:31 · 1325 阅读 · 0 评论 -
嵌入式linux学习笔记--TCP通讯整理
之前的项目中使用到了比较多的tcp 通讯相关的知识,一直也没有进行整理,今天准备拿出时间好好的整理一下TCP通讯的整个过程。预计会整理linux和windows两个版本的tcp通讯的流程。1.TCP通讯的函数的介绍...原创 2021-03-13 16:03:45 · 3165 阅读 · 0 评论