自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(129)
  • 资源 (8)
  • 收藏
  • 关注

原创 STM32移植LVGL图形库

解决方法:在KEIL中Options for Target 'Flash' -> C/C++ -> Misc Controls添加“--locale=english”。”选项中填入文字编码范围,以确定字体的转换范围。,数字、拉丁字母、标点符号的编码范围是。当然也可以不写,就是你要生成的文字内容。1、问题1:中文字符keil编译错误。问题2:LVGL中显示中文字符。

2023-12-22 15:25:51 795

原创 使用adb安装app

adb install命令的完整格式是:adb install [-l] [-t] [-r] [-s] ,其中-l表示锁定应用,-t表示安装调试版apk,-r表示重新安装应用并保留数据,-s表示安装到SD卡而不是内部存储。上面有提到,如果当设备上已有目标应用的情况下在系统上安装会失败,在安卓高系统的设备上(具体应该是安卓10左右的系统,可以安装的时候试一下)是允许直接覆盖安装的。adb install -r D:\test.apk # 安装指令,D:\test.apk为APK路径。(2)覆盖安装:[-r]

2023-12-18 10:50:50 717

原创 nRF52832 SDK15.3.0 基于ble_app_uart demo FreeRTOS移植

1,把nRF5_SDK_15.3.0_59ac345\examples\ble_peripheral\ble_app_hrs_freertos下面的config文件夹拷贝到nRF5_SDK_15.3.0_59ac345\examples\ble_peripheral\ble_app_uart\pca10040\s132\arm5_no_packs目录下(其实这里可以拷贝任何目录下,只需要配置好keil的编译应用目录就OK)。3,再然后就是main函数的修改了,这个比较简单,只需要按照demo改就可以啦!

2023-10-25 17:34:47 373

原创 RK3568 SPI子系统–oled屏

参见野火的资料。

2023-10-09 11:58:47 540

原创 RK3568 USB 移植指南

见文件《Rockchip_RK356x_Developer_Guide_USB_CN》。

2023-09-27 11:40:58 98

转载 USB控制器与phy的关系

一个完整的usb 系统通信流程如下图所示:整个系统大致分为三层。host客户软件:管理接口设备usb 系统软件:管理设备USB 总线接口(HDC):管理usb 帧数据devicefunction :管理接口usb 逻辑设备:管理端点USB 总线接口(UDC):管理usb 帧数据设备端:function -> usb logical device -> SIE那么,usb framed 数据到底是怎么产生的?第一种方式:纯软件行为,软件添加;

2023-09-27 09:49:20 154

原创 power supply是如何上报电池信息

https://www.cnblogs.com/linhaostudy/p/14998123.html

2023-09-22 16:34:16 48

原创 linux hexdump命令调试event驱动

busybox hexdump /dev/input/event2 查看对应节点的输出。cat /proc/bus/input/devices 查看设备对应的节点。

2023-09-18 17:07:48 81

原创 linux驱动-gpio子系统

https://www.cnblogs.com/lizhuming/p/14652611.html

2023-09-18 15:09:04 35

原创 安规耐压漏电流

一般耐压测试的测试电压如下:工作电压在42V到1000V之间的,测试电压是工作电压的两倍加上1000V。针对制造商或是测试实验室的测试人员安全, 在欧洲早已行之多年,不论是电子电器、资讯科技产品、家用电器、机械工具或其他设备的制造商及测试人员, 在各项的安规法规里都有章节去规定,不论是UL、 IEC、EN都有,其中内容包括测试区域标示(人员位置、仪器位置、DUT位置)、设备标示(清楚标示"危险"或是测试中的项目)、设备工作台等相关设施的接地状态、各测试设备的电气绝缘能力(IEC 61010)。

2023-09-15 16:55:55 127

原创 Linux serial ttyS

serial流程。

2023-09-14 10:13:48 51

原创 STM32cubeMX工程软件模拟IIC

【代码】STM32cubeMX工程软件模拟IIC。

2023-09-04 16:09:54 198

原创 NRF52832 MTU 设置

