自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(34)
  • 收藏
  • 关注

原创 离线情况下解决pyinstaller生成的可执行文件过大问题

最后定位问题:在生成可执行文件时,python工作在anaconda的环境下,anaconda的库非常的全面,我们一个小项目里面用不到所有的包,但是pyinstaller在打包的时候不管你用不用,都给你打包进去了,从而打包后文件内包含了太多不需要的依赖库,导致可执行文件过大。要解决这个问题也很简单,建立一个虚拟环境,然后让我们的项目工作在这个虚拟环境中。网上还有说用 pyinstaller -D xxx可以解决问题,但是我试过了,-D得到的依然是一个巨大的exe可执行文件。

2023-08-01 10:02:13 187

原创 pyinstaller简单使用流程

假如我们的入口文件是 demo.py,我们首先运行 pyinstaller -F demo.py ,此时我们的项目下面会生成 demo.spec文件以及build和dist文件夹,删除build和dist文件夹保留demo.spec文件,并且打开demo.spec文件编辑。复杂的项目就不能用上述的方法了,因为复杂的项目里面,会有很多依赖,我们要将这些依赖的文件也在打包的时候添加进来。当我们想要打包一个简单的py文件,即没有依赖其他py文件,包的文件。等运行结束,exe文件就在dist文件夹下。

2023-07-29 11:39:01 376

原创 msys2+WinGW64以及msys2中环境变量的配置

msys只是一个类似windows下cmd,ubuntu下terminal的工具,想要编译.C文件,还要装编译器。WinGW64就是一个编译器,可以在windows下实现gcc功能,编译.C文件。首先需要先安装msys,然后再去安装WinGW64,将WinGW64安装到msys的安装目录下,替换掉msys下原先的Wingw64文件夹,然后再将WinGW64的bin,lib,include文件夹路径都设置到windows的环境变量。然后再运行msys,输入gcc -v,就会有一大串信息输出,说明gcc编

2022-03-29 23:26:44 4556 3

转载 去耦电容的作用和原理

转载http://www.elecfans.com/yuanqijian/dianrongqi/20171112578277.html去藕电容就是起到一个电池的作用,满足驱动电路电流的变化,避免相互间的耦合干扰。电容退耦原理  采用电容退耦是解决电源噪声问题的主要方法。这种方法对提高瞬态电流的响应速度,降 低电源分配系统的阻抗都非常有效。对于电容退耦,很多资料中都有涉及,但是阐述的角度不同。有些是从局部电荷存储(即 储能)的角度来说明,有些是从电源分配系统的阻抗的角度来说明,还有些资料的说明更 .

2021-12-07 21:19:19 3451

转载 Allegro pcb gerber生产制版文件生成输出说明

转载:https://www.sohu.com/a/235326555_100188064在我们使用allegro设计pcb时,通常需要对已设计完成的pcb板子生成gerber文件,在allegro中生成pcb gerber文件主要步骤如下。一、钻孔文件输出1、钻孔表格提取:先需要如下步骤处理是否表格中有相同的孔先点击红色框,然后在绿色框一栏查看孔径相同的孔,如两红色箭头所指孔,需要将两个孔后面的参数(蓝色框)改为一致,再点击黑色框merge合并。然后便可提取表格,点击manufa

2021-12-01 11:30:53 5327

转载 在allegro中如何手动设置缩放比例

http://www.edatop.com/ee/pcb/289384.html

2021-11-08 13:25:53 3079

转载 传输线特性阻抗

转载:https://rf.eefocus.com/article/id-332676?from=groupmessage&isappinstalled=0人认识事物总是有一个过程,一般都是从具体到抽象。认识特性阻抗也是一样的,在我们认识特性阻抗之前,先认识跟特性阻抗比较相关的一个物理量—电阻。电阻是一个实实在在的物理元器件,通过欧姆定律我们可以知道,电压、电流和电阻三者之间的关系,U=I*R我们通过一个具体的电路来分析这三者之间的具体关系,请看下面的一张最简单的电路图。这个电路图只有一

