- 博客(48)
- 资源 (4)
- 收藏
- 关注
原创 simulink MBD 嵌入式软件 开发环境搭建
在生成嵌入式软件中,必须配置环境为离散求解器,结合当前仿真算法执行的周期,修改离散时间,比如图中配置的1e-5,就是代表当前算法执行的周期为50us。在上方工具栏建模标签卡下打开模型设置,也可按快捷键ctrl+E。编译模型 快捷键Ctrl+D。生成代码 快捷键Ctrl+B。
2025-03-31 09:48:18
208
原创 MDK优化等级对浮点运算效率的影响
在支持浮点运算的MCU(如STM32的Cortex-M4或Cortex-M7系列)上,执行浮点运算的算法时,MDK编译器的优化等级配置为(通常是O1或O2)和(无优化)会对代码的执行效率产生显著影响。
2025-03-24 13:04:01
257
原创 simulink离散传递函数得到差分方程并用C语言实现
G(s)=s2+217ss2+384s+8989G(s) = \frac{s^2+217s}{s^2+384s+8989}G(s)=s2+384s+8989s2+217s下面是matlab脚本代码2.2 matlab命令行显示结果运行上面脚本代码后,matlab命令行显示的结果如下图,得到离散传递函数为H(z)=0.9282z2−1.6747z+0.7465z2−1.6709z+0.6785H(z) = \frac{0.9282z^2-1.6747z+0.7465}{z^2-1.6709z+0
2024-12-19 17:48:00
969
原创 simulink传递函数的离散化
c2d函数是MATLAB中用于离散化连续时间系统的主要工具。离散化方法有多种选择,如ZOHFOHTustin和匹配法等。离散化后的系统可以通过tfdata提取分子和分母系数。离散化是数字控制系统和数字信号处理中的重要步骤,用于将连续时间模型转换为离散时间模型。
2024-12-18 10:38:04
1745
原创 Simulink 中的传递函数模块Transfer Function
在 Simulink 的传递函数模块中,Numerator和是通过输入多项式的系数来定义系统的动态特性。系数必须按降幂排列,并用逗号分隔。通过正确填写这些系数,可以精确地模拟和分析线性系统的行为,进一步进行系统控制设计、优化和仿真。
2024-12-17 17:43:33
4687
3
原创 FreeRTOS卡在uxListRemove函数中的“pxItemToRemove-pxNext-pxPrevious = pxItemToRemove-pxPrevious”
代码运行后卡死在:uxListRemove函数中的“pxItemToRemove-pxNext-pxPrevious = pxItemToRemove-pxPrevious”主要原因是 在FreeRTOS系统还未正常运行时,执行了FreeRTOS的API调度逻辑,从而导致的卡死。只有启动了函数之后才能调用FreeRTOS的API。
2024-11-29 09:56:57
187
原创 指针实现结构体成员变量的偏移访问与获取结构体大小
因此,尽管我们在示例中使用了char类型的指针来访问和操作结构体中的char类型成员变量,但其自增操作的长度并不是与结构体成员变量的类型直接相关的,而是根据指针所指向的数据类型的大小来确定的。对于char类型的指针,无论指针所指向的数据类型是什么,自增操作都会使得指针向后移动一个字节的大小,因为char类型的大小就是1个字节。在上述代码中指针的自增操作ptr++并不是与指针所指向的数据类型直接相关的,而是与指针所指向的内存单元的大小有关。指针自增操作会使指针指向下一个相邻的内存单元,
2023-11-13 10:39:16
833
原创 FreeRTOS-任务通知
参数表示进入等待状态前要清除的任务通知位。它是一个按位掩码参数,可以指定多个任务通知位。当任务调用 xTaskNotifyWait() 进入等待状态时,如果任务通知中的任何一位被设置为 1,那么它们将在进入等待前被清除。这样做可以确保任务在等待状态下不会立即返回,而是等待新的任务通知事件的发生。参数表示退出等待状态时要清除的任务通知位。它是一个按位掩码参数,可以指定多个任务通知位。当任务从等待状态返回时,如果任务通知中的任何一位被设置为 1,那么它们将在返回前被清除。
2023-11-02 17:21:18
491
2
原创 MCU HardFault_Handler调试方法
1.在MDK的DEBUG模式下,当程序出现跑飞后,确定卡死在HardFault_Handler中断处2. 通过Register窗口读取LR寄存器的值来确定当前系统使用堆栈是MSP还是PSP如下图所示,当前程序使用的是PSP堆栈寄存器。
2023-11-01 14:19:47
1336
原创 210 裸机程序烧录
选择烧录文件的路径点击START,烧录成功有以下弹窗,失败则格式化SD卡,重试。将SD卡插入电脑,打开程序 x210_Fusing_Tool.exe。开发板的裸机程序烧录地址为。选择烧录文件的路径进行烧录。软件,配置烧录地址为。
2023-03-02 19:35:58
526
原创 汇编指令集
指令是CPU机器指令的助记符,编译后会得到一串二进制机器码,由CPU执行伪指令本质上不是指令,它是编译器环境提供用来指导编译过程,编译后伪指令不会生成机器码伪指令的意义在于指导编译过程。
2023-02-27 14:40:21
1530
原创 Gitee与Git的使用
在.ssh目录下 有三个文件,其中id_rsa.pub 就是需要配置到Gitee的秘钥。从 ssh-rsa 开始 到邮箱结束 将整个字符串复制到剪切板,注意不要有空格。根据命令行的提示键入“Enter” ,直到生成秘钥成功。输入命令 xxx代表Gitee绑定的邮箱,如果秘钥没有配置成功,则不会有这个文件夹。
2023-02-22 18:22:56
710
原创 linux应用编程-多线程
的线程可以在终止时释放资源,这样创建它的线程就不用通过pthread_join来等待接收。的线程必须在创建它的线程中使用。线程的API都在头文件。回收,否则会有资源未释放。
2023-01-13 15:55:52
302
原创 linux应用编程-文件操作
0、1、2这三个fd被标准输入、输出、错误通道占用,用close(1)关闭标准输出,使用dup重新分配得到1这个fd,就把oldfd打开的这个文件和1这个标准输出通道给绑定起来了。这就叫标准输出的重定位。lseek函数是一个API ,在linux中 用 命令 man 2查询。
2023-01-11 11:51:48
459
原创 C++ STL 容器类和迭代器
迭代器就是能通过移动来遍历处理的一种机制。每个容器都有自己专属的迭代器。迭代器就是C++为我们设计的一个高层次的“指针”,高层指针是面向容器中的元素的。
2023-01-06 10:49:32
557
原创 ubuntu挂载samba
映射Ubuntu 的 ip 地址 ,输入对应的Samba账号和密码。在smb.conf 文件内部最后加上。通过ifconfig查看ip地址。需要和配置文件中相对应。
2023-01-05 18:46:29
4731
1
原创 C++模板
虽然写在class内,但仍然是友元,而不是member function不能通过类创建的对象去访问private :T age;public ://构造函数 People() {};};//初始化列表 friend void print(const People < T > & pn) {} };(1) 声明时函数名加后缀,而定义时不用加(2) 需要class和friend function的2个前置声明。
2023-01-03 14:50:33
411
原创 C++ 继承和多态
(1) 继承是C++源生支持的一种语法特性,是C++面向对象的一种表现(2) 继承特性可以让派生类“瞬间”拥有基类的所有(当然还得考虑权限)属性和方法(3) 继承本质上是为了代码复用(4) 类在C++编译器的内部可以理解为结构体,派生类是由基类成员叠加派生类新成员得到的父类的public成员 在子类中是public的父类的protected成员 在子类中是protected的父类的private成员 在子类中是private的,权限进一步降低,只能通过父类的public方法间接访问。
2022-12-30 10:02:44
1374
1
原创 C++封装和访问权限
(3) C语言中struct无构造函数概念,所以struct中需要用到动态内存时必须在定义struct变量后再次单独申请和释放,而这些操作都需要程序员手工完成。(1) 深拷贝,深的意思就是不止给指针变量本身分配内存一份,也给指针指向的空间再分配内存(如果有需要还要复制内存内的值)一份。(4) 继承特性上,C中不支持(只能通过结构体包含来间接实现),而C++源生支持,且struct和class可以互相继承。在实际项目中,一般一个cpp和一个hpp文件配对,描述一个class,class的名字和文件名相同的。
2022-12-28 14:36:50
701
原创 FreeRTOS移植
官网下载源码文件FreeRTOSv202112.00,解压后内容为如下图移植到MDK所需要的源码文件路径为:FreeRTOSv202112.00\FreeRTOS\Source在基础工程模板内,新建目录树分支FreeRTOS_CORE和FreeRTOS_PORTABLE在FreeRTOS_CORE分支内添加 \FreeRTOSv202112.00\FreeRTOS\Source 目录下的所有c文件FreeRTOSv202112.00\FreeRTOS\Source\portable\MemMang 目录下
2022-12-05 17:32:50
707
原创 卡尔曼滤波算法
typedef struct { float startValue; //k-1时刻的滤波值,即是k-1时刻的值 float kalmanGain; //Kalamn增益 float A; //x(n)=A*x(n-1)+u(n),u(n)~N(0,Q) float paraH; //z(n)=H*x(n)+w(n),w(n)~N(0,R) float Q; //预测过程噪声偏差的方差 float R;
2022-02-10 14:48:25
1194
原创 蓝牙钥匙解决方案 BLE RSSI 测距
1.理论公式RSSI计算距离的公式原理为d = 10 ^ ( RSSI – A ) / ( 10 * n )a) d为车辆与被计算目标节点之间的距离数值b) RSSI为车辆与被计算目标节点之间的RSSI数值c) A为距离车辆1m处接收到的RSSI数值d) n为环境衰减因子2.RSSI特性在实际的使用环境中,可影响RSSI数值的因素有当前车辆的停车环境、温度、手机硬...
2022-02-10 14:12:04
7455
5
原创 C语言结构体封装函数指针
C语言结构体封装函数指针C语言结构体(Struct)从本质上讲是一种自定义的数据类型,只不过这种数据类型比较复杂,是由 int、char、float 等基本类型组成的。例如,在校学生有姓名、年龄、身高、成绩等属性,学了结构体后,我们就不需要再定义多个变量了,将它们都放到结构体中即可,如图所示:API封装方法那么我们怎么用C语言的结构体来封装函数API呢?首先看看C++和C的区别及方法:C++类C++语言类中可以封装函数,体现了模块操做的整体性,下面代码便是C++语言对某个函数的封装,这
2021-02-25 17:08:44
2141
原创 C_单链表的使用(增、删、改、查)
一、链表节点的创建和访问1.构建一个链表节点结构体// 构建一个链表的节点struct node{ int data; // 有效数据 struct node *pNext; // 指向下一个节点的指针};2.定义头指针用于对链表节点的访问和修改struct node *pHeader = NULL;// 定义头指针3.创建一个新的节点与前一个节点关联起来struct node *p = (struct node *)malloc(
2020-08-17 09:46:47
456
2
原创 strtok函数分割字符串的使用
一、函数功能C 库函数char *strtok(char *str, const char *delim)分解字符串str为一组字符串,delim为分隔符。二、函数解析1.函数原型char *strtok(char *str, const char *delim)2.参数char *str 要被分割的目标字符串char *delim 要分割目标字符串的分隔符,必须被包含于目标字符串中3.返回值函数返回被分解的第一个子字符串,如果没有可检索的字符...
2020-07-09 16:17:05
372
原创 C++/C 常用库函数-stdlib.h
1 double atof(const char *str)//把参数 str 所指向的字符串转换为一个浮点数(类型为 double 型)。2 int atoi(const char *str)//把参数 str 所指向的字符串转换为一个整数(类型为 int 型)。3 long int atol(const char *str)//把参数 str 所指向的字符串转换为一个长整数(类型为 long int 型)。4 double strtod(const char *str, char **en.
2020-06-11 18:04:59
444
原创 C++/C 常用库函数-string.h
1 void *memchr(const void *str, int c, size_t n)//在参数 str 所指向的字符串的前 n 个字节中搜索第一次出现字符 c(一个无符号字符)的位置。2 int memcmp(const void *str1, const void *str2, size_t n)//把 str1 和 str2 的前 n 个字节进行比较。3 void *memcpy(void *dest, const void *src, size_t n)//从 src 复...
2020-06-11 17:52:03
255
原创 strstr函数截取字符串的使用
一、提纲对字符串数据的处理,是在嵌入式上常用的一项基础操作,本文介绍如何通过strstr函数截取字符串二、strstr解析1.函数原型char *strstr(const char *haystack, const char *needle)2.函数参数haystack-- 要被检索的目标 C 字符串。needle-- 在 haystack 字符串内需要搜索的小字符串。3.返回值该函数返回在 haystack 中第一次出现 needle 字符串的位置,如果未找到则返..
2020-05-26 11:20:28
1612
原创 UTF-8与GBK字符之间的转换
一、本文提纲在嵌入式产品中,难免会遇到由服务器或者APP端推送的消息内容,而大多数推送消息内容的字符编码都为UTF-8,底层硬件需要将推送的消息送到LCD或者OLED等屏幕上进行显示,此时就涉及到一个编码转换的内容,因为硬件不能直接将UTF-8编码的字符进行显示,必须经过算法将UTF-8编码对照Unicode编码转换为GBK汉字编码之后才能显示,而本文介绍从外部FLASH中读取Unicode编码和GBK字符编码,将UTF-8字符转换为GBK字符。二、UTF-8转换为GBK字符的原理1.UTF-8
2020-05-26 10:20:57
25841
12
Datasheet-MLX90614-中文-数据手册-rev008.pdf
2019-08-07
STM32驱动传感器应用案例适合入门
2019-02-23
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人