自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 C#中使用EditorBrowsableAttribute选择“屏蔽”程序集中的方法(实际只是隐藏,仍可以使用方法名调用,只是编辑器如VS中不再智能提示类中有这个方法)

EditorBrowsableAttribute Classhttps://docs.microsoft.com/zh-cn/dotnet/api/system.componentmodel.editorbrowsableattribute?view=netframework-4.5&f1url=%3FappId%3DDev12IDEF1%26l%3DZH-CN%26k%3Dk(System.ComponentModel.EditorBrowsableAttribute);k(TargetFra

2021-03-11 21:41:28 980

原创 C# WinForm中获取当前程序运行目录的方法

C# WinForm中获取当前程序运行目录的方法:“AppDomain.CurrentDomain.BaseDirectory”:获取当前应用程序所在目录的路径,最后包含“\”; “System.Threading.Thread.GetDomain().BaseDirectory”:获取当前应用程序所在目录的路径,最后包含“\”; “Environment.CurrentDirectory”:获取当前应用程序的路径,最后不包含“\”; “System.IO.Directory.GetCurrent

2021-03-04 10:48:04 1021 1

原创 C#控件命名规范

类 型 前 缀 示 例 Adrotator adrt adrtTopAd BulletedList blst blstCity Button btn btnSubmit Calendar cal calM...

2021-02-23 18:04:37 929

原创 经验证过的跨线程更新辅助类MyInvokeHelper

using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;using System.Reflection;using System.Windows.Forms;namespace Extension.MyDll{ /// <summary> /// 辅助类:跨线程更新控件 /// &l...

2021-02-20 10:51:51 118

原创 C# 静态类

------《C#高级编程》第7版

2021-02-20 09:29:17 85

原创 AD16画线时如何切换90°、45°、任意角度画线模式

在绘图界面选择画线后,使用“shift+空格”可切换不同的画线模式。切换过程中会有90°模式、45度模式、任意角度模式等,在这些模式中可使用空格键在进行细分切换。1、90°模式2、45°模式3、任意模式...

2021-02-19 15:35:43 18531

原创 C# 派生类的构造函数

假定没有为任何类定义任何显式的构造函数,这样编译器就会为所有的类提供默认的初始化构 造函数,在后台会进行许多操作,但编译器可以很好地解决类的层次结构中的所有问题,每个类中 的每个字段都会初始化为对应的默认值。但在添加了一个我们自己的构造函数后,就要通过派生类 的层次结构高效地控制构造过程,因此必须确保构造过程顺利进行,不要出现不能按照层次结构进 行构造的问题。using System;using System.Collections.Generic;usi...

2021-02-17 14:16:46 186

原创 C# Task异步编程

1、不适用异步的示例using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;using System.Threading;using System.Net;using System.Diagnostics;namespace ConsoleApplication1{ class MyDownloadString

2021-02-14 14:25:32 365

原创 C#多线程时对同一资源加锁实现互斥访问

using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;using System.Threading;namespace ConsoleApplication1{ public static class MyLock //使用同一把锁对同一资源进行互斥访问保护 { public stat...

2021-02-13 14:08:32 1006

原创 C# 使用StackFrame和StackTrace类 获取当前函数名,当前代码行,源代码文件

https://docs.microsoft.com/zh-cn/dotnet/api/system.diagnostics.stackframe?view=netframework-3.0https://docs.microsoft.com/zh-cn/dotnet/api/system.diagnostics.stacktrace?view=netframework-3.0测试代码如下:using System;using System.Collections.Ge...

2021-02-07 17:30:25 1024

原创 C#中string.Concat方法的使用

string.Concat方法用于连接string的一个或多个实例,或string的一个或多个实例的object表示形式https://docs.microsoft.com/zh-cn/dotnet/api/system.string.concat?view=net-5.01)连接string[]或object[]数组中的元素using System;using System.Collections.Generic;using System.Linq;using System..

2021-02-07 16:38:42 3265

原创 C#中的参数数组

参数数组允许特定类型的零个或多个实参对应一个特定的形参。参数数组的重点如下:在一个参数列表中只能有一个参数数组 如果有,它必须是列表中的最后一个 由参数数组表示的所有参数必须是同一类型声明一个参数数组需要注意:在数据类型前使用params修饰符 在数据类型后放置一组空的方括号using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threadi

2021-01-25 22:18:22 742

原创 C#中的前台线程和后台线程的区别

前台线程:应用程序必须运行完所有的前台线程才能退出,默认创建的线程都是前台线程。 后台线程:应用程序可以不必考虑后台线程是否已经运行完毕(包括正常退出和异常退出),只要所有的前台线程结束,后台线程自动结束。一般后台线程用于处理时间较短的任务,如在一个Web服务器中可以利用后台线程来处理客户端发过来的请求信息。而前台线程一般用于处理需要长时间等待的任务,如在Web服务器中的监听客户端请求的程序,或是定时对某些系统资源进行扫描的程序。如何将线程设置为前台或后台线程?thread1.IsBackgro

2021-01-18 22:22:59 1206 1

原创 AD16原理图.schdot中批量修改标签中的文本字体、大小、颜色

1)使用鼠标左键区域选中需要修改的文本,或按住shift键使用鼠标左键选择分布在图中各处的需要修改的文本2)按住shift键,鼠标左键双击选中的任一文本,弹出如下的SCH Inspector弹窗3)在SCH Inspector弹窗中选择Color(颜色)或Font(字体)子项目4)根据需求在新弹窗中修改字体类型、大小,或文本颜色,点击新弹窗中的确定按钮确认效果5)修改完成后关闭SCH Inspector弹窗示例:...