2021-10-19 09:24:59 1029 1

原创 B1/gsm功放板下行测试流程

B1的频段在2110-2170MHZ之间测试之前需要设置好信号源和频谱仪信号源设置步骤,目的是将fddlte 5这个信号源模板调出来,并设置好频率和amptdmodedual arbselect wave formwaveform segmentsfddlte 5 1 1 .WFMload segments from int mediaselect waveformfreqamptd频谱仪设置步骤,目的是将调试界面设置好,用于观察B1板的输出信号modemoreltefreq

2021-09-13 09:07:27 844

原创 用shell脚本操作makefile,为make传参,再从make传参到C中

最近学习到的传参过程,感觉很实用,稍加拓展可以实现一些有用的功能。建立测试用例建立一个文件夹,命名:zgftestzgftest中包含的文件:makefile、mk.sh、rules.make、zgftest.c以下分别是每个文件下的测试代码:rules.makeZGF_INFO = -DZGF_TEST_INFO=\"$(ZGF_TEST_INFO)\"GLOBAL_FLAG = $(ZGF_INFO)mk.sh#!/bin/sh#功能函数,用来为inputinfo赋值,这段代

2021-07-23 18:21:06 3114

原创 编写一个简单的makefile

一个简单的makefile模板

2021-07-23 14:36:39 122

原创 linux下使用串口通信总结

串口配置的文章网上很多,基本都大同小异,这里放几个链接用于参考。https://blog.csdn.net/wangzhen209/article/details/45246993https://blog.csdn.net/ywcpig/article/details/92081108https://blog.csdn.net/m0_38096844/article/details/90716182https://zhuge.blog.csdn.net/article/details/8903989

2021-07-22 17:19:06 3333

原创 虚拟机搭建nfs,挂载到板子

通过在虚拟机搭建一个nfs,可以让板子直接连接虚拟机上的指定文件夹,并访问里面的内容。首先需要安装nfs,安装nfs需要虚拟机联网,联网的方式有两种,net和桥接。网上有很多方法介绍,这里简单介绍一下桥接的方式。一般我都是连接无线网络。使用的是ubuntu14.04,以此为背景。VMWARE编辑->虚拟网络编辑器->更改设置。选择第一个VMnet0,选择桥接模式,并选择自己电脑的无线网卡。设置完成后保存配置。进入ubuntu控制台下,进入路径:/etc/network,打开文件int

2021-07-11 20:40:00 2486

原创 C语言让一个二进制数从低位向高位逐渐全部置一的方法

0x00|~(0xFE<<i);

2020-08-25 13:39:22 856 1

转载 VMware多个版本的下载地址

http://www.epinv.com/post/11817.html

2020-08-20 21:34:53 962

转载 UG10.0导出到DWG失败的解决方法

如果大家在使用UG中,出bai现无du法导出CAD、请按任意键退出的情况zhi下,可以按以下方法进dao行设置:UG无法导图是系统参数设置问题:文件——实用工具——用户默认设置——制图——常规/设置—— 标准——GB。设置完成后保存一下,然后重启UG即可正常制图图纸导出CAD格式DWG。转载:https://zhidao.baidu.com/question/623496624037057092.html...

2020-08-19 12:58:58 19609 1

原创 朱有鹏老师课程总结-大小端模式的测试方法

大端模式:一个数据的高字节对应到内存的低地址处。小端模式:一个数据的低字节对应到内存的低地址处。比如:两种模式下存放数据0X87 65 43 21大端模式在内存中存放数据内存地址高到低,高地址----->低地址0X21 ,0X43 ,0X65 ,0X87小端模式在内存中存放数据内存地址高到低,高地址----->低地址0X87 ,0X65 ,0X43 ,0X21测试大小端的方式用UNION,共用体的方法测试typedef union{ int a; char b;}t

