自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 【无标题】

设计自己的仪器设备首先考虑供电-供电电流-电压-功率,考虑接口问题。用什么芯片 工作电流相加 再称余量系数。

2025-05-06 09:48:47 76

原创 功能块图编程语言整理

3.函数或功能块的输入只能连接一个变量、函数或功能块的输出,这体现输入信号的唯一性,当多个函数或功能块的输出要同时传递数据到一个函数或功能块时,表示这些函数或功能块的输出时通过一个或运算输出的。函数和功能块是功能块图编程语言的基本图形元素,包括标准函数和功能块以及衍生函数与功能块。4.函数或功能块的反馈环路宜采用反馈变量的形式,即用隐式显示描述,虽然,iec标准规定,功能块图编程语言也可用显式形式描述。5.函数或功能块的输入或输出可以不连接有关变量或函数、功能块。函数和功能块连接时,遵循下列规则。

2025-01-06 11:28:49 247

原创 docker学习使用

镜像是一种轻量级、 可执行的独立软件包,来打包软件运行环境和基于运行环境开发的软件,它包含运行某个软件所需的所有内容,包括代码、运行时、库、环境变量和配置文件。近期需要用docker技术配合实时linux内核在计算机运行多套虚拟控制器代码,对docker的使用学习做一个记录。docker pull 用于从仓库(例如,除了拉取镜像还可以发布镜像。)中拉去镜像到本地。

2025-01-06 11:27:33 301

原创 tcp/ip、以太网、mqtt、modbus/tcp复习

因为mac地址是各个厂家自己分配的,如果需要作为网关进行数据的转发,那么需要这个mac地址的前几位相同,这样才能作为转发的依据,但是这显然是不现实的,在现实世界中,如果想这样做,要么你规定每片网络下都是同一厂家生产的设备,要么你规定厂家生产设备时,按照你的规则来生产mac地址。一开始这个表是空的,为了获得别的设备的mac地址,会先广播一条arp请求,接收到arp请求的设备会相应请求,发送自己的mac到源设备,这时候两边的设备会互相记录对方的ip和mac。arp缓存表存着ip和mac地址的一一对应关系。

2024-10-06 16:42:28 1214

原创 单片机复习