2021-01-15 15:07:38 4735

原创 TL431的用法

TL431是可控精密稳压源。它的输出电压用两个电阻就可以设置从Vref(2.5V)到36V范围内的任何值。该器件的典型动态阻抗为0.2Ω,在很多应用中用它代替稳压二极管,例如,数字电压表,运放电路,可调压电源,开关电源等。应用电路及输出电压计算如下图所示:...

2021-01-08 15:58:11 610

原创 C#控件跨线程内容更新

在使用C#开发winform应用程序时,经常会碰到对控件跨线程访问造成的异常。在winform中UI线程和工作线程是分开的,但在实际使用中经常会需要在工作线程更新UI线程中创建的控件。方法1:禁用跨线程访问控件检测.NET默认开启了禁止跨线程控件访问,在程序中将其置为false取消跨线程访问检测即可实现跨线程访问。代码中添加如下代码:Control.CheckForIllegalCrossThreadCalls = false;备注:该方法虽然可以实现跨线程访问,但同时也取消了线程之

2021-01-07 20:27:58 383

原创 C# 串口接收1次数据会进入2次串口接收事件serialPort1_DataReceived,第2次进入时串口缓冲区为空

在C#中使用串口接收数据时发现,在完整的接收完一次数据后,还会再次进入串口接收事件。在网上搜索资料发现其他开发者也有遇到该问题:[1] c#串口事件接受一次数据莫名其妙会触发两次 原文链接:https://www.52pojie.cn/thread-1009851-1-1.html[2]Serial Port object's DataReceived Event firing twice 原文链接:https://stackoverflow.com/questions/3029619...

2021-01-07 15:47:24 3710 4

原创 C#中宏定义#define、预处理#if #else #endif的使用

C#中预处理的使用:预处理指令并不会被编译为执行代码中的指令,但使用预处理指令可以选择编译程序中的哪部分代码。一般在调试代码时或在发布不同功能等级的软件版本中使用。需要特别注意的是,宏定义必须在C#的.cs源文件最开头的位置定义,在其它位置定义会报错。#define BEBUG //宏定义必须定义在源文件的最开头位置using System;using System.Collections.Generic;using System.Linq;using System.Text;using

2021-01-07 14:32:38 9479 1

原创 C# winform中判断控件类型

C# winform中对控件类型的判断:public void UpdataControl(Control control, string data){ if (control is TextBox) { doSomething1(); } if (control is Label) { doSomething1(); } if (control is Button) { doSomething1(); } }

