linux编程
夜神月memory
会笑的鱼
展开
-
ubuntu18.04下vscode代码空格不明显(太小)
安装新的ubuntu后在code中空格的长度太小,难以辨识,可以安装firacode字体来解决。我有试过其他的办法,比如在设置->首选项->输入font然后在空格中输入monospace,并没有什么作用可以修改ubuntu的字体来解决***firacode***字体安装1.更新可用软件包列表: sudo apt update;2.通过安装/升级软件来更新系统: sudo apt upgrade;3.安装字体管理器: sudo apt install font-manager;4.原创 2021-02-24 12:01:51 · 1309 阅读 · 2 评论 -
C语言linux实现图标统一闪烁
问题的原因在最近的工作中,遇到这么一个问题,客户提出我们的指示灯闪烁频率不一致,明明是一起收到的can信号但是却出现了闪烁不统一的情况。(这里我先讲一下,这个c语言闪烁灯是怎么一回事,因为我们的项目是基于嵌入式的,而且就是一块表上放置图片并使图片显示和不显示,即打开和关闭,图片可以用来表示车机仪表上的指示灯)解决办法首先我们需要一个获取时间的函数uint32_t ClusterGetWorldTimeMS(){ struct timespec t; clock_gettime(CLOCK原创 2021-01-21 15:42:36 · 277 阅读 · 0 评论 -
定义一个变量想要在多个.c文件中全局共享使用
@定义一个变量想要在多个.c文件中全局共享使用针对c语言首先,在.h文件中添加extern 关键词声明全局变量。然后,在.c文件里定义全局变量,变量定义不要和声明放在一起,即不要放到头文件里。在c文件里定义,在头文件里extern。比如mode.hextern int InitFinish;mode.cint InitFinish = 0;mode2.cmode3.cinclude "mode.h"...原创 2021-01-11 16:00:25 · 1347 阅读 · 0 评论 -
C语言float,double保留两位小数
float sp = 36.51647; sp=( (float)( (int)( (sp+0.005)*100 ) ) )/100;挺实用的。double也可以。原创 2020-11-16 13:48:17 · 6630 阅读 · 0 评论 -
特殊加法
要求写一个函数两个正整数相加,函数中不能使用加减乘除四则运算符号#include <bits/stdc++.h>using namespace std;void add(int A,int B){ int sum,carry; do{ sum = A^B; carry = (A&B)<<1; A = sum; B = carry; }while(B!=0); prin原创 2020-11-11 15:24:03 · 177 阅读 · 0 评论 -
execl的特殊使用
一个项目,在装车的时候出现偶然黑屏的情况,因为底层的linux的操作系统,而且是偶然发生。没有找出问题的关键所在,最后我使用了一个最 不好的办法,解决了这个问题,但是并未从根本上解决该问题。先用信号捕获程序崩溃的前一刻,在这一刻在程序内调用linux外部函数reboot让程序重新运行启动。最初我的想法是直接重新运行程序,但是报错的问题是程序运行内存不足,并不足以支持程运行。后来我发现reboot却可以有效的解决这个问题。下面是代码void SigExit(int sig){ prin原创 2020-11-11 15:13:39 · 143 阅读 · 0 评论 -
Dijkstra 迪杰斯特拉算法(最短路径)
做了一个最简单的Dijkstra 的代码,时间复杂度为n方先存储点使用二维数组来存储需要用一个一维数组 dis 来存储 1 号顶点到其余各个顶点的初始路程既然是求 1 号顶点到其余各个顶点的最短路程,那就先找一个离 1 号顶点最近的顶点。通过数组 dis 可知当前离 1 号顶点最近是 2 号顶点。当选择了 2 号顶点后,dis[2]的值就已经从“估计值”变为了“确定值”,即 1 号顶点到 2 号顶点的最短路程就是当前 dis[2]值。为什么呢?你想啊,目前离 1 号顶点最近的是 2原创 2020-09-09 15:11:18 · 967 阅读 · 0 评论 -
C++计算2020的阶乘(C++超大数阶乘)
不使用任何整型变量,因为2020 的阶乘很大使用string比较好,每次计算一位转成数字,乘以i,i表示的阶乘的因数进位后再转成字符串#include <bits/stdc++.h>using namespace std;int main(){ while(1) { string ans = "1"; int cnt; cout<<"要计算几的阶乘?"<<endl; cin>>cnt; for(int i = 1;i&原创 2020-09-08 16:45:25 · 2140 阅读 · 0 评论 -
C语言优先队列(priority queue)详解
0x00,优先队列(priority queue)priority queue是一个用"堆"实现的,类似set的容器,有着queue的基本功能。特征是"具有优先级,可以按照优先级出队"可能不是特别好理解,其实就是一个排序啦。。。举个栗子:3入队,4入队,1入队,如果是queue的容器,出队顺序为3,4,1,而priority queue则在内部会排好序,出队顺序为4,3,1。这种数据结构在解决一些高级问题,例如贪心类问题,或者迪杰斯特拉算法,都可以更加方便的解决问题。0x01,...原创 2020-09-08 16:37:40 · 7959 阅读 · 5 评论 -
线程优先级实现原理
线程的优先级并不是你想象的先执行哪个后执行哪个而是所有的线程不论优先级高低都会执行,优先级越高表示CPU分配给该线程的时间片越多,执行时间就多优先级越低表示CPU分配给该线程的时间片越少,执行时间就少...原创 2020-08-14 10:18:31 · 376 阅读 · 0 评论 -
总结一个小错误deprecated conversion from string constant to “char *“报错问题
char* MessageArray02[]={"刹车片过热智能驾驶无法激活", "Brake pads overheated\niDrive impossibly activated"};用最新的g++编译一下就会得到标题中的警告,无论使用gcc 或者g++命令, 都会报出下面的错误, 不能通过编译:为什么呢?原来char *背后的含义是:给我个字符串,我要修改它。而理论上,我们传给函数的字面常量是没法被修改的。所以说,比较和理的办法是把参数类型修改为const c...原创 2020-08-05 15:04:21 · 5980 阅读 · 0 评论 -
特殊的多线程
还是因为项目的原因,我一直在想怎么解决之前遇到的问题,程序顺序执行却要求在中间延时执行某个函数,我不想用信号,最后咨询了朋友,他告诉我用多线程。我想了想, 我已经用了回调了,似乎也用不了回调了。就尝试下多线程吧。下面是我自己总结的一个线程使用方法,线程可以无限次数的开启,因为是设置成了程序运行完成,或者意外发生,均会自动销毁线程。也许不是太安全,但是好用。这里我放上一个函数的代码。int touch_piano(){ int x , y , cont = 0 ; int fd_ts原创 2020-07-31 17:15:49 · 142 阅读 · 0 评论 -
linux下防止多重定义
以前没有做过工程项目,如今遇到了很多问题,我希望把自己遇到的问题记录下来,就比如最近遇到的重定义问题,因为是自己写makefile的缘故,我在.H文件中定义了变量,检查了代码逻辑没有问题,但是在编译过程中却频频的报错,定义变量重定义。解决的办法。一,将你要定义的变量写到一个.h文件中,让所有的文件都调用它。二,在变量前加上static,定义为静态变量。最开始不明所以,只得把变量写到.C文件中,但是后来调用又必须在.h文件中找。无赖只得在.h文件中添加我只添加了一个我想要的变量。原创 2020-07-30 09:50:30 · 602 阅读 · 0 评论 -
嵌入式开发,linux下的异步回调函数,即延迟回调函数
因为回调函数分为阻塞式回调和非阻塞式回调(延迟回调也叫异步回调),我记录的重点是异步回调,阻塞式回调,在很多博客上都可以找到也不难理解,但我个人认为用得最多的是异步回调,因为工作的原因,我发现异步回调是一个很不错的方法,可以解决很多问题。以前在老师讲课的时候也有讲到过这个东西,但是我都不是很在意,现在到了工作中这类的问题还不少,于是特意写了一个异步回调的方法。就拿我最近在工作中遇到的一个问题吧,有很多的can信号,他们有各自的时间片,就是到了某个时间点can信号就会更新一次,有可能是同时好几个can信号更新原创 2020-07-29 15:23:54 · 471 阅读 · 0 评论 -
linux消息队列的有趣的使用
在之前学习pyhton的时候老师提出了个一个问题,写一个购物车,要求你的金币数量在这一次购物后存在记录,就是说本来你的金币有1000,买了东西后剩800,下次打开程序再运行时,你的金币应该是800。也不知道读者明白没有我讲的,就是说程序运行第二次时候你的存储数值发送了改变并且得到了保存。老师说解决断电后程序重启,仍然可以读取到原来数据的办法有两种。一,存到文件中程序启动就读取文件判断是否有数据,没有就往里面存,有就读取,并且忽略原来定义的固定值。二,存储到数据库这个就不用多说了和存文件类似。可是原创 2020-07-14 12:55:44 · 113 阅读 · 0 评论 -
clion ‘uint8_t* touint8_t loses precision字节丢失
因为自己也是第一次搞这个东西,而且还是拿的别人工程师的代码看#define OFFSET(structure, member) ((uint8_t)&((structure*)0)->member)这一行代码是//获取结构体中变量的偏移量 (32位系统)但是我的ubuntu是64位的再转换过程中出现了字节丢失编译一直报错一开始我没有搞明白因为我的u8Language是 uint8_t类型,咋看是没有问题的。解决办法既然报错问题是高字节像低字节转换出现了问题原创 2020-07-09 17:44:52 · 251 阅读 · 0 评论 -
cygwin 安装过程中报错unable to get setup 镜像源
安装步骤我就不讲了从官网(https://cygwin.com/install.html)下载Cygwin离线包,根据自己系统要求进行选择是64为还是32位。到这一步我出现了错误【解决过程】1.去http://mirrors.163.com/cygwin/看了看,结果发现,其中,已经变了,其包含了对应的x86和x86_64两个文件夹了:所以,肯定是找不到对应的setup.ini文件了。因此你要根据自己下载的软件来选择,也就是你在填入url的时候注意路径一定是.原创 2020-07-07 18:13:00 · 2141 阅读 · 0 评论 -
liunx下串口通信
Linux下编程的过程有些固定,很多都是比如打开、配置、关闭等等串口通信流程:打开串口ttySn--->初始化串口--->读写(read、write)--->关闭串口串口设置最基本的设置串口包括波特率设置,效验位和停止位设置。串口的设置主要是设置 struct termios 结构体的各成员值。struct termio{ unsigned short c_iflag; /* 输入模式标志 */ unsigned short c转载 2020-07-02 16:00:46 · 156 阅读 · 0 评论