ble_stack_init 协议栈初始化---->nrf_sdh_ble_default_cfg_set 蓝牙默认属性配置,包括max mtu.----->gatt_init GATT层配置------>nrf_ble_gatt_init 注册GATT event(ble连接后,mtu的修改),包括NRF_BLE_GATT_EVT_ATT_MTU_UPDATED---->link_init 初始化连接参数------>nrf_ble_gatt_att_mtu_periph_set 从机mtu设置。

2023-07-17 16:01:49 206

原创 血氧计算(SpO2)

血压计算公式也比较简单,这里MAX30102是一路红光,一路红外。只分别算出红光的交流除以红光的直流即: ACred/DCred,和红外的交流除以红外的直流分量即:ACired/DCired。然后两者再相除得到R。

2023-07-11 10:14:17 874

原创 「 localtime()函数:获取当前时间和日期并转换为本地时间」2023年5月24日

time(&now);#include //C语言的头文件   #include //C语言的I/Olinux下用time(NULL)函数和localtime()获取当前时间李政的博客 2万+time();

2023-07-11 10:12:44 1021

原创 NRF52832空中升级DFU

生成公钥文件public_key.c,将文件名修改为:dfu_public_key.c,复制dfu_public_key.c文件到dfu工程,dfu\dfu_req_handling\。打开ble_peripheral文件夹下的应用工程,重新编译,生成hex文件,将文件名改为:app.hex,拷贝到key文件夹下。打开dfu下的boot工程,重新编译,生成hex文件,将文件名改为:boot.hex,拷贝到key 文件夹下。生成3个文件的合并文件output3to1.hex,用于下步合并文件的制作。

2023-06-05 17:33:31 824 1

原创 NBIOT PSM模式简介

当UE与基站出现RRC重配置失败、切换失败、无线链路失败和完整性保护失败等失败时,将发起RRC Release过程,将UE转为RRC_IDLE或RRC_INACTIVE状态。释放RRC连接,包括释放已建立的无线电承载以及所有无线资源,或者仅在建立SRB2,同时伴随有至少一个DRB时暂停RRC连接,包括暂停已建立的无线承载。PSM:休眠状态,此时模块与网络断开,无法接收网络的下行数据,模块(BC26)内部除RTC外都断电停止运行,此时的功耗最低,可达到uA级。:寻呼周期,在此期间接收网络寻呼。

2023-03-28 14:29:46 811 1

原创 聊聊内存那些事(基于单片机系统)

为什么Rom中还要有RW,因为掉电后RAM中所有的数据都丢失了,每次上电RAM中的数据是被程序赋值的,每次这些固定的值就是存储在ROM中的,为什么不包含ZI段呢,是因为ZI数据都是0,没必要包含,只要查询运行之前将ZI数据所在的区域一律清零即可。当释放其中一个奇数块后,内存就可以达到需要分配的连续块大小了,所以分配的空间使用了p[2]、 p[3]、p[4]的空间。函数的参数是需要分配的空间字节大小,返回是一个void*类型的指针,该指针指向分配空间的首地址,void*类型指针可以转换为任意的其它类型指针。

2023-03-06 15:10:02 2080 1

原创 C语言枚举 变量自动修改为0的问题

有时候遇到一个奇怪的问题,C语言枚举变量自动修改为0,解决办法:枚举定义变量的时候初始化一下,就可以了。

2023-03-03 09:17:07 201

原创 大数组导致程序卡死

考虑在VC的Project setting 的link选项卡中把栈开大一些(Windows中默认是4M),相应的如果在keil中将栈设置大些也可以解决该问题。将数组变量声明成全局变量或者static,这两种变量不压栈,想开多大都可以。

2023-02-27 09:38:10 419

原创 C语言 匿名联合体和匿名结构体

