- 博客(125)
- 收藏
- 关注
原创 C 陷阱与缺陷 —— Chapter tree 语义陷阱之非数组指针
对于 char *r;可以表示指向一个 char 类型的字符指针,或者指向一个字符串。在不知道 r 字符串的大小的情况下,只能使用 melloc 函数进行动态内存分配。/*使用完 r 这段空间必须释放*/r){ /* 内存分配失败 */
2025-03-16 16:52:06
129
原创 C 陷阱与缺陷 —— Chapter tree 语义陷阱之指针和数组
*等效于 *(*(calendar + month ) + day) = 0;指针可以指向各种数据类型的数据,通过指针可以对此类型结构的成员进行操作,如果一个指针指向一个数组,可以通过指针加减控制指向的数组位置,数组名代表指向数组第一个元素的指针,可以采用 int a[20];int *p = a;的方法使得 p 指针指向 a 数组。/* monthp 是一个指向具有 31 个子数组的二维数组指针*/
2025-03-16 16:24:27
128
原创 C 陷阱与缺陷 —— Chapter two 语法陷阱
对于一个变量的声明,将其变成一个一个类型的转换符,只需要把声明中的变量名和声明末尾的分号去掉,再将剩余部分用一个括号整个括起来即可。fp 是一个函数指针,*fp 是该指针指向的函数,(*fp)() 是该函数的调用方式。其中 (void (*)()) 将 0 转化为 void(*)() (返回值为 void 的函数指针类型)类型。对于目标执行执行 0 地址的函数,其代码为 (*(void (*)())0)();signal 函数函数的返回值是一个指向调用前的用户定义信号处理函数的指针。
2025-01-12 19:19:32
325
原创 C 陷阱与缺陷 —— Chapter one 词法陷阱
与 char hello[] = {'H','e','l','l','o',' ','w','o','r','l','d','\n',0};程序将程序分解为符号遵循如下逻辑:从左到右读取一个能够最初一个有意义符号的最长的字符串作为一个符号,其中的字符串不能含有空格。y = x/*p /* p 指向除数 */;,该数组被双引号之间的字符和一个额外的二进制为 0 的字符 ‘\0’ 初始化。改进:y = x / *p;y = x/(*p);整型常量的第一个数字是 0 则这个数是八进制数。== 是比较是否相等。
2025-01-12 15:18:58
760
原创 ESP8266 Ubuntu 安装
参考:https://docs.espressif.com/projects/esp8266-rtos-sdk/en/latest/get-started/linux-setup.htmlhttp://aiclouds3.0-docs.aithinker.com/#/2.device/configuration_linux?
2024-12-16 11:44:32
627
原创 树莓派 PICO RP2040 MACOS 使用
这里会提示报错:ln: /bin/picotool: Operation not permitted。放在 usr/local/bin 下面可以全局使用。
2024-12-08 14:50:43
474
原创 C 语言链接文件中的 PROVIDE 关键字
代码当中的 extern systimer_dev_t SYSTIMER;通过打印结果推断出 PROVIDE 实际上是指定了 SYSTIMER 这个结构体的首地址。在 esp32c3.peripherals.ld 中 PROVIDE ( SYSTIMER = 0x60023000 );
2024-11-28 19:59:05
254
原创 C 语言函数指针 —— 实现程序分层
通过函数指针实现上层与底层应用的分层,将有助于代码更便于 Debug。在 main.c 中只做最简单的调用,有助于条理清晰。
2024-11-08 22:23:27
255
原创 Python 类的继承
在 electric_car.py 中通过 from car import Car,即可在 electric_car.py 中导入 Car 类。__init__() 方法在类的创建的实例化过程中会被调用(特殊方法,使用时要检查好拼写)。super() 后的 __init__ 的属性交给父类进行初始化,子类无需初始化,继承父类的这些属性。类里面包含类的属性,__init__ ()方法和类的方法。moudle:模块,和实例名和函数都是小写加下划线的方法表示。super() 方法可以使得子类可以调用父类的方法。
2024-09-20 22:11:40
308
1
原创 S32K144 EB 和 MCAL 安装
需要把 P1 的 Plugins 和 AUTOSAR\S32K14X_MCAL4_3_RTM_1_0_0\S32K14X_MCAL4_3_RTM_1_0_0_Sample_Application\eclipse\plugins 放到 AUTOSAR\S32K14X_MCAL4_3_RTM_1_0_0\eclipse\plugins 下面,并复制所以的 Plugins 到 C:\EB\tresos\plugins 下面,然后重启 EB。修改 launch.bat。
2024-05-14 23:21:40
985
原创 i.MX 6ULL 裸机 IAR 环境安装
2. debug 时需要修改每个工程下的 ddr_init.jlinkscript,参考链接。1. 在 SDK 的 core_ca7.h 加上。二. 使用最新版本的 IAR,需要修改 SDK。一. IAR 的安装请自行搜索。
2024-05-06 22:40:15
321
原创 Jlink+OpenOCD+STM32 Vscode 下载和调试环境搭建
需要手动下载 x86_64-8.1.0-release-posix-seh-rt_v6-rev0.7z 版本的软件包,并添加环境变量。需要修改 Vscode 工程 .vscode 路径下的 launch.json 文件。对于 openocd,需要使用 Zadig 工具安装 Jlink 驱动。并将 mingw32-make.exe 名字改成 make.exe。对于 Mingw 的安装比较困难,国内的网无法正常下载组件,
2024-02-18 11:51:58
2383
原创 计算机中的数据运算
由于同样位数的机器数的正数与负数的相加不会产出溢出,参数溢出的可能是正数与正数的相加或者负数与负数相加;方法二:两位符号位判断溢出,正常情况下两个符号位是一样的,0 表示正数,1 表示负数。方法一:可以通过最高有效位的进位 异或 符号位进行判断,如果为 1 则为溢出。,计算数的位数决定了可以存放的数据的大小,加减产生的数据的大小要在机器数可以表示的范围之内。连同符号位一起相加,符号位产生的进位自然丢掉,这里要特别注意。右移:绝对值缩小为原来的二分之一。放上计算机中的数据的表示方法。
2024-01-06 22:50:19
519
原创 stm32f407 bm -> freertos
在 USER 下多了 FreeRTOSConfig.h 文件,和多了需要用到的一些外设驱动。对比添加 os 文件到 bm 工程中,以及 C/C++ .h 文件的包含。② 修改使用 rtos 的 SysTick_Handler。port.c 要选择 RVDS 文件夹下的 ARM_CM4F 文件中的。工程结构上,os 版本多了 FreeRTOS 文件夹。① 去掉 PendSV_Handler 中断服务函数。stm32f4xx_it.c 文件 bm 与 rtos 对比。
2024-01-01 17:33:01
487
原创 git 使用
git diff HEAD~n HEAD 比较之前的版本和当前版本的差异,n 为数字,代表历史版本,1 版本可以不加。在工作区删除文件后,暂存区的文件并没有被删除,如果想要删除暂存区的文件需要执行一下 git add 操作。git reset --mixed:版本回退到某一版本,工作区文件保留,暂存区不保留。git rm 文件:删除工作区和暂存区的文件,重新提交后,将从仓库中删除此文件。git status:获取仓库状态,未提交到暂存区的文件为红色,提交的为绿色。
2023-12-31 22:02:04
611
原创 FreeRTOS 任务间的通信
优先级继承可以减少优先级翻转的危害:把低优先级任务临时提高到高优先级任务的级别。的数据结构,队列可以在任务与任务间、中断和任务间传递信息,实现了任务接收来自其他任务或中断的。优先级翻转问题:高任务抢占低任务无法获取互斥量而进入阻塞状态,即优先级翻转。可以进行逻辑与或,实现一对多,多对多的同步。递归互斥量:一个任务可独占互斥量的次数。由于信号量会累加,所以不可以多对多的通信。用于任务间的同步通信,触发任务运行。事件可以被任意的任务读写。信号量:semphr,基于消息队列实现。互斥量: 特殊的二值信号量。
2023-12-24 11:52:37
320
原创 ARM 汇编语言知识积累
由于 ARM 是两级流水线,可以理解为正在执行的指令有两条 32 位的指令(2*32 bit = 8 Byte 的指令长度),即。LR:即 R14,链接指针,保存未跳转之前的程序的下一条指令的地址,由 CPU 硬件实现。自动保存进入异常前的 CPSR 的值,以便异常返回后恢复异常发生时的工作状态。和 SPSR,arm 进入异常模式后,PC:R15,程序计数器,保存当前。SP: 即 R13,栈指针,
2023-12-24 10:50:13
671
原创 Klipper seria.c 文件代码分析
程序只有安照正确的逻辑编写 API 函数,Klipper 下位机驱动才可以适配上层的应用层代码,对于 serial.c 程序,核心是理解中断发送和接收的条件,在应用代码的基础上编写发送和接收函数。;) {if (!// Output fifo full - enable tx irq,有数据需要发送,使能发送中断break;void//获取中断状态if (status == 0x04) //接收中断。
2023-07-31 18:52:53
1203
原创 RT1010 PWM 组成配置和 PWMX 的使用
本篇博文将着眼于 i.MX RT1010 内部的 eFlexPWM,介绍其各个功能模块,以及 PWM 产生的原理。
2023-05-02 19:01:33
1205
4
原创 两层板 PCB Layout 注意实现 -- Layout 检查清单和创想浅记
确定电路可行性,这个操作一般是要在 Layout 之前进行的。 对单片机引脚进行功能划分,定义接口。 接口要适应 Layout 便利性或规范要求。 接口预留参考电平和地,方便器件供电。 对引脚定义列表格进行描述。 通过实验进行模拟仿真: 采用洞洞板或面包板用实际器件进行模拟。 通过Multisim 或 Simulink 等工具进行模拟。 通过 FPGA 使用 verilog 进行数字逻辑设计,通过modelsim 进行仿真验证。 电路功耗预算,根据
2023-04-07 21:43:29
562
原创 DCDC - 开关技术概览
电力场效应晶体管(Mental Oxide Semiconductor Field Effect Transistor, 翻译是 金属氧化物半导体场效应晶体管 MOSFET)高频脉冲频率调制(Pulse Frequency modulation, PFM)高频脉冲宽度调制(Pulse Width Modulation, PWM)两级式(全桥变换器) DC/AC + AC/DC。AC/DC PWM 整流、不可控整流(工频)、相控整流(工频)单级式(降压变换器) DC/DC。二极管(diode)
2023-03-26 12:32:04
410
原创 FreeRTOS-编程风格
- unsigned short int , 当 FreeRTOSConfig.h 宏 configUSE_16_BIT_TICKS 为 1 时为 16 位。-- unsigned int , 当 FreeRTOSConfig.h 宏 configUSE_16_BIT_TICKS 为 0 时为 32 位。portBASE_TYPE : 由处理器的架构决定多少位。private -- prv : 私有函数前缀。数据结构、任务句柄、队列句柄 -- x。前缀 -- 表明宏所在头文件。
2023-03-19 22:26:50
585
原创 NPN 与 PNP
NPN 基极高电平导通,PNP 低电平导通,开关可以放大电流,也可以只是开关。PNP 的特性与 NPN 相反,NPN 三极管可以用做电平转换。
2023-01-16 20:39:57
2779
原创 C语言高级-C内核
C有操作系统静态内存分配,动态内存分配使用API,例如mallocfree接口。对于单片机而言,C语言程序内存是用来存储可变数据(变量)的,常量存储在flash当中。本博客参考《嵌入式Linux与物联网软件开发C语言内核深度解析》C++new对象分配内存,delete删除对象。C无操作系统通过编译器提供的变量名来管理内存。Java/C#虚拟机。........................
2022-07-15 17:05:11
837
原创 C语言链表
1.定义结构体,作为结点使用struct Grade_Info { int score; struct Grade_Info *next; };typedef struct Grade_Info NODE;2.创建链表 NODE *Greate_LinkList()1.新建头结点,尾结点 head=(NODE *)malloc(sizeof(NODE)); if(head==NULL) //创建失败 {
2022-05-09 14:02:21
486
原创 C语言简单算法
//不使用第三个变量,交换两个数的值#include <stdio.h>#include <stdlib.h>int main(void){ //求和法 int a=10, b=9; printf("a=%d,b=%d\n", a, b); a = a + b; b = a - b; a = a - b; printf("a=%d,b=%d\n", a, b); //求差法 int c, d; c = 10; d = 12; printf("c=%.
2022-05-04 16:36:04
929
原创 Python-matplotlib.pyplot
画函数import matplotlib.pyplot as pltimport numpy as npx=np.arange(-2*np.pi,4*np.pi,0.01)a=np.sqrt(2)*(np.exp(-x))y=a*np.cos(x+np.pi/4)fig, ax = plt.subplots(figsize=(15, 15)) ax.spines['bottom'].set_position(('data',0)) ax.spines['left'].set_po
2022-04-26 18:16:24
1009
原创 Qt学习合集
QT-QWidgt-QThread_JoYER_cc的博客-优快云博客Qt-QString-字符集_JoYER_cc的博客-优快云博客Qt-QLabel_JoYER_cc的博客-优快云博客Qt-QLabel_JoYER_cc的博客-优快云博客Qt-QPushButton_JoYER_cc的博客-优快云博客Qt-QLineEdit_JoYER_cc的博客-优快云博客Qt-QObjet结点_JoYER_cc的博客-优快云博客QT-Layout_JoYER_cc的博客-C
2022-04-22 15:18:49
153
原创 Qt-Xps项目
ui_xps.h/********************************************************************************** Form generated from reading UI file 'xps.ui'**** Created by: Qt User Interface Compiler version 5.14.2**** WARNING! All changes made in this file will be lo
2022-04-22 15:11:03
495
原创 Qt-QPainter
画图,处理图像testqimage.cpp#include "testqimage.h"#include <QPainter>TestQImage::TestQImage(QWidget* parent) : QWidget(parent){ ui.setupUi(this); img = QImage(1280, 720, QImage::Format_RGBA8888); //填入颜色 img.fill(QColor(255, 0, 0, 200)); //遍历
2022-04-21 21:55:41
261
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人