2020-08-06 22:41:53 151

原创 offsetof宏和container_of宏,typeof关键字

offsetof宏作用:使用宏来计算结构体中某个元素和结构体首地址之间的偏移量。书写:#define offsetof(TYPE,MEMBER) ((int) &((TYPE *)0)->MEMBER)offsetof(TYPE,MEMBER)的输入参数代表的意思:TPYE:某个结构体类型。MEMBER:上述结构体类型中的某个成员变量。struct mystruct1{ int a; char b; short c; };就比如使用上述的结构

2020-08-05 13:05:00 168

原创 对二维数组名和指针之间的关系的理解

二维数组名在含义上和一维数组名的含义一样假如有一个二维数组 :a[3][2](从数组名作为右值的角度分析)则数组名 a 的含义是指二维数组的首元素首地址。这和一维数组名做右值时的含义是一样的。区别在于,二维数组和一维数组对于内部包含的元素的大小单元的概念是不一样的。一维数组可以看作是将变量作为数组元素,由多个相同类型的变量顺序排列而组成。二维数组可以看作是将一维数组作为数组元素,由多个相同长度大小的一维数组顺序排列而成。所以一维数组以变量作为元素,二维数组以一维数组作为元素。从而,可以将

2020-07-24 20:41:01 905

原创 朱有鹏老师课程学习--对指针的理解的总结

指针是一种变量。和int,char这种普通类型的变量,本质上差别不大。区别

2020-07-23 14:49:32 136

原创 朱有鹏老师课程-函数指针和typedef学习总结