尤其是多层继承时,A结构体继承与B结构体、B结构体又继承C结构体…最后嵌入式开发常见的几个C编译器比如IAR MDK GCC等都是支持的匿名联合体和结构体的,如果不支持可以粘贴下面的代码到自己的系统头文件中,就可以让你的匿名代码在意思几个环境下获得支持。如上所示,如果已经通过 datagram.data 接收到数据,想要从数据中提取传感器x轴数据,则只要通过 datagram.packet.x 就可以获取x轴数据。匿名联合体和匿名结构体顾名思义,就是没有名字的联合体和结构体,没有名字哪怎么用?

2023-02-02 14:42:16 1693

原创 内存对齐 #pragma pack()

pragma pack(n) //设置编辑器按照n个字节对齐,n可以取值1,2,4,8,16。#pragma pack(push) //将当前的对齐字节数压入栈顶,不改变对齐字节数。#pragma pack(push,n) //将当前的对齐字节数压入栈顶,并按照n字节对齐。#pragma pack(pop) //弹出栈顶对齐字节数,不改变对齐字节数。#pragma pack(pop,n) //弹出栈顶并直接丢弃,按照n字节对齐。这条指令主要用作改变。

2023-01-17 16:06:26 619

原创 ASCII码,字符,字符串三者之间的关系

从上面的编码过程 我们就可以看出来,一个个储存过于麻烦,因此我们就可以用字符串进行存储 ,但是在c语言中没有字符串数据类型 ( string ),因此声明一个。从上面可以看出,上述的数据类型都可以使用,但是通常我们都用 char 来存储,因为他占用的内存大小刚好合适,不会浪费内存。存单个字符时,字符占用1个字节,字符串占用两个字节,因为字符串总是以 '\0' 结尾,且\0 也占用一个内存空间。在使用sprintf 函数,在转换字符串时,如果遇到0时,会自动认为是结束标志,0以后的内容不会被添加进来。

2023-01-17 16:00:56 3269

原创 STM32WB55 蓝牙OTA升级

1、擦除flash时容易造成蓝牙重启。2、如果选中下图红框,会导致死机。

2023-01-17 09:24:29 512

原创 关于int *p[n]和int (*p)[n]的超详细讲解

函数声明。

2023-01-17 09:23:47 2677

原创 hex 与ASCII 、字符串相互转换

例如:"C8329BFD0E01" --> {0xC8, 0x32, 0x9B, 0xFD, 0x0E, 0x01}例如:{0xC8, 0x32, 0x9B, 0xFD, 0x0E, 0x01} --> "C8329BFD0E01"例如:str = +002321N ->hex = 2b3030323332314e。例如:hex = 2b3030323332314e ->str = +002321N。数字转化为hex十六进制的字符串。字符串转为hex(字符串形式)hex字符串转为字符串。

2023-01-17 09:21:36 6401

原创 深入浅出变长结构体

这个时候存储包的时候,一方面可以考虑设定包的大小固定:如4K=4*1024=4096个字节,因为最大包长不可能超过4k,但该方法的有缺陷,存在一种极端就是包最小仅含包头不含数据域,此时包为8个字节,浪费了4096-8 =4088个字节的存储空间。,主要是为了方便的管理内存缓冲区,如果你直接使用指针而不使用数组,那么,你在分配内存缓冲区时,就必须分配结构体一次,然后再分配结构体内的指针一次,(而此时分配的内存已经与结构体的内存不连续了,所以要分别管理即申请和释放)。是的,是可以实现的。

2023-01-11 10:20:12 656

原创 C语言调试中出现的一些莫名其妙的问题

定义一个全局变量static uint8_t simulation_value=0;,并附初值,但是其他地方有修改++,但是在进行其他操作时,该变量会变成并不是预期的值。当在定义时static uint8_t simulation_value。定义一个全局变量service_port,并附初值,在使用时总是莫名奇妙的变化成另一个值,其他地方没有任何的修改,原因没找到,但是在定义前加上const关键字修饰即可解决该问题。

2023-01-09 15:34:26 441

原创 C语言解析JSON源码

