- 博客(28)
- 问答 (1)
- 收藏
- 关注
原创 关于SDK 宏定义配置实现
SDK 在功能上会支持各式各样的应用,不同的应用需要适配不同的底层驱动代码。在实现SDK 功能配置上,首先需要明白不同层需要实现哪个宏定义。 驱动层有驱动层需要需要支持的宏定义、组件功能有组件功能需要支持的宏定义、 应用层有应用层需要支持的宏定义。 不同层的宏定义理论上应该作用于对应的层,如应用层正常情况下不应该引用驱动层实现的宏定义做条件编译。正常SDK 配置时,应该先考虑当前应用实现需要哪些配置宏,然后在根据应用层需要的配置宏去确定组件层 或者驱动层需要哪些配置实现。SDK 整个宏定义配置应该是自顶向
2025-06-05 16:59:56
194
原创 Ubuntu 环境下控制蓝牙适配器
DBus(Desktop Bus)是 Linux 系统中用于进程间通信(IPC)的核心机制,可以通过DBus 实现与蓝牙服务进程进行交互。通过DBUS 接口可以去调用BlueZ 的API 函数接口,DBUS 接口可以用于注册 蓝牙信号回调函数、调用蓝牙API、设置相关的属性。分发,注意g_main_loop_run() 函数阻塞后续的程序执行,建议单独建立一个线程去执行g_main_loop_run() 函数。相关回调函数,则回调函数是通过 g_main_loop_run() 函数内部执行。
2025-04-23 17:23:37
958
原创 蓝牙设备工厂客诉不良分析记录
对于指令或者命令,如果执行者反馈成功,一定要保证成功。而不是缓存指令后立即反馈成功要了解人性,特别是对于工厂的老油条。出现问题时他们首先想到的是规避自己的责任,有可能会隐瞒信息或提供虚假的信息。当出现问题时,不要过分相信第三方提供的信息,需要对这些信息持有怀疑态度,有可能的话需要自己去第一现场确认。
2025-04-18 16:42:50
332
原创 Zephyr 在 Linux 下编译 native_sim 目标及蓝牙调试详解(三)
本文详细介绍了 Zephyr 在 Linux 下编译 native_sim 目标板程序时的编译要求、生成程序执行过程中可能遇到的蓝牙初始化错误及解决方案,同时列举了在 Linux 上配置和管理蓝牙服务、硬件以及用户组的常用命令。关于配置过程中的一些潜在问题,建议大家在编译前确认系统环境与目标板的匹配,并注意蓝牙服务是否占用设备,以免影响调试。同时,使用管理员权限进行调试和添加用户进组都是必不可少的步骤。希望本文能帮助大家在使用 Zephyr 开发过程中更好地排查问题和调试蓝牙模块。
2025-04-11 01:08:26
1091
原创 Zephyr 入门指南 (一)
如果安装工具链速度太慢,可以从 https://github.com/zephyrproject-rtos/sdk-ng下载安装指定版本的工具链,注意需要和Zephyr 源码的需要的工具链版本匹配。然后执行zephyr_sdk_xxxxx 文件夹下的setup.cmd 脚本,用于初始化工具链。每次执行git pull 后需要,重新执行west update 、west packages pip --install 用于保证模块 、工具适配最新的代码更新。五、安装Zephyr 编译相关的工具链。
2025-03-30 11:22:32
816
原创 Jlink 调试异常问题记录-CPU is not halted
CPU在进入深度休眠时,会导致Jlink 被异常断开。一、 CPU 进入深度休眠。
2025-01-23 10:39:14
683
原创 Wireshark 插件功能调查记录
wireshark 从网络访问来看运行效率比较高,正常访问网页时CPU负载在10%以下。同样对比自己开发的LOG 工具基于C++开发的带界面的负载在27%,基于命令行终端C#开发的负载在10%左右。wireshark 的解析效率明显要高很多。wireshark 支持插件功能,提供了基于LUA 的API 接口。可以使用LUA 开发简单的界面。wireshark 是GPLv2 协议,商用必须将源代码开源。插件不确定是否需要开源。
2024-12-05 10:28:40
147
原创 Makefile 语法学习总结
宏定义有两种赋值方式= 赋值是在使用命名时解析变量。:= 赋值时 在定义时解析变量。?= 赋值时,仅在未设置变量时生效。+= 赋值 是向后追加定义,会先自动追加一个空格然后是追加的参数值在makefile 中使用 $(var) 语法 表明var 是一个宏定义变量。
2024-11-19 19:46:40
792
原创 linux 中timer定时器使用记录
`sigev_notify_thread_id`: 要通知的线程 ID(仅在 `SIGEV_THREAD_ID` 模式下使用,Linux 特有)。它会随着系统时间的改变而改变。- `sigev_notify_function`: 用于线程通知的方法指针(仅在 `SIGEV_THREAD` 模式下使用)。- `sigev_notify_attributes`: 通知线程的属性(仅在 `SIGEV_THREAD` 模式下使用)。- `sigev_signo`: 通知信号,指定要发送的信号编号。
2024-08-24 10:40:13
552
原创 linux 中的sigaction函数的使用记录
SA_RESTART: 让中断的系统调用,重新执行。//更复杂的信号处理。//设置在sa_handler处理过程中阻塞的信号mask。SA_SIGINFO: 使用sa_sigaction 作为处理函数,有更详细的信号处理信息。SA_NOCLDSTOP: 在子进程停止或继续时,主进程将不会收到子进程的启动或停止的信号。当信号产生时,如果是单线程,将停止当前线程运行,信号处理函数执行完成后恢复线程执行。
2024-08-23 02:43:54
306
原创 添加一个头文件后Keil 编译速度明显下降的问题记录
查阅了很多资料怀疑是太多头文件包含问题,但是过多的头文件包含应该导致编译速度成几倍的下降。log.h 中并未引用过多的头文件。而且此log模块是通过Zephyr 修改过来的,如果头文件包含引起的问题,理论上Zephyr 编译速度应该同样很慢,但是zephyr 编译却正常。导致此问题的根本原因是Keil 的代码解析器做的太烂,导致当存在大量的宏定义项时就会导致代码编译速度变慢。在LOG 模块开发完成后,将log.h头文件加入到工程代码包含中后,发现项目编译时间从1分钟左右直接变成了7分钟。
2024-08-14 10:30:47
621
原创 关于CM3 内核uint64_t 变量在va_list 中未8字节对齐的问题
通过Jlink 读取内存检查发现,堆栈中的存储的uint64_t 变量未以8字节对齐,导致va_arg 获取uint64_t 参数错误。刚开始怀疑是编译器问题,编译器未将写入堆栈中的数据以8字节对齐导致的。经过分析是malloc 的任务栈没有以8字节对齐,在CM3 的开发环境malloc 的任务栈必须以8字节对齐。在测试自定义的printf 函数时,发现当传输uint64_t 变量时无法正常解析。经过测试在使用MSP 主栈时测试函数正常,但是PSP 的任务栈存测试函数在异常。
2024-08-06 19:14:11
240
原创 VisualStudio 调试串口接收数据异常问题记录
偶然发现这个问题触发与电脑CPU 占用率强相关,只要一执行keil 项目编译操作,就会触发串口解包失败的问题。经测试不使用VisualStudio 在调试模式运行,就不会触发串口数据包解包异常的问题。使用VisualStudio 开发C# 代码用于接收解析处理大量的串口数据,发现总是会出现串口数据包解析异常的问题。特此记录,避免后续踩坑。
2024-07-18 16:00:34
351
原创 Keil 环境脚本参数说明
Keil 编译环境有时候需要在编译前或者编译后添加脚本进行处理。对于输入参数部分在Keil 的文档中不容易找到,在此记录一下帮助文档中的章节名称Key Sequence for Tool Parameters
2024-06-26 09:48:26
271
原创 VS Code开发环境NCS 代码解析配置
2.修改Settings.Json,添加ClangD 的配置,插入如下代码.。“build”是一个相对路径(相对workspace),其中存在compile_commands.json(Clangd 解析用的编译参数)。1.打开workspace 中的settings.json,在VS Code中,你可以通过以下步骤打开本地的。在VS Code环境下开发NCS代码,存在无法正确解析代码的问题。先安装ClangD 插件,用于解析代码。
2024-05-17 10:52:26
684
1
原创 延时发送消息删除处理方法
延时发送的消息,如果在消息未生成时,执行取消消息发送操作。可能此时延时发送的消息已经发出,但是在序列中排队等待处理。此时执行延时消息取消发送操作可能无效,因为对应的消息已经存储在消息队列中。软件框架的消息处理机制原生支持,将消息从待处理队列中删除的操作。这种方法是最安全的处理方式。实现一个状态检查函数,在消息处理函数中使用状态检查函数去检查当前是否需要执行对应的消息处理。
2023-08-17 20:21:03
451
1
原创 FlashDB 文件系统
FlashDB文件系统支持片上存储、外部存储器、操作系统文件系统接口。FlashDB文件系统支持的底层接口有:FAL、C语言标准文件操作接口、POSIX 标准文件接口。FlashDB 主要适用于少量数据存储的应用场景在MCU的移植过程中主要使用FAL作为底层接口。FAL存储底层接口说明FAL 的作用是实现存储系统分区管理,可以对指定分区进行读写访问操作。FAL 可以同时支持多个类型的存储器:片上FLASH、外部Nor Flash、等其他类型的存储器。FAL移植步骤:1.定义F
2022-01-04 10:28:24
3759
原创 cortex M3/M4内核 特权级与用户级详解
一 、程序运行为什么要有用户级与特权级区分用户级和特权级的实现是为了给存储器提供一种保护机制,让用户代码不能访问特定的存储区域。只有特权级级代码才能有权限访问特定的存储区域。防止用户代码或者应用代码意外或恶意访问操作系统的数据存储区域。一般情况下特权级模式会配合MPU一起使用,通过MPU设定只有特权级才能访问的存储空间。二、特权级与用户级作用的范围中断应用程序必须是特权级的,主程序可以是特权级的也可以是用户级的。处理器复位后在特权级模式下运行。在特权级模式下可以通过修改CONTROL 寄存器进入用户
2020-07-28 22:54:25
4188
2
原创 Nordic 官方FIFO代码精髓
Nordic FIFO 官方代码的wr_index rd_index是uint32_t 类型的,在FIFO 中元素的大小FIFO_SIZE的必须是2的倍数。其精髓在于以下三点:1.执行wr_index 与 rd_index 自加操作时,当数值达到 FIFO_SIZE时,无需执行跳转至0。当rd_index == FIFO_SIZE时跳转至0的操作,不是原子操作。一般FIFO 在中断中写入数据,在主函数中读取数据。如果rd_index在等于 FIFO_SIZE时产生中断,在中断中使用rd_index会出现
2020-07-28 21:40:40
701
原创 婚后的日子
像我这种月入15000,就应该被社会达尔文主义给淘汰掉。就别再祸害父母,祸害下一代了。也许有一个女朋友都是奢侈的,为什么我要找个女朋友???
2020-06-25 01:20:23
238
原创 freeRTOS LIST代码解读 (二)
freeRTOS 采用的是双向链表头文件定义内容其他宏定义configLIST_VOLATILE 可以不用定义,因为结构体成员的修改只在临界区内进行修改。所以不需要定义为volatile。/* * The list structure members are modified from within interrupts, and therefore * by rights should be declared volatile. However, they are only modified
2020-06-16 17:36:35
548
原创 CM3 内核存储器访问属性及DMB DSB ISB隔离操作
存储器访问属性可否缓冲(bufferable)可缓冲属性,一半用于数据写入操作,由于CPU执行速度与外部存储的速度之间存在差距,所以在存储器外部加入了buffer,导致数据写入存储器会延迟。可否缓存 (cacheable)缓存属性,即CPU是否具有cache,cache可以进行高速读写,将存储器中的指令或者数据读取到cache中供cpu使用。关于缓存存在以下三个个属性WT(write-through)、WB(write-back) 、WBWA。以下定义只适合Cortex-M3 and Cortex
2020-06-16 09:24:11
1571
原创 环形FIFO 使用注意事项
环形FIFO使用注意事项FIFO 读取操作与FIFO写入操作代码段 1代码段 2代码段 3环形FIFO多线程操作关于8位机或16位机 32位机以下内容主要说明环形FIFO 的在多线程环境下的使用注意事项。FIFO 读取操作与FIFO写入操作FIFO读取操作或FIFO 写入操作过程中,当达到分配的内存空间尾部时需要进行跳转操作。如果代码段1所示,如果在write_index++ 后 且wri...
2020-04-23 17:27:48
429
原创 NRF518522 DFU升级步骤
1.安装 micro-ecc1.首先下载版本为 4.9-2015-q3-updata 的GCC编译器。2.安装 MinGW ,将MinGW/bin 安装目录加载到 系统环境变量中。 安装MinGW msys组件。3. 将下载好的micro-ecc 文件拷贝到 D:\Nordic\nRF5_SDK_12.2.0_f012efa\external\micro-ecc\micro-e
2017-06-13 09:28:23
3370
空空如也
USB捕捉工具Bus Hound 在获取配置描述符时显示不完整
2017-04-24
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