学习心得
万能菜道人
博客的书写一点都不好看,有的挺乱的,我在试着优化。
展开
-
advanced installer做出的msi会在C盘占用空间
不知道是不是msi格式都会在C盘进行备份什么东西。改为exe的安装包格式,虽然也占用了C盘,但是安装结束之后会自动进行删除占用的C盘的空间,应该只是解压占用。原创 2023-07-29 15:45:16 · 138 阅读 · 0 评论 -
linux驱动程序学习之基础的hello world和线程打印程序
其实驱动的概念我已经有了接触,这里写一下基础的入门例子。原创 2023-06-24 15:50:19 · 290 阅读 · 0 评论 -
使用cmake出现编译成功,运行却说找不到库?
程序并没有使用到那个库,现象竟然是ldd命令的列表中有,但是却说没有找到。OK了,这个应该有更好的处理方法吧?原创 2022-09-19 15:57:59 · 2060 阅读 · 0 评论 -
从零开始学架构笔记
首先,“系统由一群关联个体组成”,这些“个体”可以是“子系统”“模块”“组件”等,架构需要明确系统包含哪些“个体”常见的就是注册表方式,注册表含有每个插件模块的信息,包括它的名字、位置、加载时机(启动就加载,还是。供的服务注册到 OSGi 核心的服务注册中心,如果某个服务想用其他服务,则直接在服务注册中心搜索可用服务就可以了。微服务更加适合于快速、轻量级、基于 We 的互联网系统,这类系统业务变化快,需。对某个服务扩展,或者要增加新的服务时,只需要扩展相关服务即可,无须修改所有的。原创 2022-09-19 10:20:54 · 1076 阅读 · 0 评论 -
Google最新版无法使用本地文件翻译
方法很多,我使用的是python -m http.server但是每次打开命令行就比较麻烦,所以将代码拷贝出来:#!/usr/bin/env python# -*- coding: utf-8 -*-import http.server as Serverimport copyimport datetimeimport email.utilsimport htmlimport http.clientimport ioimport mimetypesimport osi原创 2021-03-17 10:38:19 · 1808 阅读 · 4 评论 -
内核态栈溢出导致 Kernel panic-not syncing fatal exception in interrupt的现象
问题:内核态程序运行中突然崩溃。报错挺乱的,有Kernel panic-not syncing fatal exception in interrupt。。。处理将代码分段注释,查看是否导致崩溃,方法很笨。目前发现的原因为内核态栈溢出,即局部变量太大导致溢出。内核态的栈的大小是固定的,大概为8k,这里内核栈并不是一个线程分配一个,而是一个cpu核心有一个固定大小的内核栈,所有线程共用!方法:1. 使用kmalloc等创建堆中处理。2. 减少使用局部变量。注意项:强..原创 2020-08-26 15:13:17 · 6867 阅读 · 0 评论 -
关于window网络共享到linux主机的步骤与注意事项
步骤:1.window至少有两个网卡可以通信,这里我使用wifi连接网络,本地连接到linux.2.共享选择:这里确定之后会自动修改本地连接的ip地址。3.本地连接到linux4。window中查看分配的ip,linux相关网口会自动分配ip.注意事项:1.linux下位机要和window的本地连接ip处于同网段,如192.168.137.1的本地连接,下位机就得是192.168.137.4等;出现过手动设置ip无法连接的情况,将linux静态设置ip的配置信息注释了,.原创 2020-08-13 14:49:25 · 1098 阅读 · 0 评论 -
编辑生涯好用工具记录
1.gif制作:GifCam 小巧好用!原创 2020-03-20 16:08:43 · 192 阅读 · 0 评论 -
C语言位操作符左移和右移实践学习
结论:对C的这两个运算符,左移有无符号对二进制无影响,都是全部左移+补零,一次性移动超过位数内部进行了处理(自动减位数)。右移有无符号对二进制有影响,有符号的最高位为1(表示负数)则进行右移+补1,其他情况都是右移+补零。看例子一:有符号数的左移#include <stdio.h>int main(){ int a = 0x80000001; int i=0; ...原创 2019-12-12 09:44:19 · 1512 阅读 · 0 评论 -
补码的含义和快速理解
在深入理解计算机系统一书中,看到了对补码的解释,和我之前学习的不大一样,而且我之前学的也忘了。今天看了这个计算方式就很清晰。补码的含义:用于有符号数的计算机表示方式。快速理解:正常的无符号的编码很简单,0~65535对应 0x0000~0xFFFF。补码表示的有符号数,记得最高位为负权重位即可:0011 : 1*2 +1 = 31110 : (-1)*2*2*2 + ...原创 2019-12-10 18:34:06 · 721 阅读 · 0 评论 -
VS2015运行无终端C项目的打印方式
除了直接单步调试,有些情况还是需要打印信息来调试。这里VS需要使用OutputDebugString进行和调试器的输出互动,有可能有些延时,总体还是可以使用的。如下:#include <atlstr.h>#include <winbase.h>OutputDebugString("Hello");这里还不是很方便,因为不能直接将变量直接进行显示。参考如...原创 2019-11-11 11:13:44 · 474 阅读 · 1 评论 -
sizeof()为什么不能得到指针指向内容的大小
首先,我们看看sizeof是什么?是一个操作符,也是关键字,就不是一个函数,这和strlen()不同,strlen()是一个函数。那么sizeof的作用是什么?返回一个对象或者类型所占的内存字节数。我们会对sizeof()中的数据或者指针做运算吗?基本不会。例如sizeof(1+2.0),直接检测到其中类型是double,即是sizeof(double) = 8。如果是指针...原创 2017-07-31 20:21:20 · 11190 阅读 · 3 评论 -
两个进程如何使用共享内存实现指针功能:offset
问题在进行共享内存使用中,遇到了一个需要使用指针,动态地指定共享内存中其他变量的需求。这里我本来就知道的是共享内存指向一个非共享内存的数据是不行的。但是后来发现指针指向共享内存的数据也是不行的。分析这里借助一个比较清晰的共享内存调用的图:可以看出,进程实际上是将共享内存映射到进程所属的地址空间内!这样就产生了一个问题:你在一个进程中将共享内存的一个变量的地址赋给共享内存的一个...原创 2019-03-26 18:38:47 · 3050 阅读 · 0 评论 -
linux如何在不重新编译可执行文件的情况下添加动态库
方法一创建一个中间件动态库,可执行文件调用其接口,然后由此中间件动态库文件进行编译,动态添加其他的动态库,如下将中间件动态库重新放进/usr/lib下,其依赖便变化了:...原创 2019-04-08 15:23:16 · 807 阅读 · 0 评论 -
C 多个动态库存在同名函数问题处理方法:-fvisibility=hidden
前言在使用多个动态库时,两个动态库之间有可能存在相同名称的函数,这样会出现只有第一个函数生效,即所有对该函数的调用都将指向第一个加载的动态库的同名函数中。这样就会很混乱,而且在想改名称也不是很简单的情况下就会很麻烦(例如同名函数太多,甚至就是模板)等等。处理方法这里只找到一种处理方法,当然你直接把名字改成不一样或者统一添加前缀(例如C++ namespace)也不错。方法如下:-...原创 2019-04-23 16:23:42 · 22663 阅读 · 3 评论 -
动态库中有和程序同名的变量时是如何处理的?
动态共享库编译的时候,对于全局变量,一律视为模块间变量访问。变量会通过数据段的GOT表来访问。而且,当可执行文件中(由于可执行文件不是PIC的)有同名全局变量时,共享库中定义的变量会被ignore,进程中只会存在可执行程序中的super_a。...转载 2019-05-05 14:50:16 · 1736 阅读 · 1 评论 -
MODBUS传递32位数据过程
这里只是记录一下自己的体会,不包对错。Modbus我并不是很熟,直接拿来Libmodbus库就直接使用。Modbus是采用大端存储。大端存储简单说就是一个int x = 0x12345678.小端存储保存为: 78 56 34 12大端存储则是: 12 34 56 78 (大端存储不需要倒过来)32位数据线圈类型就不用介绍了,16位的数据在modbus传递顺序为 00...原创 2019-05-17 16:57:21 · 9877 阅读 · 4 评论 -
thrift debian+树莓派raspberry环境安装步骤
thrift安装折腾了许久,记录一下省的再坑我!安装是0.11版本,0.9以及之前的有些区别如同网上的许多步骤:首先安装依赖环境:sudo apt-get install automake bison flex g++ git libboost-all-dev libevent-dev libssl-dev libtool make pkg-config下载源码:http:/...原创 2019-06-11 18:24:32 · 880 阅读 · 0 评论 -
linux交叉编译window程序时C++调用C函数
接触了一个项目,在linux上编译window上的C++程序。这里我想将现成的C语言库导入到其中,这下就给我脸色看了。傻乎乎地直接一个-l编译,一直报错:undefined reference to `_func'大概是交叉编译工具i586-mingw32msvc-g++的链接库的路径不对?方法一:i586-mingw32msvc-g++ ...... -L/usr...原创 2019-08-24 11:30:12 · 355 阅读 · 0 评论 -
C++文件读写中的一些函数使用
实例为fstream类型的,直接使用fstream代指其实例.以下为调用的一个函数。tellg():该函数并不是返回文件的大小,而是当前文件描述符的位置。seekg():设置文件描述符的位置,例如设置为起始位置:fstream.seekg(std::ios::beg);rdbuf():读取数据流中的全部数据,例如将文件中全部内容读取: std::ostri...原创 2019-08-24 17:49:16 · 679 阅读 · 0 评论 -
关于项目中关于Undo,Redo功能的思路学习
思路一:项目中的全部显示信息创建一个结构来存储。这样每次修改就拷贝修改前的结构备份。可以设置可备份的次数。当进行undo或者redo的时候就可以进行将结构备份拷贝回来,然后刷新界面即可。...原创 2019-10-11 16:48:01 · 465 阅读 · 0 评论 -
Bmp格式图片与16进制的互相转换简解 Python
BMP TO HEX首先介绍Github上一个简单的Bmp转成16进制的py:https://github.com/robertgallup/bmp2hex网上这种例子很多。思路也简单:将bmp文件一个个二进制进行分析,这里的1-2表示2个字节,16个二进制数据,0xXXXX四位16进制数据~:1)1-2:(这里的数字代表的是字节,下同)图像文件头。0x4d42=’BM’,表示是...原创 2019-03-15 16:08:12 · 8253 阅读 · 2 评论 -
高级界面编程的探索(提高用户体验)【持续更新】
1.拖放!以前没怎么接触,但是使用起来很舒服的!例如把一个列表中的变量鼠标直接拖到文本控件,自动填充等。2.高级表格:在表格内嵌套控件例如wxpython 可以使用wx.grid 调用settable接口,由此使用表格中嵌套其他控件(如wxGridCellBoolEditor、wxGridCellChoiceEditor、wxGridCellFloatEditor、wxGridCe...原创 2019-01-12 16:14:42 · 255 阅读 · 0 评论 -
arm-linux-gnueabihf-gcc交叉编译可执行程序失败的一种处理办法
交叉编译是什么我就不细说了,我使用arm-linux-gnueabihf-gcc在window端进行交叉编译arm的可执行程序中遇到了许多问题(主要就是链接过程出错,不能找到linux的许多文件等)。而编译一个动态库便只需要些头文件,并没有链接的过程,对环境的依赖大大降低了不少。 首先了解编译 我们要分析一下gcc编译的阶段:1预编译,主要是将#include 的文件内...原创 2018-12-19 11:26:25 · 8244 阅读 · 0 评论 -
C++ fstream读写数组学习与源代码
完成:对文件进行判断是否存在,并初始化。读取和操作整型数组。头文件xxxx.h#include #include using namespace std;#define HISTROY_FILE "/home/.文件路径"#define NUM 27class historyFileHandle{public: historyFileHandle()原创 2017-10-18 15:13:31 · 1824 阅读 · 0 评论 -
动态库和静态库的区别(转)
我们通常把一些公用函数制作成函数库,供其它程序使用。 函数库分为静态库和动态库两种。 静态库在程序编译时会被连接到目标代码中,程序运行时将不再需要该静态库。 动态库在程序编译时并不会被连接到目标代码中,而是在程序运行是才被载入,因此在程序运行时还需要动态库存在。 本文主要通过举例来说明在Linux中如何创建静态库和动态库,以及使用它们。 在创建函数库前,我们先来准备举例用的源程序,并将函转载 2017-09-15 16:50:12 · 254 阅读 · 0 评论 -
结构体中特殊定义int a:5
面试题typedef struct AA{ int b1:5; int b2:2;}AA;void main(){ AA aa; char cc[100]; strcpy(cc,"0123456789abcdefghijklmnopqrstuvwxyz"); memcpy(&aa,cc,siz原创 2017-07-26 17:48:23 · 3249 阅读 · 0 评论 -
int a[60][250][1000]数组的遍历面试题
请问 下面程序有什么错误?int a[60][250][1000],i,j,k; for(k=0;kfor(j=0;jfor(i=0;ia[i][j][k]=0;首先我运行了一下,是栈溢出了,原因是这个是在main中定义的一个局部变量,而局部变量是存储在栈中的,栈的容量不足以放下这样的大数组。于是我加了个static表示静态,放在堆区,就没有这个原创 2017-07-25 20:14:21 · 4509 阅读 · 1 评论 -
C++各种指针声明
指针1.定义一个指向int型的指针。int *p;2.定义一个含有10int元素的数组int *p[10];3.定义一个含有10个元素的数组,每个元素是一个原创 2017-07-24 18:57:08 · 2565 阅读 · 0 评论 -
框架和设计模式的区别
框架通常是代码重用,而设计模式是设计重用,架构则介于两者之间,部分代码重用,部分设计重用。在软件生产中有三个级别的重用:内部重用,即在同一应用中能公共使用的抽象块。代码重用,即将通用模块组合库或工具集,以便在多个应用和领域都能使用。应用框架的重用,即为专用领域提供通用的或现成的基础结构,以获得最高级别的重用性。设计模式是对在某种环境中反复出现的问题以及解决该问题的方案的描述,它转载 2017-07-18 20:36:31 · 388 阅读 · 0 评论 -
全局变量与局部变量的定义关系
面试题如下:int i=1 ;int main(){int i = i;}main中i变量的值是?在定义全局变量时,我们的全局变量是放在全局数据区中,而定义局部变量时,是放在栈中的。局部变量是可以和全局变量重名的,但是局部变量就相当一个地头蛇,在一个函数或者循环中可以屏蔽全局变量,使全局变量失效,因此,局部变量i是随机数,赋值给自己还是随机数。原创 2017-05-12 14:45:52 · 1889 阅读 · 0 评论 -
volatile到底有什么用?和regist有什么区别?
volatile也是个单词嘛,解释是易变的,不稳定的,也就是定义为volatile的变量可能会被意想不到地改变,这样,编译器就不会去假设这个变量的值了。即优化器在用到这个变量时必须每次都小心地重新读取这个变量的值,而不是使用保存在寄存器里的备份。具体例子:1)并行设备的硬件寄存器(如状态寄存器)2)一种中断服务子程序中会访问到底额非自动变量。3)多线程应用中被几个任务共转载 2017-07-22 14:37:01 · 699 阅读 · 0 评论 -
程序的内存分配到几个部分?
程序的内存分配答:一个由 c/C++编译的程序占用的内存分为以下几个部分1、栈区(stack)—由编译器自动分配释放,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。 2、堆区(heap)—一般由程序员分配释放,若程序员不释放,程序结束时可能由 OS 回收。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表,呵呵。3、全局区(静态区)(static)—转载 2017-07-22 14:17:55 · 769 阅读 · 0 评论 -
C语言经典问题学习笔记之一
1. bool,float,指针变量与零值比较的If语句?bool flag; if(flag) if(!flag)flaot x,X=0.00001;if(x>X) if(x这里涉及到精度限制问题char *p; if(p==NULL) if(p!=NULL)2.下面代码的结果是什么?为什么?void foo(){unsigned转载 2017-04-24 14:19:59 · 393 阅读 · 0 评论 -
5分钟做出简单makefile(linux)
5分钟做出简单makefileMakfile就是为了实现自动化编译的。我们从编写代码到完整运行,首先要编译,就是把源代码编译成中间代码文件,即object 文件。然后把所需的Object文件进行链接。编译时要将每个.o文件所需的源文件的位置告诉makefile,然后逐个生成.o文件,继而进行链接,最终生成执行文件。废话不多说,先看简易版makefile1.建立一个名原创 2017-04-20 18:55:50 · 420 阅读 · 0 评论 -
如果你在运行动态库函数第一次没有问题。第二次段错误
看一看:也许是全局变量,尤其是全局指针没有重新赋值初值出现的问题。原创 2017-12-20 19:09:08 · 1123 阅读 · 0 评论 -
打印去掉就不可以运行:bug玩法。
1.原创 2017-12-21 10:38:46 · 249 阅读 · 0 评论 -
memcpy内容拷贝,类不行的原因
最近的工作是将一个完整的状态结构体给保存下来,动态刷新保存没做到,这个结构体还是比较经典的普通结构体,是可以使用memcpy进行深拷贝的。但是后来我居然想拷贝类,当然是失败了。错误:double free or corruption:在memcpy类对象发生的该错误,实际上使用memcpy只是对类进行了浅拷贝,并没有深入的进行拷贝。类中的指针指向的内容无法进行memcpy直接拷贝。需要原创 2018-01-09 21:05:43 · 5171 阅读 · 1 评论 -
共享内存结构体与结构体赋值出现崩溃
设置一个结构体的元素为int型的20000个变量的数组创建该结构体的共享内存的实例将外部相同类型的结构体赋值到共享内存中崩溃。1500个变量不会崩溃!2000就会崩溃了。 可能原因一:是否使用了函数,并在函数中创建了较大的数组,造成栈溢出可能原因二:栈 拷贝到 共享内存 (结构体过大 则崩溃,大结构体中的一个值赋值不崩)共享内存 拷贝到 栈 (无问题) ...原创 2018-12-27 18:46:04 · 1594 阅读 · 0 评论 -
advanced installer详细做包教程:预安装,开机自启等
个人使用了Actual Installer更加简单,但是就是要买专业版。基础的使用功能很好用,如果不要安装环境变量,文件关联什么的,只是做一个简单的绿色包加个快捷方式,请下载它,一定满足你!Advanced Installer 中文绿色包链接:https://pan.baidu.com/s/1fnDnh59pU7LBzEhXr1_uxA 密码:tijg打包步骤1.打开之后...原创 2018-11-22 08:33:37 · 35348 阅读 · 4 评论