函数指针函数指针的实质还是指针,是一个指针变量,本身占据四个字节(在32位系统中,指针变量都是4个字节)。函数指针,数组指针,普通指针之间并没有本质区别,区别在于指针指向的内容是什么。函数的实质是一段代码,这段代码在内存中是连续分布的(一个函数的大括号括起来的所有语句将来编译出来生成的可执行程序是连续的)。对于函数来说,很关键的是函数中第一句代码的地址,这个地址就是函数地址,在c语言中使用函数名表示。函数指针就是一个普通变量,类型为函数指针类型,其内部的值就是某个函数的地址(也就是函数的函数名这个

2020-07-21 10:42:52 161

原创 朱有鹏老师课程总结指针数组和数组指针

字面意思理解指针数组:实质是一个数组,这个数组中存储的内容全部是指针变量数组指针:实质是一个指针,这个指针指向一个数组第一个: int *p[5];核心是p,先与[]结合组成一个数组,共有5个元素,数组中的元素都是指针,指针指向的元素是int类型,整个符号是一个数组。第二个:int (*p)[5];核心是p,p先和星号结合组成一个指针,指针指向一个数组,数组有5个元素,数组中存放的是int类型的元素,整个符号是一个指针。第三个: int *(p[5]);和第一个含义一样,加上括号,便于理解

2020-07-12 08:42:35 183

原创 朱有鹏老师课程,数组,指针与sizeof运算符的总结

sizeof是c语言中的一个运算符(像+、-、*、/),而不是一个函数。sizeof用来返回()中变量或者数据类型占用的内存字节数char str[]=“hello”;sizeof(str);输出6,数组str总共包括了5个字符和一个’\0’.总共6个字节sizeof(str[0]);输出1,输出了数组第一个元素所占用的字节数strlen(str);输出5,strlen只会计算数组中字符所占的字节数,当找到‘\0’时,就停止了计算。char str[] =“hello”;char *p = s

2020-07-06 18:37:12 187

原创 int *类型指针变量强制转换为char *的结果

假如有这么一个程序 int a = 0x44332211; int *p1 = &a; char *p2 = (char *)&a; printf("*p1 = 0x%x\n",*p1); printf("*p2 = 0x%x\n",*p2);结果如下图分析:a,p1,p2在内存中的实际效果如下(地址是假设的)p1和p2所指向的都是变量a的地址。不同的地方在解指针的时候。p1在解指针时,将0x00当作是四个字节的内存空间大小的首地址。然后以int的解析类型进行解析

2020-07-06 16:02:17 7832 2

原创 看朱有鹏老师课程后,对C语言中普通变量类型,指针变量类型的理解

普通变量类型如int类型在程序中,定义 int a = 5;这个变量a就会被赋予内存中的两种东西,一是一个内存地址,二是这个内存地址所指向的一段内存空间。以及定义了变量a中的数据的解析方法。变量的内存地址,是指变量被赋予的内存空间的最小地址。例如定义了int a = 5;a的内存空间会涵盖32位的大小,一个地址指向一个字节大小,所以a所指向的内存空间里会有4个地址。而a的地址是这四个地址中的最小的那个。如下图。变量被赋予的内存空间的大小,由变量类型决定,如果是char型,则赋予8位一字节大小的内

2020-07-06 15:27:45 238

原创 学习朱有鹏老师嵌入式课程总结-RTC实时时钟

实时时钟,就是能提供准确时间的一种定时器。RTC实时时钟一般都拥有在系统掉电后依然继续工作的能力,但是都是配有RTC实时时钟自己的独立电源的,一般是一个纽扣电池。如果在系统掉电后,没有独立电源供电,那RTC也会不工作。RTC时钟需要一个独立的晶振提供为其工作提供工作频率。一般使用32.768khz晶体配合工作。(内部分频2^15,然后就能得到一个1HZ的时钟频率)。s5pv210的RTC时钟可以用于产生实时时间,还有闹钟功能,和TICKTIME功能,TICKTIME功能主要用在操作系统中(暂时还不是很懂

2020-06-24 21:06:31 676

原创 学习朱有鹏老师的看门狗定时器

看门狗定时器典型应用场景:我们在应用程序中打开看门狗设备,初始化好,给它一个实践,然后应用程序使用一个线程来喂狗,这个线程的执行时间安全短于看门狗的复位实践。当系统(或者应用程序)异常后,喂狗线程自然就停止工作了,然后看门狗就复位了。s5pv210的看门狗定时器共有4个寄存器1.WTCON:看门狗定时器的控制定时器。2.WTDAT:看门狗定时器的重装载寄存器。3.WTCNT:看门狗定时器的计数寄存器。4.WTCLRINT:看门狗定时器中断清除寄存器。WTCON用于设置看门狗定时器的时钟频率;看

2020-06-19 22:01:16 303

原创 学习朱有鹏老师PWM定时器课程后的总结

S5PV210共有5个PWM定时器,分别是PWM定时器0~4PWM定时器0~3都有外部引脚可以输出PWM波,PWM定时器4没有外部引脚引出。PWM定时器的时钟来源是PCLK-PSYS,66MHz.整个PWM定时器外设可以分为以下几个部分:预分频器;分频器;控制寄存器;计数寄存器(TCNTB);比较寄存器(TCMPB);电平翻转器;死区发生器。PWM定时器0-1拥有以上所有部分。PWM定时器2-3没有死区发生器。PWM定时器4没有TCMPB,电平翻转器,死区发生器(没用过定时器4,但我估计定时器4没

2020-06-18 20:18:08 399

原创 关于朱有鹏老师中断课程的学习总结

S5PV210的中断系统首先放一张自己总结的210的中断工作流程图中断就是当CPU在处理主程序时,突发了一个新任务,然后CPU先暂停主程序,去处理新任务相关部分的代码,处理结束后再回到主程序继续执行的过程。那我们主要学习的点在哪里?就是学习在SoC中,SoC是如何处理中断的这一系列的操作。首先是210的工作模式:这里我理解有限,目前只知道在写裸机代码时,正常情况下,SoC是运行在SVC模式下的。当中断到来时,SoC是会自动切换到IRQ模式下运行。下图是各个模式下对应的寄存器,黑色部分是所有模式公

2020-06-08 20:29:02 265

原创 朱有鹏嵌入式-重定位代码总结

思路就是比较运行地址和链接地址是否相等,不相等则将运行地址中的内容全部复制一份到链接地址,并且将BSS段(放初始化为0的全局变量)内容清零,最后长跳转到链接地址处的程序继续运行。链接脚本部分的解读SECTIONS{.=0XD0024000; //起始链接地址为0XD0024000.text: //代码段。这里冒号前面要加个空格{start.o //代码段的启动程序部分放最前面,里面包含了重定向程序*(.text) //剩余部分随意排放}.dat

2020-05-26 19:37:20 190 1

原创 stm32位段和位段别名存储区

才疏学浅,以下是我自己个人理解一个16进制的地址对应一个字节->8bitstm32中每个寄存器是32bit,所以一个寄存器就跨越了4个16进制的地址,取了四个地址中最小的那个作为该寄存器的地址就像下面的图,总共有4个32位寄存器,每个寄存器跨越了4个地址。参考手册中写到:位段区将别名存储器区中的每个字映射到位段存储器区的一个位。一下是我对这种映射的理解。这是参考手册中给出的公式下面的映射公式给出了别名区中的每个字是如何对应位带区的相应位的:bit_word_addr = bit_ba

2020-05-13 12:19:15 1918

原创 看了朱有鹏老师嵌入式开发板刷机课程后总结

课程中刷机时用到的三种工具。SD卡,fastboot,dnw首先是SD卡SD卡主要应对的是iNand中uboot被破坏的情况,这种时候可以用电脑往SD卡中烧入uboot,然后插到开发板的SD2通道。这样子当开发板在SD模式下启动的时候,检测到SD0通道内硬件中uboot失效时,就会跳到SD2通道,执行SD卡中的uboot,如果iNand中OS部分没有被破坏,最终会通过BL2将iNand中的OS放入DRAM中执行。其实这里SD卡的功能就是代替了iNand中uboot部分的功能。如果下次执行将SD卡拔出,则

2020-05-12 18:46:26 922

转载 原码,反码,补码

原码:原码就是早期用来表示数字的一种方式: 一个正数,转换为二进制位就是这个正数的原码。负数的绝对值转换成二进制位然后在高位补1就是这个负数的原码。举例:int类型的 3 的原码是 11B(B表示二进制位), 在32位机器上占四个字节,那么高位补零就得:00000000 00000000 00000000 00000011int类型的 -3 的绝对值的二进制位就是上面的 11B 展开后高位补零就得:10000000 00000000 00000000 00000011但是原码有几个缺点,零分两种

2020-05-09 09:50:51 130

原创 记录一下AD画简单PCB的大致流程

假设有一张现成的原理图。可以准备一下原理图库和PCB封装库,也可以后面自己画,就是这么多器件一个一个找数据手册根据尺寸画确实麻烦费时。数据手册可以在力创商城找到。商城里大部分器件还会有封装。首先建立一个工程,工程下面再建立原理图和PCB文件;有原理图库和PCB封装库的将这两个库也导入该工程下;假设原理图绝对正确的情况下,在原理图文件下,将该原理图一摸一样抄下来。如果我是自己设计的原理图,那在设计的时候就要非常仔细,一定不能出错。原理图画完之后,需要检查一下原理图是否出错,可以用软件检查一下,点击工

2020-05-08 20:08:05 1767

转载 0x080004C0 BEAB BKPT 0xAB程序卡在这里的原因

0x080004C0 BEAB BKPT 0xAB程序卡在这里的原因http://news.eeworld.com.cn/mcu/article_2017011833395.html(与编译软件有关):重定向函数fputc编写无误,使用的是MDK4.22-3.40之间的编译环境,未使用微库,即MiclroLIB,因printf()之类的函数,使用了半主机模式。使用微库的话,不会使用半主机模式,...

2020-04-29 22:47:00 1832

空空如也

空空如也

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

TA关注的人

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