- 博客(27)
- 资源 (1)
- 收藏
- 关注
原创 codeblock报错:file not found
针对codeblock编译器情况1:当你在工程中添加了一个模块的时候,出现了找不到头文件报错,大概率就是你忘了添加头文件路径解决:依次点击project->bulid options->Search directories,在该标签页中点击Compiler,单击Add按钮添加头文件路径,这样就解决了。情况2:如果你之前的工程曾经添加过某个模块,编译过,后面又删了,但可能有一些残留的构建文件未清理干净。解决:第一种方法,理论上可以尝试清除这个残留文件,你能找到的话。第二种方法,你直接
2024-11-29 16:57:15
635
原创 LittleFS是什么
是一个小型嵌入式文件系统,专为嵌入式设备设计,以满足资源受限环境下的高效性和可靠性需求。它由项目开发,目前广泛应用于各种嵌入式系统中。openreadwrite每次写入操作都会记录新的文件数据和元数据,旧的数据会保留,直到被标记为可回收。支持嵌套目录(类似传统文件系统),并采用紧凑的存储格式来减少占用空间。通过分布式写入,均匀地使用存储器的每个块,避免某些块过早老化。
2024-11-26 16:18:29
961
原创 文件系统的作用
中,进行一个简单的操作(如读取传感器数据并保存到文件)通常会涉及多个步骤。这些步骤包括硬件初始化、数据采集、处理、存储以及与外部系统交互。以下是一个通用的操作流程及文件系统在其中的作用。此时,文件系统确保存储介质上的数据结构合法,并为后续操作提供读写接口。此步仍与文件系统无直接关联,但准备好数据后会调用文件系统接口进行存储。文件系统提供文件的读取接口,用于发送前的数据加载。文件系统需要确保在下一次挂载时仍能正常访问数据。此步与文件系统无直接关系,数据尚未存储。
2024-11-26 16:13:36
1119
原创 什么是固件
(Firmware)是一种嵌入式系统中不可或缺的核心软件,位于硬件和应用软件之间。它是写入设备存储器(通常是闪存或 ROM)中的程序,负责控制硬件的基本功能和运行逻辑。固件是嵌入式系统的一部分,位于。
2024-11-26 15:24:04
3115
原创 蓝牙发射器简单实践
拿到工程做首先就是两件事打开board_config.h文件,打开对应板级的宏打开app_config.h文件,打开你要使用功能的宏,然后配置这个功能。
2024-11-12 18:00:50
477
原创 什么是DLAN技术?
DLNA是由多个厂商组成的联盟制定的标准,成立于2003年,旨在提供一种便捷的方式将家庭网络中的设备互联,让它们能够发现彼此并共享内容。
2024-11-12 11:08:14
2003
原创 AC791 WIFI_STORY_MACHINE、WIFI_CAMERA工程烧录常遇问题
找到 download.c 文件,把exit /b -1删掉或注释就好,至于怎么找到这个文件的,看报错的第一行,那个文件路径,在CPU那个路径里面,然后去文件夹里搜索这个文件 (这个文件并没有包含在工程里面)上一个错误里面信息里有标注,去官网对应的7.19章节里面找,找到了举一反三,咱们这个版本工程会要手动填写的信息比官网那个例子更多一点。根据你的开发板FLASH INFO信息填上去就好,其实后面注释里面也有。PS:修改完文件记得先保存文件,然后再编译。工程版本为:release_v1.2.0。
2024-11-11 09:57:52
579
原创 DEMO_HELLO补充
我们把这个工程烧录进去会遇到没有打印hello demo run这个问题,说明app_main() 没有被执行,以下是我们的串口打印信息:然后我们根据这张程序执行流程图,我们一步步排查问题我们直接全局搜索app_main函数,会发现在这个地方被调用了我们全局搜索被调用的late_initcall,看看里面都干了些啥。
2024-11-07 17:55:32
709
原创 多任务系统中while循环对主线程的影响分析
影响主线程与否主要取决于循环所在的执行上下文(任务/线程)。这样就不会阻塞主线程,app_main()就能够正常执行了。
2024-11-07 17:43:12
268
原创 do_initcall()、late_initcall介绍
这些 initcall 函数都有严格的执行顺序,确保内核初始化有序进行,依赖关系得到满足。的执行机制,并对比它们的异同。同时也会拓展介绍其他类型的 initcall 函数。是内核初始化的核心入口,负责遍历执行所有已注册的 initcall 函数。则是一种特殊的 initcall,在其他函数都执行完后才会被调用。函数在其他 initcall 之前执行。则是一种特殊用法,可以让。
2024-11-07 17:16:27
570
原创 杰理AC791人脸识别学习记录
报错截图:出现这种重复定义的错误,通常是因为启用了其他暂时不需要的宏。很明显,上面这个文件是需要的,而下面这个是多余的。此时可以查看文件开头,找到相关宏的定义,并注释掉该宏即可。此外,还可能会遇到某个变量例如:camera没有定义的报错,只需要包含相应的头文件即可解决。不用怀疑自己,官方的SDK就是存在很多的问题,需要自己多留点心。
2024-10-29 16:08:07
546
原创 杰理AC791使用串口2作为打印
我们在使用外设时,比如开发板有3个 UART,在使用的时候尤其注意对应的宏有没有打开,尤其是大工程,使用宏更是频繁。
2024-09-24 17:25:20
840
1
原创 杰理AC791 demo_DevKitBoard 工程报错:symbol from plugin || first defined here
是较为常见的错误之一。
2024-09-23 17:24:39
657
原创 AC791_DEMO_AUDIO网络播放模式补充
本文内容都是基于杰理AC791官方文档进行补充,由于所以官方文档有的内容我就不追赘述了。打开工程,我们首先要把串口打印的引脚检查下,看看是否要重新配置一下。然后根据开发板实际情况,我们可以改成PB3口。开发板设置为STA模式时,你的热点的。
2024-09-13 17:51:15
522
原创 TCP 与 UDP 介绍
TCP适用于需要数据完整性、可靠性、顺序性较高的应用,但传输速度较慢。UDP适用于对数据丢失不敏感、但要求实时性高的应用,具有较高的传输效率。
2024-09-12 16:53:18
329
原创 【volatile 关键字的使用和注意事项】
volatile关键字在多线程和硬件编程中非常重要,能够防止编译器对变量进行不当优化,从而确保变量的值在不同线程或硬件设备之间的一致性。然而,volatile不是线程安全的保证,需要结合其他同步手段来确保多线程编程的安全性。
2024-08-30 11:48:57
528
原创 使用 CMSIS-RTOS API 定义和管理互斥锁的指南
此方法主要用于嵌入式系统中的实时操作系统(RTOS),它通过定义和使用互斥锁来确保多线程环境下对共享资源的安全访问。每个线程在进入临界区前获取锁,在退出临界区后释放锁,从而防止数据竞争和潜在的错误。
2024-08-30 11:39:55
512
原创 USB日志发送代码分析与改进
通过这些改进,新代码大幅提高了日志传输的可靠性和效率。具体而言,添加的互斥锁保护和分块发送机制显著减少了数据丢失的风险,同时优化的缓冲区处理逻辑确保了日志数据的完整传输。整体上,新代码在多任务环境下表现得更加稳定和可靠。
2024-08-29 16:46:00
486
原创 理解比特(bit)与字节(byte):计算机科学中的数据度量单位
在文件大小、内存容量、网络传输速率等方面,比特和字节经常被用来表示数据量。例如,一个文件可能被标记为“2 MB”,意味着它的大小是2兆字节,或者说是大约2 x 1024 x 1024 x 8 = 16,777,216比特。在网络通信中,速率可能以比特每秒(bps,bits per second)来衡量,如100 Mbps表示网络速度为100兆比特每秒。在编程中,了解比特和字节的概念对于理解数据类型的大小和处理二进制数据非常重要。类型的大小可能因编译器和平台而异,通常是32位或64位。
2024-08-14 17:03:20
1380
原创 static 关键字在 C/C++ 中的使用与作用对比
可以帮助管理作用域和链接,提高代码的封装性和模块化程度,避免不必要的命名冲突。在多文件的C/C++项目中,合理使用。
2024-08-14 16:44:06
351
转载 浮点类型float和double的精度有多少?
浮点类型float和double的精度有多少?***float和double的精度是由尾数的位数来决定的。浮点数在内存中是按科学计数法来存储的,其整数部分始终是一个隐含着的“1”,由于它是不变的,故不能对精度造成影响。float:2^23 = 8388608,一共七位,这意味着最多能有7位有效数字,但绝对能保证的为6位,也即float的精度为6~7位有效数字;【也可以这么算,0.000001的精度为10^(-6), 2^20 = 1048576; 1/1048576的精度高于10^(-6), 但是23
2020-07-20 17:31:12
2416
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人