- 博客(52)
- 资源 (2)
- 收藏
- 关注
原创 softethervpn编译与使用
softethervpn编译与使用下载源码softethervpn可以到www.softether-download.com这里下载,本次使用的源码的版本是v4.37-9758-beta-2021.08.16,主要目的是编译vpnclient,vpncmd等。可以到https://ftp.gnu.org/pub/gnu/libiconv/这里下载,本次使用的源码时libiconv-1.15,主要目的是编译出preloadable_libiconv.so,如果程序在ubuntu中,在程序中包括
2022-05-19 23:24:19
1010
原创 rtthread 重映射引脚输出pwm 注意事项
项目场景:客户做的一个单片机项目,使用rtthread+stm32f103c8t6组合,通过TIM3的1,2,3通道输出pwm,控制灯闪烁,亮灭。问题描述TIM3的1,2,3通道引脚因为硬件布线原因需要重映射,1,2通道分别映射到PB4,PB5 ,调试过程发现只有3通道PB0有PWM输出,其他两个引脚无输出,因为之前使用cubeMx生成的工程运行过,因此排除硬件原因,从软件入手分析。原因分析:主要分析手段就是打断点,确认寄存器是否配置正确,排查到TIM3_REMAP寄存器的时候.
2022-03-08 20:57:57
1483
原创 vscode 免密登录远程环境
使用vscode登陆远程环境开发中经常遇到这样的情况,在工作空间中已经有一个文件夹的时候想添加另外一个文件夹进来,结果发现vscode重新加载页面,还要重新输入一次密码,这样确实很麻烦,降低使用体验,下面介绍一个无需输入密码直接登陆的方法,很简单,就是把自己本地电脑的ssh公钥放在远程环境,并在vscode中配置ssh私钥的位置即可。第一步将公钥 id_rsa.pub 放在远程主机上,建议放在用户的根目录的***.ssh***目录下arno@arno-VirtualBox:~/.ssh$ lsaut
2021-01-17 15:35:31
314
原创 制作stlink(烧录部分)
制作stlink(烧录部分)1 stlink 固件版本命名规则主要版本:**1:**代表ST-LINK/V1 **2:**代表ST-LINK/V2, ST-LINK/V2-1,ST-LINK/V2-A和 ST-LINK/V2-B **3:**代表STLINK-V3SET 和 STLINK-V3E次要版本J:支持STM32调试接口的版本(JTAG和SWD协议)。值0表示不支持该接口(对于STM8的Discovery板,如:V2.J0.S4)。**S:**支持STM8调试接口的版本(SWIM
2020-08-04 17:47:42
2575
原创 使用vscode开发stm32
vscode 下载地址:https://code.visualstudio.com/安装插件:Cortec-Debug、Cortex-Debug: Device Support Pack - STM32F1 图1 vscode插件 make (自由软件下的一个:介...
2019-09-16 15:47:46
3308
原创 touchGFX 添加中文字库
touchGFX使用unicode编码,所以在添加中文字库的时候使用Unicode编码,中文Unicode编码的范围是19968-40869,同时添加一些符号。添加之后生成代码的时候失败,原因是字库太大,无法放入内部的flash,因此要修改链接文件,将字库链接到外部flash,链接方法在https://touchgfx.zendesk.com/hc/en-us/articles/20...
2019-06-13 13:09:12
4946
1
原创 RT-Thread内核移植
记录代码移植过程,成功一步记录一步第一步:建立裸机程序使用STM32CubeMx建立一个裸机程序生成MDK5工程第二步:参考0-bare-metal完成board.c、board.h文件在Drivers组下添加board.c、board.h文件添加board.c文件实现board.c里面关于关于时钟配置、串口初始化、GPIO初始化等函数void bsp_...
2018-08-16 23:04:18
6073
转载 GDI GDI+ 的区别
转载自:http://www.cnblogs.com/lidabo/p/3701252.html GDI+是GDI的下一个版本,它进行了很好的改进,并且易用性更好。GDI的一个好处就是你不必知道任何关于数据怎样在设备上渲染的细节,GDI+更好的实现了这个优点,也就是说,GDI是一个中低层API,你还可能要知道设备,而GDI+是一个高层的API,你不必知道设备。例如你如果要设置某个控件的前景...
2018-08-06 13:05:46
750
原创 Use of $Super$ $ and$Sub$ $to patch symbol definitions
在无法修改现有符号的情况下,可以使用特殊模式。现有符号无法修改,例如,如果它位于外部库或ROM代码中。 在这种情况下,您可以使用$Super$$ 和$Sub$$模式来修补现有符号。修补函数foo()的定义:$Super$$foo标识原始未修补的函数foo()。 用它来直接调用原始函数。$Sub$$foo标识调用的新函数而不是原始函数foo()。 用它来添加在原始功能之前或之后处理。...
2018-07-31 14:51:23
342
转载 串口网口数据帧解析(支持连包、断传、错误数据过滤)
本文转载自:https://blog.youkuaiyun.com/hwb_1988/article/details/45872379嵌入式系统中,关于数据接受部分确实思考了很多,下面总结下个人经验。 关于串口传输,个人觉得采用modbus协议来接受数据是比较合理的,采用3.5char字符的超时机制,接受的时候如果判断超时,就当作一帧数据进行处理,所以这种情况,帧格式没有那么讲解,发送...
2018-07-21 16:18:34
3553
原创 使用Jlink连接STM32芯片的时候链接不上 SW Device没有可用的设备
1、电路设计问题,尤其是自己做的板子2、芯片一直处于复位状态3、下载的程序把SW调试接口禁掉 解决方案:保持芯片处于复位状态,点解MDK的下载按钮,有下载信息出现的时候松开,过程一定要快...
2018-04-12 15:14:59
25184
原创 汇编文件.S和.s的区别
.c C 原始程序 ;预处理、编译、汇编 .C C++ 原始程序 ;预处理、编译、汇编 .ccC++ 原始程序 ;预处理、编译、汇编 .cxx C++ 原始程序 ;预处理、编译、汇编 .m Objective-C 原始程序 ;预处理、编译、汇编 .i 已经
2017-09-02 23:58:52
1673
原创 C#泛型委托
因为项目原因最近要使用C#进行编程,于是每天现学现卖一点一点的进行开发。之前很长的时间一直使用C和C++进行编程,于是转到C#一开始开始不是特别适应的,特别是C#这门语言没有了指针,感觉编程的 灵活度马上就下降了,我狂野指针好像再也不能随意点击我想要的内存了,上网找方法,看到C#的方法--------委托。C#的委托和函数指针很像很像,(1)自定义一个与要指向的方法格式相匹配的的委托。
2017-07-28 00:00:27
575
转载 关于捕获键盘信息的processDialogkey方法
转载自:http://blog.youkuaiyun.com/lucifinil_s/article/details/6318189在一些控件里的keydown方法,没有办法捕获所有的按键消息比如自己写一个窗体控件库,继承了UserControl但是没有办法捕获一些键,比如方向键等所以必须重载 processDialogkey 方法processDialogkey 的描述 在msd
2017-07-25 11:55:27
1228
原创 C#使用双缓冲解决绘图闪屏的问题
最近在工作需要使用C#绘制图形,看了一下绘制的函数觉得很简单就开始着手工作了,但是在实际应用的时候发现鼠标进行绘制的时候会闪屏,原因是图元重绘的时间不一致,百度一下有很多更详细的,于是参照网上的解决办法在窗体初始化函数中加入 SetStyle(ControlStyles.AllPaintingInWmPaint | ControlStyles.OptimizedDoubleBuffer | Con
2017-07-21 15:22:33
827
原创 使用的DockPanel的心得
使用这个控件的时候后一定要先Show(this.DockPlan1);才能使用DockTo(this.DockPlan1, DockStyle.Bottom);固定位置,否则会抛出异常
2017-07-10 15:18:39
4329
转载 GDI GDI+ 的区别
转载自:http://www.cnblogs.com/lidabo/p/3701252.htmlGDI+是GDI的下一个版本,它进行了很好的改进,并且易用性更好。GDI的一个好处就是你不必知道任何关于数据怎样在设备上渲染的细节,GDI+更好的实现了这个优点,也就是说,GDI是一个中低层API,你还可能要知道设备,而GDI+是一个高层的API,你不必知道设备。例如你如果要设置某个控件的前
2017-06-26 15:34:22
295
原创 进程与线程
进程:进程是操作系统对一个正在运行的程序的一种抽象,一个系统可以同时运行多个进程,看上去是CPU并发的执行多个程序,实际上是通过进程切换来实现的,这种机制称为上下文切换(上下文:操作系统保持跟踪程序运行所需的所有状态信息)。当操作系统决定把当前的控制权从当前进程转移到一个新的程序的时候,就会进行长下文切换,即保存当前进程的上下文、恢复新进程的上下文然后将控制权传递到新的进程。实现进程切换需
2017-05-23 16:37:12
258
转载 socket函数
转自:http://blog.youkuaiyun.com/guoping16/article/details/65843821. 基本套接字函数(1)socket函数原型socket(建立一个socket文件描述符)所需头文件#include #include 函数说明建立一个so
2017-02-18 18:17:46
300
原创 public,private,protected的区别,继承方法与访问权限
第一部分:public/private/protected的具体区别在说明这四个关键字之前,就class之间的关系做一个简单的定义,对于继承自己的class,base class可以认为他们都是自己的子女,而对于和自己一个目录下的classes,认为都是自己的朋友。1、public:public表明该数据成员、成员函数是对所有用户开放的,所有用户都可以直接进行调用2、private
2016-12-23 10:25:35
53327
8
原创 多文件的子类继承
/***************Box.h******************///声明类class Box{public: Box(float x, float y, float z); ~Box(); float get_volume(void);//一定要在类里声明protected: float length; // 长度 float
2016-12-22 13:40:51
693
原创 在数组中进行图形绘制
#include #define k )*2+1#define _ )*2#define s ((((((((((((((((0static unsigned short stop[]={ s _ _ _ _ _ k k k k k _ _ _ k k _, s _ _ _ k k k k k k k k k _ k k k, s _ _ k k k _ _ _ _ _ k k k
2016-12-18 15:18:58
1345
转载 线程,进程,程序的区别
转载自:https://mp.weixin.qq.com/s/O6-cZ9t8aJUMyeb7TbcbTQ任务是代码运行的一个映象,从系统的角度看,任务是竞争系统资源的最小运行单元。任务可以使用或等待CPU、I/O设备及内存空间等系统资源,并独立于其它任务,与它们一起并发运行(宏观上如此)。VxWorks内核使任务能快速共享系统的绝大部分资源。在VxWorks6.4中,进程是指Rtp,
2016-12-18 12:57:48
431
原创 makefile小试牛刀
使用make编译两个.c文件//b.c#include void fun1(){ printf("this is creat by make file.\n");}//a.cvoid fun1(void);int main(){ fun1(); return 0;}使用makefile进行编译链接//第一版
2016-12-13 21:58:13
269
原创 函数指针实例
#include void fun1(void){ printf("I`m fun1\n");}void fun2(void){ printf("I`m fun2\n");}void fun3(void){ printf("I`m fun3\n");}void fun4(void){ printf("I`m fun4\n");}void fun5(void){
2016-12-11 21:06:31
352
原创 可变参数列表的简单实现
使用可变参数列表实现一个sum函数#include #define _AUPBND (sizeof (int) - 1) #define _ADNBND (sizeof (int) - 1) #define _bnd(X, bnd) (((sizeof (X)) + (bnd)) & (~(bnd))) //_bnd(X, bnd)给出了以4字节对齐
2016-12-05 18:01:52
427
原创 在显示屏上显示的数字的方法
在现实屏上显示的数字的时候经常需要对数据进行分解,得到数据的每一位再依次显示,方法有很多种,下面介绍经常用到的3种方法第一种方法:不断的利用取整运算与取余运算得到每一位void displaynum1(int Num){ u8 a,b,c,d; d=Num/1000; a=(Num%1000)/100; b=(Num%100)/10; c=Num%10;}优点:理
2016-11-30 23:00:16
9861
转载 LDR和ADR
转自:https://www.douban.com/note/331036776/ARM汇编有ldr指令以及ldr、adr伪指令,他门都可以将标号表达式作为操作数,下面通过分析一段代码以及对应的反汇编结果来说明它们的区别。 ldr r0, _start adr r0, _start ldr r0, =_start_start:
2016-11-28 18:58:58
369
原创 cp: omitting directory ‘sp/’
在linux中使用命令复制文件夹的时候出现的错误:cp: omitting directory ‘sp/’解决办法:使用递归拷贝,在cp命令后面加上-r参数,形如:cp -r sp icache这里的-r代表递归的意思。同样,当我们在linux系统下删除目录时也需要加上-r参数 ,如果目录为空,则会直接删除,如果目录非空,则会级联删除。不过在级联删除时也会有一个问题就是如果
2016-11-26 16:24:41
312
原创 linux使用vim编辑时候无法使用:wq保存报错
在linux上使用vi命令修改一个文件内容的时候,发现无法保存,每次写完使用“:q!”命令可以正常退出但是使用":wq!"命令保存文件并退出时出现一下信息提示: E212: Can't open file for writing原因1:权限不足。解决方法:使用su获得root权限。原因2:程序正在被其他应用程序使用。
2016-11-22 21:13:38
24440
原创 拷贝构造函数
拷贝构造函数是重载构造函数的一种重要形式,它的功能是使用一种已经存在的对象去初始一个新创建的同类对象,、它可以将一个已有对象的数据成员的值拷贝给正在创建的另一个同类的对象。 拷贝构造函数与类同名,没有返回值,只有一个参数,参数为该类对象的引用。拷贝构造函数的定义格式: 类名::拷贝构造函数名(类名 &引用名) 例如: Tdate::Tdate(Tdate &d);//形参是一个
2016-11-18 00:00:36
387
转载 关于C++中的友元函数的总结
转载自:http://www.cnblogs.com/BeyondAnyTime/archive/2012/06/04/2535305.html关于C++中的友元函数的总结1.友元函数的简单介绍1.1为什么要使用友元函数在实现类之间数据共享时,减少系统开销,提高效率。如果类A中的函数要访问类B中的成员(例如:智能指针类的实现),那么类A中该函数要是类B的友元函数
2016-11-17 12:23:50
226
原创 Ubuntu中的vi
Windows中的常用编辑器,如自带的notepad。比较好用的notepad++,UltraEditor,SlickEditorLinux中常用编辑器,自带的最古老的vi。比较好用的vim,gedit。vim是vi的升级版,ubuntu中的vi其实是一种对vim的封装。从图中的/etc/alternatives/vi->/usr/bin/vim.basic可以得出以上结论
2016-10-26 21:56:13
504
转载 STM32F101xxT6中VBAT 管脚上的怪现象
转自:http://bbs.elecfans.com/forum.php?mod=viewthread&tid=458808&extra=问题: 问题由某 UPS 制造公司提出。其工程师在某型号新产品的设计中,使用了 STM32 器件,型号为:STM32F101xxT6。在其设计中,STM32 有两路供电,其中一路的电压为 3.3V,为 VDD 及VDDA供电,而另外一路的电压为 3.0V
2016-10-20 20:02:19
4669
1
原创 窥探引用和指针
C语言面试题里面经常会出现一道题目:向某个指定的内存地址写入特定的数据,譬如向0x1234写入100,做法如下*(int *)0x1234=100;解释一下就是将0x1234利用(int *)强制转换为地址,并使用*这把钥匙打开这块内存,写入数据100,既然如此,可不可以根据这个原理写如下代码:int b=10;int &a=b;关键在第二条语句,创建变量a的同时利用&符号取得a的地址并向里面写入
2016-10-03 14:50:43
280
原创 关于数据存储大小端模式的C语言题目
int main(){ int a[5]={1,2,3,4,5}; int *ptr1=(int *)(&a+1); int *ptr2=(int *)((int)a+1); printf("%x,%x",ptr1[-1],*ptr2); return 0;}首先附上1张图片,该图片是我在验证的时候数据的存储方式。这道C语
2016-10-02 10:27:42
1643
原创 C语言细节之定义与声明
什么是定义什么是声明,似乎这俩个东西一样但是又有所区别,思考一下,如果你不能直接说出这二者的根本区别,那么本文对你还是有点用处的。首先什么是定义?《C++Primer》第四版 2.3.5节中这么说到:①变量定义:用于为变量分配存储空间,还可为变量指定初始值。程序中,变量有且仅有一个定义。②变量声明:用于向程序表明变量的类型和名字。③定义也是声明:当定义变量时我们声明了它的类型和名字
2016-09-27 14:07:31
448
原创 STM32寄存器操作简单介绍
STM32单片机可以使用库函数进行操作,再加上现在越来越强大的MDK ARM编译环境,使用库函数开发简直是不二的选择,但是工具越来越强大的同时意味着对编程人员降低了要求,在很大程度上降低了准入门槛,我们因此高兴吗?我倒是觉得这很像温水煮青蛙,所以库函数固然好用却也不应该抛弃最初的做法——寄存器操作。先从启动文件开始介绍:这里介绍比较常见的一种启动方式(从内部的的FLASH启动,至于另外两个是否
2016-09-03 18:43:53
12266
转载 STM32启动文件详解
;先在RAM中分配系统使用的栈,RAM的起始地址为0x2000_0000;然后在RAM中分配变量使用的堆;然后在CODE区(flash)分配中断向量表,flash的起始地址为0x0800_0000,该中断向量表就从这个起始地址开始分配;分配完成后,再定义和实现相应的中断函数,;所有的中断函数全部带有[weak]特性,即弱定义,如果编译器发现在别处文件中定义了同名函数,在链接时用别处的地址进
2016-09-01 20:26:31
1375
edit.com debug.exe
2017-10-10
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人