2021-01-07 11:31:37 3982

原创 C#语言入门详解---委托(刘铁猛)

委托:函数指针的升级版,可以类比C语言中的函数指针进行理解变量的本质就是以变量名所对应的内存地址为起点的一段内存,这段内存中存储的就是变量的数据,这段内存的大小由变量的数据类型决定。函数代表算法,函数的本质是以函数名所对应的内存地址为起点的一段内存中,这段内存中存储的不是某个值,而是一组机器语言的指令,CPU就是按照这组指令一条一条执行完成这段函数中所包含的算法。无论是数据还是算法都是保存在内存中的,变量是用来寻找数据的地址,函数是用来寻找算法的地址。C#通过委托这种数据类型保留了与C/

2021-01-07 00:04:05 1596

原创 蓝牙入门基础知识(一)

蓝牙的版本:蓝牙历史版本列表和当前的状态,例如停产、不再授权蓝牙各版本及其重点:

2020-12-24 21:59:21 1595 1

原创 C#中get和set访问器的用法

C#中的get和set访问器可用来获取和设置类中字段(即属性)的值,通过get和set访问器提供访问接口,从而可以避免对字段的直接访问造成的不安全性。using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;namespace ConsoleApplication3{ class Program {

2020-12-21 23:33:56 1847

原创 2020 RT-Thread开发者大会 ART-Badge电子胸牌(可二次开发)

2020 RT-Thread开发者大会 ART-Badge电子胸牌(可二次开发),动手实验IOT会场有介绍使用PersimmonUI设计器进行柿饼UI的开发,使用拖拽控件、注册事件的方式进行GUI的开发。开发语言使用JS,界面实现非常方便,后面学习下如何使用柿饼UI并在电子胸牌上动手实验。...

2020-12-20 23:44:23 476

原创 “2020 RT-Thread开发者大会” 思考感悟

从2019年开始参加RT-Thread的一次线下培训活动后,就深深的喜欢上这个国产的RTOS,之后RT-Thread举办的活动基本都有参加(但每次活动抽奖都抽不到!)。当然,最为盛大的还属一年一度的RT-Thread开发者大会,这里吸引了来自五湖四海的开发者,也汇聚了全国各地的技术大牛,对技术的热情是他们此行的动力。在这里,无需载歌载舞、举杯对月,只要你对技术有热情就是自家人。每次参加完RT-Thread开发者大会不仅可以接触到一些新技术长见识,更能在和其他开发者的交流中对自己学习碰到的问题有所启发。

2020-12-20 22:37:41 174 1

原创 光耦的简介

光耦,光电耦合器的简称,它是以光信号作为介质传输电信号的元器件。光耦的输入端和输出端信号可以非常好的进行隔离,因此在隔离电路中经常会见到光耦。光耦合器一般由三部分组成:光的发射、光的接收及信号放大。输入的电信号驱动发光二极管(LED),使之发出一定波长的光,被光探测器接收而产生光电流,再经过进一步放大后输出。这就完成了电—光—电的转换,从而起到输入、输出、隔离的作用。光耦属于流控元器件,输入和输出之间的最高隔离电压可至上千伏。光耦分为线性光耦和非线性光耦。在规格书中允许的最大有效范围内,线性光耦输入端电

2020-12-19 17:47:36 2966 1

原创 压控元器件和流控元器件

压控元器件:通过电压控制器件是否工作,常见的有MOSFET、IGBT流控元器件:通过电流控制器件是否工作,常见的有光耦、三极管

2020-12-19 17:40:13 1678 1

原创 C#中的变量类型(值类型、引用类型)

C#中的变量类型:数值型:int/float小数默认为double类型,若需指定小数值的类型则可以在小数后加f或F,如1.234f或1.234F表示该值为float类型,如2.345d或2.345D表示该值为double类型。需要注意浮点类型中的特殊类型decimal类型,该类型一般在货币计算等需要高精度数据的场合中使用。字符型:char 布尔型:bool布尔类型的变量只有两种可选择的值true/false,布尔值的默认值是false。结构体:struct 枚举型:e