ram断电后不会保留数据,适合存储需要频繁使用的数据,已赋值的变量rwdata(RW-data(读写数据)代表被调用的已经初始且初始化不为0的全局变量,RW-data会先被存储到flash里面,等待程序运行的时候,再被复制到RAM中,所以RW-data既占用一份flash,也会占用一份RAM。应用程序计时器可根据设定的时间来执行任务,应用程序计时器的线程优先级是一个默认的最高优先级(0),因此需要降低时间到期函数之中的函数复杂度,也不能在中断到期函数中挂起任何任务,这些都会导致系统时钟节拍的不准确。

2024-08-30 09:40:17 579

原创 最短路径算法——A*算法

◆ 如果它已经在 openList 中,检查这条路径 ( 即经由当前方格到达它那里 ) 是否更好,用 g 值作参考,更小的 g 值表示这是更好的路径。1.首先确定两个数组,openlist和closelist,openlist存储当前要处理的点的集合,closelist存储处理过的点,把起点加入 openList。◆如果它不在 openList 中,则把它加入 openList ,并且把当前方格设置为它的父节点(方面记录路径),记录该方格的f、g、h值。g(n) 是从初始状态到状态n的实际代价,

2024-07-18 15:56:16 1217

原创 最短路径算法——Dijkstra算法

5.经过上一步的计算,现在dist数组中的数据不全是正无穷了,dist[1]=6,dist[2]=3,dist[3、4、5...]=正无穷,path数组中也有相应的值了path[1]=0、path[2]=0、path[3、4、5、6]=null。根据这两个权重值更新dist、path数组,dist数组的第一个元素应该变成s[p0][p1]的值(为什么修改第一个,因为s[p0][p1]这个元素中的p1代表第一个点),也就是距离,dist数组的第二个元素应该变成s[p0][p2]的值,也就是距离。

2024-07-17 17:21:08 767

原创 wallpaper 的CGI壁纸electrico修改代码 和无界鼠标配合实现跨越功能

言归正传,实现怪物的跨越屏幕的问题首先就要解决无界鼠标的一个问题,那就是,当a的鼠标移到b的界面上的时候,并不代表a的鼠标就真的移了过来,而是,a的鼠标不显示鼠标图标,但是其实是移动到了a的屏幕最上面的中间位置,坐标应该是(w/2,0),其中w代表屏幕的宽度。当两个html文件运行的时候,避免不了鼠标跨界的时候,怪物会移动到 (w/2,0)这个地方。但是存在一定局限性,如果你想实现图中的怪物动态跟你的鼠标跨越到另一个显示器上的时候,它过不来。恰好cgi类型的壁纸大多数是html生成的。

2024-07-15 16:56:19 782

原创 正点原子北极星h750xbh6用cubemx配置threadx+netxduo(lan8720+pcf8574),并成功ping通

北极星原理图+北极星官方例程(序号2403)基于lwip+socket+tcp客户端+相关例程的pdf文档基于f407探索者的threadx+netxduo+lan8720基于f429igt6+lan8720。

2024-05-22 22:08:04 916

原创 单片机堆栈空间的正确使用

举个例子,我们现在要在一个单片机的程序里用到c++的函数,在这个函数内部,我们用new关键字声明了很多新的对象,这样在函数中new一个新对象的做法,实际是申请的堆空间,写的多了之后,就有堆溢出的风险,因为堆(heap)这个东西,只能手动释放,需要在函数内部手动添加delete方法来释放堆的内存。当我们移植c++程序进keil中的时候,常常遇到堆栈空间不足,我们常说的堆栈空间不足往往是一个宽泛的说法,分为堆溢出和栈溢出。

2024-05-14 15:40:08 424

原创 usb转串口模块详解

一开始不知道为什么需要max232芯片转成rs232信号,直接用uart输出ttl电平信号到单片机端不好吗,现在感觉可能是因为uart传输ttl信号有距离限制,因为电压太低了加上还不是差分信号,可能抗干扰能力较差,所以需要用max232转成rs232信号,到了单片机端再用一个max232转成ttl信号,保证了信息的准确性。如果不对,还请更正。

2024-04-25 20:51:24 566 1

原创 在keil里用c++编程(1)

怎么解决这个问题,三个办法,第一如果我们在用纯c代码的时候,我们可以勾选mcriolib,第二,重写target.c文件,第三,我们选择keil官方补丁,上面这个问咋是第三种办法,我们采用第二种办法。做嵌入式开发时,我们对使用c++语言写的库有强烈的需求,比如eigen,boost等,但是通常来说,我们的开发是围绕c语言进行的,怎么把c++的库文件放在c语言环境下进行编译,就是我们需要面对的问题。8.如果你的cpp文件所需的内存空间很大,这时候你需要修改堆栈大小,或者使用内存管理,这篇文章讲了一下。

2024-04-11 22:08:02 3105 3

原创 syncfusion.sfdiagram.wpf中资源引用问题

basicshapes.xaml这个文件里面,包含了很多类型的shapes,包括,basicshapes,arrowshapes,flowshapes,electronicshapes等等,用的时候。

2024-04-10 17:38:34 650 1

原创 syncfusion-diagram:demo1如何实现

引入了syncfusion命名空间,允许在XAML中使用Syncfusion控件库。:引入了stencil命名空间,用于在XAML中使用Stencil相关的功能。效果如下面所示在窗口的资源中定义一个资源字典,先把basicshapes.xaml这个资源字典加入当前资源字典,然后定义node的样式,connector的样式,symbol的样式,然后定义了一个数据模板,用来统一标题。注:style-样式,只是统一控件的某些属性,templete-模板,则是相当于在原有控件基础上改变内部结构和行为。

2024-04-10 16:12:09 1084 1

原创 串口打印输出问号解决办法

2.cubemx自动生成的外部晶振频率和生产商给的不一致。1.检查串口打印助手波特率设置是否和代码设置的一样。

2024-03-30 09:19:26 957 1

原创 如何在keil中实现c++编程

来源:STM32 C++编程系列一:STM32 C++编程介绍-CSDN博客

2024-03-27 17:06:31 610

原创 上位机发送数据给下位机

下面的代码是hal库生成的while循环里的,由于上位机发送数据给下位机时占用串口5,所以延时5s打印,在这5s里需要尽快打开串口。1.这里的上位机是c++语言写的。2.单片机接收串口打印的数据。

2024-03-24 16:56:16 571

原创 在cubemx中学习CAN

Time for one Bit:一个数据位的时间。(时间量子)的时间长度,将。Baud rate:波特率。预分频系数,可以控制。

2024-03-23 09:40:48 444

原创 在keil5中使用c语言调用c++函数

5.关掉use microlib 编译器,编译环境换成use default complier versin 6,c++设置成c++11标准,还要记得把add.h的路径添加进include path里。3,在新建的group里添加文件,添加一个新的cpp文件和h文件,分别改名为add.cpp/add.h,这两个文件要写我们的示例函数,实现两个数的加法。2.在生成的项目里添加一个新组(new group)1.先用cubemx生成一个包含串口的项目模板。4.主函数中利用加法函数实现数字相加并循环打印。

2024-03-22 09:51:03 2344 5

原创 stm32入门学习(1)初识stm32单片机

学习材料:野火指南者开发板---stm32f103vet6。

2024-03-20 16:04:34 488 1

原创 独立看门狗(iwdg)、窗口看门狗(wwdg)学习

如果把串口发送函数放到延时函数之前,像下面那样,就可以打印出来了,如果把串口发送函数放到延时函数和喂狗函数之间,也是什么都打印不出来,因为500ms后,狗已经死了,所以系统重置实在延时500ms这个函数中进行的们更准确地说是狗死了的第二个时刻开始的。进入窗口之前(0x40),进入看门狗中断处理函数,将看门狗标志位赋值1,然后循环判断标志位是否是1,如果是1,则代表进入窗口,即将进入看门狗中断处理函数,则喂狗,并通过串口打印一些数据,之后标志位重新置0,等到快到喂狗时间再次进入中断函数,循环往复。

2024-03-14 16:42:09 1152

原创 使用cubemx使用threadx,线程中使用hal_delay()延时函数导致程序卡死的问题

在做单片机模拟鼠标的时候,遇到这样的一个问题,在线程中使用了hal_delay()延时函数,导致一直无法正确运行,但是代码都没什么错误,代码在不用threadx操作系统的项目中可以运行。调试后发现程序卡死在hal_delay()函数中,更改成tx_thread_sleep()就可以了。其实这个问题是因为,cubemx配置的时候,选择的是systick而不是tim1,更换为tim1就好了,如果还有问题,需要调高tim1的中断优先级。

2024-03-12 21:24:48 1089 1

原创 threadx学习笔记(8)消息队列

消息队列是ThreadX中线程间(以及线程和中断间)通信的主要手段。为什么需要消息队列,而不直接使用全局数组?在裸机编程时,使用全局数组的确比较方便,但是在加上 RTOS 后就是另一种情况了。

2024-03-09 21:44:47 2073 1

原创 ThreadX学习笔记(7)事件标志

TX_AND: (0x02)将事件标志组旧值与flags_to_set进行“与”操作,一般用于对事件标志的清除,因此flags_to_set中的清除目标应该设为0。TX_OR: (0x00)将事件标志组旧值与flags_to_set进行“或”操作,一般用于对事件标志的设置,因此flags_to_set中的设置目标应该设为1。示例代码展示了如何使用事件标志设置通知回调函数,这个函数需要在tx_application_define里私使用,同时需要声明相关事件标志设置通知函数。

2024-03-08 22:04:51 1389 1

原创 threadx学习笔记(6)信号量

semaphore意为信号量有两种操作会影响计数信号量的值:tx_semaphore_get和tx_semaphore_put。get操作将信号量减少1。如果信号量为0,则get操作失败。与get操作相反的是put操作,它将信号量增加1。

2024-03-08 16:52:48 1207 1

原创 threadx学习笔记(5)系统时钟和定时器

示例代码先设置系统时钟为100个滴答,再调用tx_time_get函数,通过串口打印可以看到,已经成功设置系统时钟。第 5 个参数 reschedule_ticks 是定时器第二次及以后的定时滴答数,获取后存储的指针。TX_ACTIVATE_ERROR: (0x17)计时器已经激活,或者是一个已经到期的一次性计时器。第 4 个参数 remaining_ticks 是定时器剩余滴答数,获取后存储的指针。串口打印结果显示删除成功。第 6 个参数 next_timer 是下一个定时器指针,获取后存储的指针。

2024-03-08 11:37:10 2306 1

原创 threadx学习笔记(4)内存管理

下列代码先实现了内存分配,然后打印内存池信息,再内存释放,再次打印内存池信息,可以看到两次内存池的内存大小产生了变化。下面的示例代码,给线程0申请了一个32字节大小的内存空间, 申请后,通过调用tx_byte_pool_info_get函数得到内存池信息。在线程0中先分配内存块,再打印内存块池信息,再释放内存块,打印内存块池信息,根据串口打印结果显示,内存块分配成功,内存块释放成功。示例代码在线程0中调用了函数tx_byte_pool_prioritize,根据串口打印结果,可以看到,函数调用成功。

2024-03-07 21:40:03 2247

原创 threadx学习笔记(3)互斥锁

在线程1中调用互斥锁获取函数后,调用互斥锁信息函数,得到互斥锁目前的信息,可以看到串口打印结果中,互斥锁的tx_mutex_ownership_count加1。删除互斥锁不能和创建互斥锁一样在tx_applicaton_define里创建,要在线程逻辑内部创建。这个函数是创建互斥锁,创建互斥锁和创建线程一样要在tx_application_define中定义。每次得到互斥锁之后,要释放互斥锁,否则其他线程会无法得到互斥锁,导致死锁。获取互斥锁,这个函数一般写在线程内部,让线程获取互斥锁的所有权。

2024-03-07 10:53:45 793

原创 threadx学习笔记(2)线程

关于这部分的详细知识在这两篇博客的基础上,增加了一些具体代码。

2024-03-06 21:04:11 2289

原创 threadx学习笔记(1)

将threadx移植到单片机中

2024-03-05 15:52:42 495 1

空空如也

空空如也

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

TA关注的人

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