笔者前面提到的“稍稍修改了一下的版本”就是指添加了可以解析这种排版过后的 JSON 文本的功能。它与 XML 的地位差不多,但就笔者而言,笔者更喜欢 JSON 的风格,因为它更符合我们的思维习惯,同样一份数据,JSON 格式的就是比 XML 要清晰明了一些。在使用这个解析器解析 JSON 时,只需要将原始 JSON 字符串传入 cJSON_Parse() 函数中即可自动将整个字符串解析一遍,并创建对应的节点链表。至于这个解析器解析的流程,有兴趣的同学可以自己去跟踪 cJSON.c 的源码实现。

2022-11-15 16:07:11 3689 1

原创 _CRT_SECURE_NO_WARNINGS错误提示,解决办法

方法一:将原来的旧函数替换成新的 Security CRT functions。

2022-11-15 12:08:00 4042

原创 Android debug时一直处于waiting for debugger解决办法

步骤:cmd进入命令行,进入adb所在目录先后执行adb kill-server,adb start-server。5.查看 AS 输出日志,看看是否与其他软件冲突;比如关闭360手机助手等。关闭方法:在任务管理器中—>进程—>关闭360MobileMgr.exe。3.避免打开多个Android Studio,可能产生冲突。最重要的一步就是:debugger选择 Java,即可。下面的步骤也都试了一下。2.手机重启或电脑重启。

2022-11-11 10:43:23 3060

原创 DCDC: 环路稳定性的测量方法-穿越频率和相位裕度

用示波器光标第一个波谷和第二个波谷之间的时间,计算对应的振荡频率,得到的振荡频率约等于穿越频率。这里采用一种近似的方法,将补偿之后的频率设置为等于fz和fp的几何平均数,即fz和fp对数域的平均频率,参考下方公式3、4。从图中可看出,如果穿越频率(即振荡频率)增大,在加载后,变换器将更早调节输出电压,因此电压跌落和电压振荡都会减小。在内部补偿的converter的FB网络增加前馈电容,可调节控制环穿越频率和相位裕度,提升控制性能。Cff的目的是提升反馈回路的增益和相位,同时保持可接受的相位裕度。

2022-11-09 15:25:24 8155 1

原创 Android Thread线程的简单使用

计时功能看似成功了,但是却埋下了一个隐患,即当你销毁计时界面(可以理解为出栈)时,启动的子线程不会因此而销毁,由于其还持有显示时间的控件tv_time,导致GC不会回收,一直持有该引用,轻则卡顿,重则占满内存导致OOM,直接奔溃。用来实现同步,可以保证被修饰的函数在被其它函数调用时,如果其处于被调用中,那么其它所有要调用到该函数的线程都会被阻塞,直到其从调用的线程中返回,防止资源冲突(虽然在上诉的代码中没有很好体现,但是还是粗略讲解下作用)至此,线程的简单使用到此结束,有不对的地方请各位小伙伴不吝指出。

2022-11-09 09:18:58 1037

原创 android studio 编译出现的错误

4、Gradle sync failed: exception while building Json xx/library\.cxx\cmake\debug\x86\android_gradle_generate_cmake_ninja_json_x86.stderr.txt: 另一个程序正在使用此文件,进程无法访问。解决方法:在project structure中添加Android NDK location的位置即可。解决方法:关闭相同使用该文件的工程即可。解决方法:点击自动修复即可。

2022-11-08 11:41:13 1274

原创 理解 Activity.runOnUiThread

在开发 Android 应用的时候我们总是要记住应用主线程。主线程非常繁忙,因为它要处理绘制UI,响应用户的交互,默认情况下执行我们写下的大部分代码。好的开发者知道他/她需要将重负荷的任务移除到工作线程避免主线程阻塞,同时获得更流畅的用户体验,避免ANR的发生。但是,当需要更新UI的时候我们需要“返回”到主线程,因为只有它才可以更新应用 UI。最常用的方式是调用 Activity 的这样就可以神奇的将 Runnable 任务放到主线程中执行。魔法是很棒。。。但是它存在与我们的应用源码之外。

2022-10-31 17:33:42 165

原创 Java outer标签(结合break处理多层循环)