2020-12-15 23:52:21 2059

原创 在线代码图片生成工具carbon

在日常工作中时常需要和同事间进行代码的沟通和交流,有时只是需要讨论某一段代码的内容,因此不必将整个文件发给同事。通常可以将部分代码进行截图,或者直接将部分代码复制粘贴发送给同事。但以上方法或因为代码太长需要多次截图,破坏阅读代码时的连贯性(也可以生成长截图,但麻烦一点,也不美观),或因为复制粘贴发送过去后会显示格式混乱导致代码阅读性差。因此,为了代码分享时的格式保持不变、美观,可以使用如下代码图片生成工具carbon进行图片的生成。carbon主要特如下:几乎支持所有的语言代码风格 可选择主题、背

2020-12-15 14:35:03 6272 2

原创 PC817/TLP2309/TLP291/AQY280S主要参数对比

PC817TLP2309AQY280S

2020-12-15 10:36:29 1181

原创 C#中变量(成员变量、局部变量、全局变量)的作用域

C#中变量的作用域不管在任何编程语言中都有变量的定义,变量就像是一个容器,不同的变量会在内存中占据不同大小的内存空间。定义变量后会将分配的地址绑定在这个变量名上,以后对该变量名的操作就是对该内存地上存储内容的操作。namespace test{ class myTest { int loop = 0; //实例成员变量 static int num = 0; //静态成员变量 public static

2020-12-15 00:07:14 3812 1

原创 C#命名空间namespace中不能直接包含字段(变量)或方法(函数)之类的成员

C#命名空间即namespace中不能直接包含字段(变量)或方法(函数)之类的成员,须将字段或方法放到类class中,否则编译器会报错。C#命名空间中不能直接定义字段(变量):将value字段(变量)挪进类class中不会再报错了:C#命名空间中不能直接定义方法(函数):将hello方法(函数)挪入类class中就不再报错:...

2020-12-15 00:01:41 12467

原创 C#程序的组织结构

C#程序的组织结构:namespace(命名空间):C#程序中的一种代码组织形式,主要用来标识类的可见范围。一个namespace中包含了一系列的类,一般一个文件中会使用多个using语句引入多个命名空间。语法:namespace 命名空间名称用法:using 命名空间名称如果想使用其它命名空间中定义的类则一般在C#文件的头部使用using进行引用。class(类)类是一种数据结构,包括数据成员(属性)和方法成员(方法)及其它类等内容,便于调用。类一般会包含多个方法,方法定义了类

2020-12-13 22:41:03 607

原创 STM32 MDK编译后生成的 .map文件深入分析

.map文件.map文件是STM32开发中非常重要的一个文件,在该文件中可以详细的查看单个文件、函数及用户定义的全局变量等的占用RAM和ROM(一般为片内FLASH)的空间大小,通过了解这些信息可以很方便的进行代码的优化。在MDK5中,生成的.map文件包含的内容可以在下面的界面中进行配置,默认是全选的,用户也可以根据自己的需求进行选择,如只生成Total info信息。在配置好map生成选项后编译整个工程,双击Project框中的项目名称即可打开.map文件。若使用的是STM32CubeMX生成的

2020-12-10 23:35:05 2733

原创 VSCODE修改文字编码格式为GB2312和TAB键为2个空格(MDK5和VSCODE联合开发STM32程序)

在MDK5中,代码、变量等的高亮显示或代码自动补全做的不是很好,经常会出现在A函数中有变量的高亮功能,在B函数中就没有了。特别是在RT-Thread创建的多个线程中,发现同一文件中的其它函数中的变量都有同一变量高亮,在RT-Thread创建的多个线程中就没有了,这样给程序的查看和优化带来很大的不便。因此决定使用VSCODE作为编辑器进行代码编辑,编辑完成保存后使用MDK5进行代码的编译。这里先介绍下工程情况:我使用的是STM32CubeMX生成基础配置,再使用野火的《RT-Thread内核实现与应用开发

