- 博客(92)
- 资源 (4)
- 问答 (1)
- 收藏
- 关注
原创 低通滤波函数实现
在做的项目中需要通过PWM驱动IGBT来控制负载功率,如果PWM频率很高,电流采样基本不受影响。但是IGBT的开关频率高会引起更多的开关损耗,所以降低了PWM频率,但此时电流会是接近于PWM信号的波形,无法准确采集。所以硬件上增加了RC低通滤波,截止频率在5Hz以下,然后软件上通过低通滤波算法进一步将电流拉平。可以看到滤波器2的曲线响应速度是快于滤波器1的,也就是采样速度越快,越精确,响应越快。实测在ADC 1K的采样频率下,电流采样滞后在600ms以内。下面是C#的实现代码。
2024-09-05 19:50:55 418
原创 STM32Cube的下载与安装
下载链接:https://www.st.com/zh/development-tools/stm32cubemx.html#tools-software。下载地址:https://www.st.com/zh/development-tools/stm32cubemx.html#get-software。继续往下拉,会找到支持包列表,选择需要的系列,点击。跳转至下载页面,拉到最下面,点击“获取最新版本”选择对应的包,点击“Install”安装即可。下载完成之后,选择本地安装,2、芯片支持包的安装。
2024-04-29 15:20:59 442
原创 C 位域(位结构体)
一个位域存储在同一个字节中,如一个字节所剩空间不够存放另一位域时,则会从下一单元起存放该位域。也可以有意使某位域从下一单元开始。
2024-04-22 18:11:35 701
原创 winform跨线程访问控件
net 原则上禁止跨线程访问控件,因为这样可能造成错误的发生,有一种方法是禁止编译器对跨线程访问作检查,Control.CheckForIllegalCrossThreadCalls = false;在访问控件是先判断控件的InvokeRequired属性,如果为true,则需要使用Invoke方法;C#中的Invoke方法主要用于在多线程环境下跨线程调用控件方法或者委托。它的作用是确保方法在正确的线程上执行,避免出现线程安全问题。在需要跨线程调用的地方,使用Invoke方法来执行指定的委托。
2024-04-12 16:54:51 396
原创 strncmp判断数组结果异常
strncmp函数为字符串比较函数,字符串大小的比较是以ASCII 码表上的顺序来决定,此顺序亦为字符的值。其函数声明为int strncmp ( const char * str1, const char * str2, size_t n );功能是把 str1 和 str2 进行比较,最多比较前 n 个字节,若str1与str2的前n个字符相同,则返回0;若s1大于s2,则返回大于0的值;若s1 小于s2,则返回小于0的值。
2023-08-14 17:52:13 296
原创 mysql保存数据提示:Out of range value for column错误
mysql保存数据提示:Out of range value for column错误
2022-07-25 18:39:25 961
原创 C语言 自写atof、atoi等函数
在遇到一些flash很小的芯片的情况下,用库函数中的atof、atoi等等一些函数时引用对应库函数后会比较占内存,只能是通过自写函数来达到功能函数名称:atoifloatTocharintTocharmy_atofmy_memcpymy_memsetmy_strncmpatoiint64_t my_atoi(const char * str){ float num; int64_t ret = 0; char sign = 0; while
2022-05-27 16:37:03 362
原创 C# DataGridView知识点(列宽自适应、数据清空)
宽度自适应//指定列this.dgvQueryACountResult.Columns[@"列名"].AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells;//所有列 this.dgvQueryACountResult.AutoResizeColumns(DataGridViewAutoSizeColumnsMode.AllCells);//宽度自适应AutoSizeMode 属性枚举值含义: // // 摘要:
2022-05-18 18:46:23 2570
原创 SVN常用命名
1.check out检出获得文件后,检出的文件仍处于SVN版本控制中,与版本库保持关联,比如你可以进行Svn Update或者Svn Commit操作。同时导出文件夹下有一个.svn的隐藏文件夹,存储着一些版本的元数据信息。(对于导入到服务器中的数据,需要检出才能形成一个受svn控制的工作拷贝,才可以进行 add update commit 等操作)2.export 简单导出一个版本的数据(把服务器中的数据导出来,相当于复制一份),导出的文件脱离SVN版本控制(导出的就是一个文件,与svn版本没关系),
2022-05-12 10:11:49 234
原创 Modbus协议数据解析
Modbus通讯协议 Modbus是一种串行通信协议,是Modicon公司(现在的施耐德电气 Schneider Electric)于1979年为使用可编程逻辑控制器(PLC)通信而发表。Modbus已经成为工业领域通信协议的业界标准(De facto),并且现在是工业电子设备之间常用的连接方式。 Modbus是一种串行通信协议,是Modicon公司(现在的施耐德电气Schneider Electric)于1979年为使用可编程逻辑控制器(PLC)通信而发表。Modbus已经成为工业领域通信
2022-04-22 16:39:05 9315
原创 C# 数据结构与算法 -队列
接口定义 interface IQueue<T> { int Count { get; }//取得队列长度的属性 int GetLength();//求队列的长度 bool IsEmpty();//判断是否为空 void Clear();//清空队列 void Enqueue(T item);//入队 T Dequeue();//出队 并删除元素 T Peek();//
2022-04-19 22:10:10 578
原创 C# 数据结构与算法 -栈
interface IStackDS<T> { int Count { get; } int GetLength(); bool IsEmpty(); void Clear(); void Push(T item); T Pop(); T Peek(); } class SeqStack<T> : IStackDS<T> ...
2022-04-17 23:42:33 595
原创 C# 数据结构与算法 -双向链表
interface IlistDS<T> { int GetLength(); void Clear(); bool IsEmpty(); void Add(T item); void Insert(T item, int index); T Delete(int index); T this[int index] { get; } T GetEle(i...
2022-04-17 00:32:00 328
原创 C# 数据结构与算法 -单链表
interface IlistDS<T> { int GetLength(); void Clear(); bool IsEmpty(); void Add(T item); void Insert(T item, int index); T Delete(int index); T this[int index] { get; } T GetEle(i...
2022-04-17 00:30:39 258
原创 C# 数据结构与算法 - 线性表
interface IlistDS<T> { int GetLength(); void Clear(); bool IsEmpty(); void Add(T item); void Insert(T item, int index); T Delete(int index); T this[int index] { get; } T GetEle(i...
2022-04-17 00:29:29 223
原创 C# WinForm TabControl美化
窗口Load加下面代码,ItemSize根据自己显示文本长度调整 #region tabMainItem属性设置 this.tabModuleMainItem.DrawMode = TabDrawMode.OwnerDrawFixed; this.tabModuleMainItem.Alignment = TabAlignment.Top; this.tabModuleMainItem.SizeMode = Ta
2022-04-12 14:22:27 2581
原创 C# 运算符重载
重载运算符是具有特殊名称的函数,是通过关键字 operator 后跟运算符的符号来定义的。与其他函数一样,重载运算符有返回类型和参数列表。 class Box { private double length; // 长度 private double breadth; // 宽度 private double height; // 高度 public double getVolume()
2022-04-11 23:35:30 138
原创 MySQL 外键约束的删除与添加
外键的添加ALTER TABLE <数据表名> ADD CONSTRAINT <外键名>FOREIGN KEY(<列名>) REFERENCES <主表名> (<列名>)CONSTRAINT <外键名> 可以省略掉 外键的删除alter table <数据表名>drop foreign key <外键名>, 外键名的查询show create table <数据表名>;
2022-04-11 11:09:30 432
原创 多任务—死锁问题
class StateObject { private int State1 = 5; private int State2 = 5; Object _Lock1 = new object(); Object _Lock2 = new object(); public void ChangeState1() { lock (_Lock1) { ...
2022-03-27 19:52:14 583
原创 C# 多任务—资源访问冲突问题
多个任务同时访问和修改同一个文件或者数据的时候,由于多个任务同时修改文件或数据,就有可能导致数据出现不可预测的异常错误: class StateObject { private int State = 5; public void ChangeState() { if (State == 5) { Thread.Sleep(1);
2022-03-26 18:43:12 946
原创 C# 多任务—任务的创建
class Program { static void Test() { for (int i = 0; i < 1000; i++) { Console.Write("A "); } } static void FirstDownload() { Console.WriteLi...
2022-03-25 00:18:09 795
原创 C# 窗口关闭再次确认及取消
private void frmMain_FormClosing(object sender, FormClosingEventArgs e) { DialogResult Result = MessageBox.Show("程序将被关闭,请确认是否继续","警告", MessageBoxButtons.OKCancel); if (Result == DialogResult.Cancel) { ...
2022-03-22 10:16:24 1970
原创 C# 线程
线程的优先级可以通过Thread类Priority属性设置,Priority属性是一个ThreadPriority型枚举,列举了5个优先等级:AboveNormal、BelowNormal、Highest、Lowest、Normal。普通线程的优先级默认为Normal;如果想有更高的优先级,可设置为AboveNormal或Highest;如果想有较低的优先级,可设置为BelowNormal或Lowest。控制线程1获取线程的状态(Running还是Unstarted),当我们通过调用Thread对象的S
2022-03-11 22:16:41 1295
原创 C# 反射和特征
元数据与反射 程序是用来处理数据的,文本和特征都是数据,而我们的程序本身(类的定义和BCL中的类)这些也是数据。(BCL:Basic Class Lib基础类库) 有关程序及其类型的数据被称为元数据(metadata),他们保存在程序的程序集中。 程序在运行时,可以查看其它程序集或其本身的元数据。一个运行的程序查看本身的元数据或者其他程序集的元数据的行为叫做反射, class Class { private int a; private int b
2022-01-19 10:04:09 250
原创 c# 委托与事件
事件事件(event)基于委托,为委托提供一个发布/订阅机制,我们可以说事件是一种具有特殊签名的委托。什么是事件? 事件(event)是类或对象向其他类或对象通知发生的事情的一种特殊签名的委托。事件的声明 首先必须声明该事件的委托类型。例如 public delegate void BoilerLogHandler(string status); 然后,声明事件本身,使用 event 关键字: public event BoilerLogHandler BoilerEven
2022-01-18 20:53:22 548
原创 CSDN Markdown 编辑器插入空格和空行的方法
空格 #一个字符的空格  #大约三个字符的空格例如:xxxxx xxxxx空行 或 <br>或<br/>例如:xxxxx 或 或<br>或<br/> xxxxxx
2022-01-14 23:38:58 568
原创 C# 泛型
c#通过泛型避免强制类型装换,增强类型安全性,减少装箱量,并且让程序员更轻松地创建常规化的类和方法,泛型类和方法接受类型参数,它们指定了要操作的对象的类型,C#是在尖括号中提供类型参数来指定泛型类,如下所示: class Queue<T> { ... }T就是类型参数,作为占位符使用,会在编译时被真正的类型取代。写代码实例化泛型Queue时,需指定用于取代T的类型(int,double等),在类中定义字段和方法时,可用同样的占位符指定这些项的类型。示例代码如下:
2022-01-12 22:34:45 194
原创 C# DataTable使用问题汇总(个人笔记)
1.该行已经属于另一个表dt.Rows.Add(dtQ3.Rows[0].ItemArray);2.不能将 Column“ ”设置为 null。请改用 DBNull DataRow Row = dataTable.NewRow(); Row[0] = DBNull.Value;//在c#中,Null是空指向,不存在对应的存储地址。而DBNull.Value则是指向一个内存为空的地址。//DBNull是指插了一个空值,数据库字段获取到的也是空值,而Null是指程序中空引用,或对象为空,没有
2022-01-12 09:38:32 1480
原创 C# 委托、Action委托、Func委托、多播委托、匿名方法、Lambda表达式
class Program { delegate void delegate_write(string str); delegate int delegate_Sum(int a,int b); delegate int delegate_Test(int a, int b); delegate string delegate_GetString(); static void Main(string[] ar...
2022-01-11 23:44:09 493
原创 C# 时间差获取
static void Main(string[] args) { DateTime time1 = DateTime.Now; DateTime time2 = time1.AddHours(1).AddMinutes(45); TimeSpan span = time1.Subtract(time2).Duration(); //先求差值 再取绝对值 Console.Write...
2021-12-27 15:05:16 409
原创 C# 多线程与信号量
private static Semaphore white = new Semaphore(1, 1);//信号量,第一位数是1,所以先执行white.WaitOne()。 private static Semaphore black = new Semaphore(0, 1);//信号量 /* * new Semaphore(0, 1); 构造函数第一个参数,表示我们还可使用的授权数。 第二个参数表示我们最大可申请的授权数 ...
2021-12-24 09:56:25 447 1
原创 C# 多线程与互斥量
public static Mutex mutex = new Mutex(false); private static int count = 5000; static void Main(string[] args) { Thread Thread1 = new Thread(fun1); Thread Thread2 = new Thread(fun2); Thr...
2021-12-23 17:17:41 613
原创 C# 多线程的创建以及暂停与启动
private static AutoResetEvent Are1 = new AutoResetEvent(false); private static AutoResetEvent Are2 = new AutoResetEvent(false); static void Main(string[] args) { Thread thread = new Thread(fun_thread);//创建线程 ...
2021-12-22 18:30:49 1650
原创 C# 自定义控件无法加载
自己写的一个自定义控件无法在设计模式下使用. 拖动到窗口时提示 " 未能加载工具箱项 "解决方法:将项目的生成平台目标改为 x86或者Any CPU,在这两种模式下进行窗口设计、程序编写;发布的时候再改成x64去编译即可;...
2021-12-20 18:46:01 1928
原创 OpenCVSharp 笔记21 图像旋转
#region 图像旋转 static void Main(string[] args) { //Mat src = new Mat("lenna.png", ImreadModes.AnyColor | ImreadModes.AnyDepth); //Cv2.ImShow("lenna.png", src); //Mat M = Cv2.GetRotationMatrix2D(new...
2021-12-13 00:19:40 3466
远程桌面导致的程序卡死
2022-08-03
TA创建的收藏夹 TA关注的收藏夹
TA关注的人