在Java开发的过程中,经常会遇到碰到某些情况从而直接跳出循环,一般来说可以使用break直接跳出循环,但是对于嵌套了好几层的循环,break则显得有些不足,这个时候就可以使用Java的标签了,一般使用outer;很明显,程序只执行了i=0,并在内层循环了3次就停止了,说明当i=1的时程序直接跳出外层循环,向下继续执行了。说明在没有outer的情况下,break只是结束内层循环,但是不影响外层循环,外层循环接着执行,这边是break和break outer的区别。

2022-10-21 16:57:42 308 1

原创 Android Handler 使用详解

是一个消息分发对象,进行发送和处理消息,并且其 Runnable 对象与一个线程的 MessageQueue 关联。:调度消息,将一个任务切换到某个指定的线程中去执行。

2022-10-21 16:38:17 3526

原创 Android中Bundle

Bundle经常使用在Activity之间或者线程间传递数据,传递的数据可以是boolean、byte、int、long、float、double、string等基本类型或它们对应的数组,也可以是对象或对象数组。Bundle提供了各种常用类型的putXxx()/getXxx()方法,用于读写基本类型的数据。(各种方法可以查看API)Bundle主要用于传递数据;它保存的数据,是以key-value(键值对)的形式存在的。Intent负责Activity之间的交互,内部是持有一个Bundle的。

2022-10-21 15:33:34 495

原创 通过点击事件监听setOnClickListener彻底理解回调

老司机们对于回调肯定熟悉得不能再熟悉了,但是新司机可能还是一脸懵逼的,我比较笨,当年懵逼了好久,看夏安明的这一篇博客地址,虽然下边的留言都是,写得好!懂了懂了!但是我当时看了三遍还是不懂好吗 - -,现在我站在我的角度,用我理解的方式给大家讲解回调,我这么笨都理解了,聪明的新司机们肯定也是可以的。

2022-10-19 15:07:25 1004

原创 C语言常见的错误及解决办法,避坑笔记

比如上面的例子,我们可以说malloc 函数分配的内存块是属于p 的,因为我们对这块内存的访问都需要通过p 来进行。但是我们要知道,assert 宏只是帮助我们调试代码用的,它的一切作用就是让我们尽可能的在调试函数的时候把错误排除掉,而不是等到Release 之后。malloc 函数的返回值是一个void 类型的指针,参数为int 类型数据,即申请分配的内存大小,单位是byte。因为系统会按照这个结构体中的某些特定成员的值去字库中寻找匹配的字体,当这些值与字库中某种字体的某些项匹配时,就调用这种字体。

2022-10-10 09:44:33 4215

MATLAB APP教材

MATLAB APP教材

2022-08-09

pthread 文件,VS:C++的pthread出错缺失文件

VS:C++的pthread出错缺失文件

2022-04-02

STM32与FPGA通信.zip

FPGA板+STM32板进行SPI通信(我使用的是野火霸道开发板STM32F103ZET6,根据自己的STM32板子,串口打印输出,SPI使用的是SPI2,可自行修改,FPGA是用的小梅哥的AC620开发板EP4CE10F17C8)

2020-05-30

USB_MSC_CDC.zip

本实验是基于野火霸道开发板STM32F103ZET6,利用CUBEMX工具完成一个CDC + MSC的复合USB设备

2020-04-11

Altium_Designer专业培训PPT

Altium_Designer 电子工程师专业培训PPT,非常全面的介绍了Altium_Designer的使用方法,共同学习。

2018-07-28

C Primer Plus 第6版 中文版(美)STEPHEN BPRATA著;姜佑译_北京:人民邮电出版社

C Primer Plus 第6版 中文版(美)STEPHEN BPRATA著;姜佑译_北京:人民邮电出版社,学习C语言的经典著作。

2018-07-02

嵌入式研发工程师面试试题大全

嵌入式研发工程师面试试题大全,面试前好好复习,可以提高面试的通过率,祝大家好运。

2018-04-01

STM32F030R8T6-ADC_POLL

应用cube程序STM32F030R8T6-ADC_POLL多通道采集

2016-02-25

空空如也

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

TA关注的人

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