2020-12-10 15:24:21 3231

原创 RT-Thread Nano版本和RT-Thread Master版本的关系

RT-Thread Nano版本和RT-Thread Master版本的关系:RT-Thread Master版本不仅仅是一个实时内核,还包含了丰富的中间层组件。RT-Thread Nano是RT-Thread Master之上进行剪裁后形成的精简版,去掉了一些组件和各种开发板的BSP,仅保留了最核心的实时内核。当项目中使用的芯片容量较小,项目也不复杂的时候,无需使用RT-Thread Master版本中完整的组件和软件包等功能,只需最基本的内核部分就可以完成项目的开发。在RT-Thre

2020-12-07 21:11:16 2438

原创 RT-Thread中堆和栈内存的分配

在嵌入式软件开发中,我们经常会提到堆和栈,实际上堆和栈都是RAM上的物理内存空间,只是使用方式不同而已。栈和堆都是单片机RAM中一段连续的存储空间,该段空间一般在启动文件或链接脚本中指定,最后在C库的_main函数中进行初始化。STM32中的堆栈内存空间分配就在启动文件中完成:栈(STACK):由编译器自动分配和释放堆(HEAP):有的地方也叫堆栈,一般由用户自行分配和释放,因此在分配好使用完成后要及时释放内存,否则会导致系统可用的内存越来越少,我们管这种情况叫做内存泄漏使用MDK5进行

2020-12-07 21:04:58 6514 7

原创 STM32实现USB虚拟串口原理(下)

中断传输应用如主机定期间隔送鼠标读取当前的输入信息,或键盘的输入键值同步传输应用于音视频等对延迟有严格要求的场合大容量传输对实时性没有太高要求,对延迟有较大的容忍,且在协议层面并未规定最大的容忍延迟时间,但能从协议层面保证数据传输的正确性和完整性。从供电状态开始,在任何状态下,只要设备检测到3mS内USB总线上没有活动就会进入挂起状态。当检测到USB总线上的活动恢复时,设备又会恢复到挂起状态之前的状态。一般主机会按照...

2020-12-07 21:00:39 1148

原创 在STM32CubeMX生成的MDK5工程上添加RT-Thread Nano后双击工程名无法打开.map文件的解决方法

RT-Thread Nano版本和RT-Thread Master版本的关系:RT-Thread Master版本不仅仅是一个实时内核,还包含了丰富的中间层组件。RT-Thread Nano是RT-Thread Master之上进行剪裁后形成的精简版,去掉了一些组件和各种开发板的BSP,仅保留了最核心的实时内核。当项目中使用的芯片容量较小,项目也不复杂的时候,无需使用RT-Thread Master版本中完整的组件和软件包等功能,只需最基本的内核部分就可以完成项目的开发。在RT-Thre

2020-12-07 20:09:46 631

原创 RT-Thread在github上的教程中图片显示不出来问题的解决方法

在github上查看RT-Thread STM32系列BSP制作教程时发现教程中所有的图片都加载不出来,非常影响教程的阅读使用。使用记事本打开文件: C:\Windows\System32\drivers\etc\hosts将如下内容复制粘贴到hosts文件末尾:# GitHub Start 140.82.113.3 github.com140.82.114.20 gist.github.com151.101.184.133 assets-cd.

2020-11-26 14:08:38 181

原创 RT-Thread 简介及架构

RT-Thread,全称是 Real Time-Thread,顾名思义,它是一个嵌入式实时多线程操作系统,基本属性之一是支持多任务,允许多个任务同时运行并不意味着处理器在同一时刻真地执行了多个任务。事实上,一个处理器核心在某一时刻只能运行一个任务,由于每次对一个任务的执行时间很短、任务与任务之间通过任务调度器进行非常快速地切换(调度器根据优先级决定此刻该执行的任务),给人造成多个任务在一个时刻同时运行的错觉。在 RT-Thread 系统中,任务通过线程实现的,RT-Thread 中的线程调度器也就是以上提到

2020-11-26 10:26:53 2506

空空如也

空空如也

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

TA关注的人

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