- 博客(43)
- 资源 (6)
- 收藏
- 关注
原创 2024 研究生数学建模 华为杯C题
对于不同材料和温度变化时会产生不可避免的误差, 因此本问题要在原斯坦麦茨方程的基础上,通过增加温度这一优化因子,对磁芯损耗的计 算进行修正与完善,构造出一个适合不同温度条件的修正模型。在对实验参数进行分析后, 拟合出加入温度优化银子的修正方程,并且同原斯坦麦茨方程进行进一步的相互对比,分 4 析两者在预测磁芯损耗的效果之间的优劣。根据模 型的分类结果,将波形的分类标签(1表示正弦波,2表示三角波,3表示梯形波)填入附 件四,并输出附件二中的波形分类的数量统计结果,用表格对指定样本序号的波形结果进 行处理。
2024-11-11 21:24:30
816
原创 RISC-V开发 linux下GCC编译自定义指令流程笔记
GCC提供了内嵌汇编的功能可以在C代码中直接内嵌汇编语言语句方便了程序设计。使用内嵌汇编,要先编写汇编指令模板,然后将C语言表达式与指令的操作数相关联,并告诉GCC对这些操作有哪些限制条件。input= 1;return 1;对应的汇编代码如下;行号 代码 解释178 movl $1, input 对应C语言语句input = 1;9 movl input, %eax 隐式处理10 #APP GCC插入的注释,表示内嵌汇编开始11 movl %eax,%eax 我们的内嵌汇编语句。
2024-09-29 17:04:48
1592
2
原创 A题 农村公交与异构无人机协同配送优化
此外,异构无人机的引入,能够根据不同配送需求进行灵活的任务分配,进一步优化配送流程,满足农村地区多样化的物流需求。复杂的地形,如山地和河流等自然障碍,使得道路建设困难重重,导致道路网络稀疏,而分散的配送点进一步增加了物流的复杂性。该方法的实施,展现了贪心算法在物流配送优化问题中的应用潜力,为解决类似的实际问题提供了一种高效且经济的解决方案。此外,该策略还考虑了整数规划模型中的决策变量,确保了解决方案的可行性和实用性,进一步增强了模型的优化效果。每个需求点的任务是不可分割的,一辆公交车最多携带两架无人机。
2024-09-06 09:44:35
1239
原创 基于STM32/GD32的语音识别系统
人类可以听到的音频信号频段范围在20kHz以下。本系统为了减少功耗,提高语音质量。添加了语音识别算法,可以实时识别当前音频是人声,音乐,或者是噪声。如果是噪声,则会关闭扬声器输出,降低系统功耗。
2024-07-29 16:13:57
700
5
原创 设置开发板程序自启动-备忘录
查看文件命名格式,并创建一个文件S99z(确保该文件最后执行)。首先,将编译好的程序下载到开发板里面。cd /etc/init.d文件夹下。在start()中修改文件路径即可。在stop()中关闭程序。
2024-07-25 11:24:16
270
原创 23年电赛D题-信号调制方式识别与参数估计装置
缺点,受单片机性能影响,FFT的精度不够,我使用的是300k采样率,12位AD, 8192采样点数,单精度FPU,168M运算主频进行分析。比如说将FM信号通过一个微分器,就可以达到数字求导的作用,变成一个AM和FM的混合体的样子,可以通过读取AM的信号幅度与频率来获得FM的信号频率以及频偏。缺点,对于AD位数要求高,使用单片机的内置AD无法达到题目要求,但是我试过外接一个24位的AD,可以提高分辨精度。识别信号有很多思路,最简单的方式便是通过对信号进行FFT分析,分析其中的各个谐波的特征值。
2023-08-07 18:32:51
4627
51
原创 左值与右值
由此可以看出int arr2[]作为形参时确实是一个int* 的指针,int arr2[]被转化为指针类型,至于为什莫不直接用指针呢,大概是为了语义化,并且方便在函数内部使用数组吧。关于指针与地址的一些感悟 地址是一个常量,右值,立即数,是固定的,在内存中表示某一个位置,是某一个位置的名字,对于地址的访问属于电路的操作,对于软件语言只是一个名字。数组名和函数名都可已被取地址,并且&arr == arr?int n = 1;当然,数组可以作为形参来接受数组地址,那是不是就意味着数组是一个指针呢?
2023-05-25 22:35:30
443
原创 freertos笔记-任务切换
跳出 3. 循环 (一般用于死循环的第二次循环,因为第一次肯定是溢出了,但是,可能溢出的不止一个,所以要把所有溢出的都找到,最后,找到下一个溢出值)3.5 判断是否要进行任务切换,如果溢出任务优先级高于运行任务优先级的话,会切换任务,而且切换的任务一定是是先添加进去的任务,原因1 高优先级的列表一定为空,pxIndex=>xlistend,而且添加的任务是添加到。作用场景为 当前任务和溢出的任务相同优先级,那么下一个执行的会是溢出的任务,当然如果列表里还有其他任务的话不一定是会执行这个溢出任务,
2023-05-25 22:33:50
1003
原创 freertos笔记-任务基本构造
/删除任务,并在空闲任务中释放空间(堆栈以及TCB的空间)TCB空间如果是动态创建任务的话,就是自动分配自动回收,如果是静态创建,就需要初始化一下,而且必须是初始化StaticTask_t该结构体,而不是值初始化一个结构体指针。将该任务挂起,只有调用任务恢复函数 vTaskResume()或 xTaskResumeFromISR()才会恢复该任务,其他的队列,任务通知,delay都不能将其唤醒。表示有多少个任务要被清理。5. 如果该任务正在运行,切换上下文 portYIELD_WITHIN_API();
2023-05-25 22:30:54
842
原创 freertos笔记-内核函数配置
调用了几次 vTaskSuspendAll()挂起调度器,同样的也得调用几次 xTaskResumeAll()才会最终恢复任务调度器。PC = 任务函数指针 入栈。(4). 初始化任务 prvInitialiseNewTask();//以下是任务参数的初始化。(5). 将任务添加到就绪列表中 prvAddNewTaskToReadyList();xTaskGetApplicationTaskTag() 获取某个任务的标签(Tag)值。
2023-05-25 22:25:49
869
原创 freertos笔记-各种列表运行原理
就是说,列表中的第一个任务不是最先执行的,也许是刚一执行就立马遇到了新的切换吗 应该是,经过仿真器逐步调试,发现。有一个疑问,当节拍间隔比较小时,第一个执行的任务并不是预期的任务,节拍大一点时,才符合逻辑?2-true. 如果没有任务在运行, pxCurrentTCB指向新添加的这个任务, (这里会造成刚开始的时候,最先运行的是最后一个创建的任务)4.1.5.2 taskSELECT_HIGHEST_PRIORITY_TASK()获取就绪列表最高优先级的任务。挂起PendSV中断。
2023-05-25 22:24:23
777
原创 freertos笔记-队列
2.true.1.2 判断是不是互斥队列 是的话xTaskPriorityDisinherit 优先级操作。3.挂起调度器 并且队列上锁prvLockQueue 这里主要是防止中断程序对该队列有操作。2.true.1.1 获取当前队列uxMessagesWaiting值。2.true.1 复制队列中的信息prvCopyDataToQueue。2.false.1 队列满了的话,判断xTicksToWait是否要等待。2.true.2 队列集相关操作。队列项目一(32字节)队列项目二(32字节)
2023-05-25 22:22:48
767
原创 freeetos笔记-列表
prvAddNewTaskToReadyList时用到,有很大用途。列表是一个存放整个系统任务实时信息的数据结构,与单个任务本身是没有关系的是用来调度器用于控制任务的工具。这个函数改变了pxIndex的指向,开始了遍历,它不破坏列表结构。这个函数会将列表项插入pxindex的前面,所谓的尾部。mini列表 xListEnd使用这种类型。列表项是不断插入删除动态游走于各个列表的。获取列表下一项的函数。
2023-05-25 22:17:56
116
原创 CM3学习-中断
(使用双堆栈的条件下,线程模式响应中断时,进入中断入栈时使用psp,然后在中断中使用msp,结束该中断时,切换到psp来出栈)现在使用PendSV来切换上下文,(将PendSV的优先级设置为最低),滴答定时器打断中断后上下文未发生变化,因此可以回到被打断的中断。悬起后,如果优先级不够高,则将缓期等待执行。相同的抢占优先级,不同的子优先级,不会发生抢占,只用于解除悬挂状态,当子优先级也一致时,判断中断源的编号。中断状态标志位在系统内部,用于标识运行,悬挂,完成状态,可以动态改变,可能会导致硬件层次的死循环。
2023-05-25 22:12:10
732
原创 CM3学习-内存管理
别名区地址 = ((哪种位带区) + 别名区偏移量) + ((位带区字节地址)*8【*8是因为一个字节有8位】*4【*4是因为每一位都会别拓展成32位,又因为是字节寻址,则4个字节】 + (哪一位)*4)#define BITBAND(addr, bitnum) ((addr & 0xF0000000)+0x2000000+((addr &0xFFFFF)
2023-05-25 22:09:46
401
原创 CM3学习-基础知识
然而,在分支时,无论是直接写 PC 的值还是使用分支指令,都必须保证加载到 PC 的数值是奇数(即 LSB=1),用以表明这是在 Thumb 状态下执行。IF-THEN(IT)指令围起一个块,里面最多有 4 条指令,它里面的指令可以条件执行(用于优化三元运算符以及小逻辑的if语句)使用双堆栈的条件下,线程模式响应中断时,进入中断入栈时使用psp,然后在中断中使用msp,结束该中断时,切换到psp来出栈。使用x后缀指令,要记得最低位置1,以示Thumb状态,为0的话是arm状态cm3不支持,会有fault;
2023-05-25 22:06:04
864
原创 STM32内存笔记
而且,如果你在函数里面进行这个操作的话,指针地址位于stack,但分配的内存属于heap,函数结束后,不会影响heap里面已经被分配的空间。所以,在初始化对象类型时,以及结构体时,如果直接申明结构体变量的话,它是属于stack的,会被销毁。其中stack作为系统的栈,所有函数里面定义的局部变量都是占用stack的空间的,递归调用函数要注意栈溢出问题。ROM又被称为“只读存储器”,ROM所存数据,一般是装入整机前事先写好的,整机工作过程中只能读出,而不像随机存储器那样能快速地、方便地加以改写。
2022-11-27 13:06:22
1606
原创 STM32 IO口模拟串口
比如说,我发送了一段0和1构成的波形,这段波形我希望他有8个二进制的信息,那么我让每一个二进制信息都保持一秒钟,然后在发生变化。那么,我们可以选择奇校验 当这八个数据里由0或2或4...个1时,我们设置校验位为1,那么这九个数据里就有奇数个1。那么,我们如果想要连续发好多个信号,我们不能把所有信息连到一起发送出去,就像我们写英语作文,不能把所有单词的字母挨得特别紧,一点空也不留。那么,每一秒有一个信息,这就是波特率。由于我们的信息中只有1和0两种状态,那么这就意味着1的个数可以是0~8,不是奇数就是偶数。
2022-09-03 20:57:13
2895
1
原创 STM32 时钟随笔
什么是时钟?通俗的的来说,时钟是一个系统的最小时间单位。它并不是用来提供能量的器件,他就像是我们生活中的秒表,以固定的频率一秒一秒的走着。而我们每做一件事都可以说是花费了几秒时间。(不存在零点几秒,它是一个系统的最小时间单位)。在单片机里面通常有4个时钟源,分别是HSI振荡器时钟 (高速内部时钟)8MHSE振荡器时钟 (高速外部时钟)外接一个晶振电路LSI振荡器时钟 (低速内部时钟)40kLSE振荡器时钟 (低速外部时钟)32.768k其中,一般情况下我们使用外部HSE。
2022-09-03 09:55:13
373
原创 2022年电赛F题 信号调制度测量装置
红叶何时落水一、任务设计制作信号调制度测量装置,该装置测量并显示信号源输出的被测信号调制度等参数,识别并显示被测信号的调制方式,输出解调信号。测量系统如图1所示。二、要求(1)被测信号为电压峰峰值100mV的普通单音调幅(AM)电压,其载频为10MHz、调制信号为频率1~3kHz的正弦信号。测量并显示的调幅度,要求测量误差绝对值≤0.1;输出解调信号,要求解调信号波形无明显失真。 (20分)(2)被测信号为电压峰峰值100mV的单音调频(FM)电压,其载频为10MHz、调制信号为频率3~5kHz的正弦信号。
2022-08-01 12:32:36
11267
14
原创 基于MC1496芯片的AM调制与解调
红叶何时落水皇家邮电电子专业大二电电课程设计一不小心抽到了AM调制题设计一个AM调制解调器,调制信号为500HZ的正弦波,载波信号为30KHZ正弦波,电路内部需要包含有源低通滤波器。根据要求,需要300KHZ和500HZ的正弦波信号,采用已有的函数发生器。整个电路需要包含调制和解调的过程,利用运算放大器,乘法器等元器件完成。本来吧,这个题应该重点是后面的解调部分。因为这个学期主要学的就是动态电路,自己独立设计一个低通电路还是没问题的。但是,调制部分花了3天,解调三天。首先进行AM信号的调制,通过理想的乘法器
2022-06-29 17:49:49
11722
16
原创 stm32 波形检测,绘制
红叶合适落水校赛第三部分详见http://t.csdn.cn/50yJu这里就简单多了波形检测见http://t.csdn.cn/LCvX1关于判断波形的类型FFT还没用过但一定频率范围内有两种方法方案一检测一下采集到的波形数据,大于某个值的数有多少个,就可以判断出是什么波形方案二将数组内相邻的两个数相减,判断差值;差值为0,方波差值为定值,但不为0,三角波差值不是定值,正弦波。关于STM32单片机对数的计算直接使用公式是没法返回正确的
2022-05-20 18:22:40
3430
原创 stm32 检测相位差 并简单实现两个单片机的通信
红叶何时落水校赛第二部分详见http://t.csdn.cn/50yJu利用定时器的输入捕获模式来测量相位差通过 (两路波形上升沿的时间差 / 波形周期)* 360°来实现相位差的测量deg = (360 - (((TIM2CH1_CAPTURE_VAL3 * 360) / (TIM2CH1_CAPTURE_VAL)) + chart)) % 180;其中chart为线性补偿,可以通过按键改变其值,以此实现不同电路的测量可以利用相位差来计算相应的频率与峰峰值难点在于C
2022-05-20 18:10:55
3972
2
原创 stm32实现波形输出,步进1hz
红叶何时落水校赛第一部分详见:http://t.csdn.cn/8op0B关键难点在于步进1hz,若使用定时器的PWM输出方波,步进1hz完全没有问题。但正弦与三角两种波形有一定的问题。方案一,将方波利用比较器转换成正弦和方波这一方案可以实现步进1hz,但是,峰峰值不能保证是5V.因为随频率的变化,峰峰值也会发生变化。解决方案:我们使单片机输出的方波的峰峰值并不是定值,而是一个随着频率而变化的值。以此保证经过比较,放到后,峰峰值为定制5V。方案二,利用DA输出波形DA可以
2022-05-20 17:42:06
2132
3
原创 记录第一次电赛——校赛
红叶何时落水题目很简单1、基础要求 1)波形产生模块可以输出 4KHz -6KHz,峰峰值 5V 的方波。频率可以 通过按键直接调整及步进调整,步进小于等于 10Hz,频率误差低于 2%,波形稳定无明显失真,无噪声。 2)电路 1 输出 12KHz -18KHz,峰峰值 4V 的正弦信号,波形稳定无 明显失真,无噪声。 3)在前级电路输出频率不变的情况下,电路 2 可以改变其输入信号 的相位,要求相位在 20°-160°内连续可调,输出峰峰值无要求,波形稳 定
2022-05-20 17:25:46
958
原创 JS 的var let const
红叶何时落水主要记录一下var,let的区别,以及变量声明提升与函数声明提升var 用于定义一个变量,并且限制了这个变量的作用域 (function fn() { var a = 'fn_var'; b = 'window_var'; })() console.log(a);//=>undefined console.log(b);//=>window_var没有var而直接定义的变量视为window的一个属性(作用
2022-05-10 17:53:28
180
原创 stm32 使用ADC_DMA采集电压,并在显示屏上输出波形
红叶何时落水DMA初始化 GPIO_InitTypeDef GPIO_InitStructure; DMA_InitTypeDef DMA_InitStructure;//结构体定义 RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1,ENABLE);//开启DMA时钟 GPIO_InitStructure.GPIO_Pin=GPIO_Pin_1; GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AIN; G
2022-04-28 09:55:52
7186
8
原创 JS中call,apply,bind方法
红叶何时落水bind是函数原型对象上的一个方法,用于改变函数的this指向这个方法会返回一个新函数,新函数可以调用他所绑定的对象的属性。var name = 'window';var newThis = { name: 'newThis' };var showName = (info1, info2) => { console.log(this, info1, info2);}showName('a', 'b'); // 通过bind改变this指向var newS
2022-04-20 17:19:03
2532
原创 JS中的this
红叶何时落水谁调用就指向谁当一个对象调用时,this指向这个对象的首地址 var obj = { name: "obj_name", obj2: { name: "obj2_name", func: function() { console.log(this.name) } }, func: function() {
2022-04-19 22:01:51
394
原创 STM32 使用DAC和DMA输出任意波形
绿叶何时落水电赛代码备份,展示不做解释。简单思路,利用的是DMA2的DAC1的专用通道来将数组里的波形数据放到DAC1的寄存器里。定时器的TIM_SelectOutputTrigger来控制DAC的输出频率(DAC_InitType.DAC_Trigger = DAC_Trigger_T2_TRGO; )1.DAC1的初始化void Dac2_Init(){ GPIO_InitTypeDef GPIO_InitStructure; DAC_InitTypeDef DAC_
2022-04-10 15:04:43
3773
原创 正则表达式的test()多次调用
红叶何时落水问题 let a = 'a.so'; let reg = /.so/g; console.log( a,reg.test(a)); console.log( a,reg.test(a));//输出 17:09:29.940 a.so true at IF_bug.html:43 17:09:29.942 a.so false at IF_bug.html:44同一个变量a,两次匹配,结果却不同;这是为何?原因在于Re
2022-03-22 17:18:14
616
原创 如何缓存函数计算结果?
红叶何时落水需求场景在请求数据时,我们免不了要对数据进行一些修饰,加一些前缀,组合一下字符串;那么当我们在不同页面请求同一组数据时,又不愿页面间传递参数时,我们便可以对数据处理函数进行修饰。function mathed(str) { console.log('math'); return str + 'd';}function cached(fn) { var cache = Object.create(null); return (function cachedFn(s
2022-03-14 17:48:29
428
原创 组件-原生组件webcomponent
红叶何时落水组件化开发有利于代码的复用这里是原生组件的思想与构建首先,代码复用,就意味着会有一个模板,这个模板已经实现了基础功能,我们只需要调用它即可;那么一个组件由两部分构成,视图与逻辑。视图模板视图的模板原生提供的方法为<template>标签,里面的内容可以被其他页面使用; <template id="new_message"> <style> .main { w
2022-02-25 11:33:08
787
原创 手写Promise(1)
红叶何时落水很多时候我们希望程序可以等待某个耗时操作执行完成后,获取到他所返回信息,以便进行下一步的操作。但JS 作为单线程语言,并没有提供这种操作。利用回调函数又不利于后期维护,毕竟我们将函数写到回调函数中;如果,回调次数多的话,一层一层的添加,可读性就太差了。那么,可以利用Promise来解决这个问题;首先,建立一个公共的,谁都可以建立的类function Pro(fn = (() => { })) { this.state = 0; this.the
2022-02-23 10:57:31
353
原创 微信小程序背景图片真机不显示问题
问题描述 :开发者工具上<view style="background-image: url(图片路径);"></view>可以正常显示但是真机预览,不显示。解决方式:1.图片路径以http开头时,可以显示。所以,可以将图片放到微信云端,直接引用云id;没钱的话,把多张图片放到一个压缩包里,压缩包放到云端储存;然后下载下来,保存到本地,再从本地引用即可;(实测,安卓没啥问题,苹果还是不显示)2.将图片路径转化为Base64格式 Backgrou
2022-02-22 10:47:42
5892
4
原创 微信小程序服务器文件下载及解压
对方法做个备份方法一 下载及解压代码第一个参数为下载地址,将下载地址以数组的方式传入,可以下载多个文件。第二个参数为想要将下载并解压好的文件保存到的本地路径。第三个参数为是不是微信云端路径,是的话为true;const wxP = require('../utils/util.js');Download_zip: function (load_path = [], target_path = '', if_cloud = false) { const fs = wx.
2022-02-22 10:30:30
2078
RSIC-V单周期CPU设计代码,实现了17种指令
2022-12-15
stm32核心板IO口定时器模拟串口
2022-09-03
stm32 校赛第三部分 可以检测三种波形,绘制特性曲线
2022-05-20
stm32 校赛第二部分 相位差的测量,并将相位差为自变量,输出相应的正弦波
2022-05-20
嵌入式 stm32实现校赛第一部分,信号发生器
2022-05-20
stm32波形生成器,可同时产生三个独立信号
2022-04-11
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人