- 博客(58)
- 收藏
- 关注
原创 c++: when excute global class object‘s constructor function
【代码】c++: when excute global class object‘s constructor function。
2024-09-20 21:45:21 199
原创 c++: understand reference from disassemble
【代码】c++: understand reference from disassemble。
2024-09-20 20:58:50 86
原创 Bluetooth: get something from ble adv
【代码】Bluetooth: get cod from ble adv。
2024-09-15 18:22:13 409
原创 Bluetooth: gatt server example 解读
在 core spec 中有 Example ATT Server contents,这里对此进行解读;Assigned_Numbers.pdf 需要提前准备,可以从 SIG 下载;
2024-08-31 20:57:11 413
原创 Bluetooth: EDR: inquiry
Config Inquiry ModeStart InquiryStop InquiryInquiry Event for mode = 0Inquiry Event for mode = 1Inquiry Event for mode = 2Inquiry Complete Event
2024-08-14 20:05:56 215
原创 System: Simple Beautiful Protection lock_guard
【代码】System: Simple Beautiful Protection lock_guard。
2024-08-06 12:10:47 209
原创 Bluetooth:关于计算2-EV3的实际传输时间
假设这个eSCO 包的信息如下:2-EV3,payload是60Byte,那么这个包实际传输时间是多少呢我们知道EDR 的封包格式:Access code + HEADER + GUARD + SYNC + PAYLOAD + TAILERaccess code是72bit ,HEADER 是 54bit,这两部分是按照basic rate进行传输的,即1Mb...
2020-03-12 15:23:18 673
原创 Bluetooth:为什么packet header length是54bit
因为packet header是由如下组成:LT_ADDR(3bit) + TYPE(4bit) + FLOW(1bit) + ARQN(1bit) + SEQN(1bit) + HEC(8bit) = 18bit;这18bit 在经过 1/3 FEC后变成 54bit;
2020-03-11 21:30:11 337
原创 Bluetooth:access code的重要性
有三种AC,分别是DAC、IAC、CAC。DAC : device access code,被用在page 、page scan 、page response等过程,是从paged device 地址的LAP继承而来。IAC : inqiuiry access code,被用在inquiry过程,是从64个IACs(GIAC是0x9E8B33)继承而来。CAC : channel...
2020-03-11 18:19:17 1789
原创 我对M4A文件格式的理解
m4a 格式文件中的内容是有很多的box 组成的,box 格式如下:box length(4B 大端格式) + box type(4B)+ box content(box length - 8)例如如下是ftyp这个box 的数据内容,可以看到该box 长度是0x20字节。从m4a文件中找到moov box是重点,因为找到了这个box ,需要从box 找出来每个采样帧的位置及...
2020-03-11 11:32:43 4381
原创 苹果蓝牙日志如何获取
参考链接:https://wenku.baidu.com/view/58b10e7b27284b73f242509b.html从中取出来对自己比较有用的部分。SDIO通信接口中有一根clock线,该clock上输出的频率是可配置的。对于读命令,首先HOST会向DEVICE发送命令,紧接着DEVICE会返回一个握手信号,此时,当HOST收到回应的握手信号后,device会将数据放在4...
2019-11-09 10:37:42 4879 1
原创 STM32F411RE-0020-认识某些汇编指令的意图
LDR R0,[R1,#0x08]---》读取存储器地址为R1+8的内容到R0中;LDR R0,[R1,#0x08]!---》读取存储器地址为R1+8的内容到R0中,然后R1=R1+8;LDR R0,[R1],#0x08---》读取存储器地址为R1的内容到R0中,然后R1=R1+8;STR和LDR类似;LDR R0,=0x2000000LDRIA R0,...
2019-11-06 12:22:03 1067
原创 BT-用一个测试用例来理解蓝牙BQB PTS认证测试的过程
关于准备PTS dongle和PTS PC 工具,这里不做介绍。这里以TC_MOD_NDIS_BV_01_C测试用例来介绍。这个测试项内容:确认待测设备当处在不可见模式时,不会响应PTS dougle的搜索操作,即认为测试PASS。可以通过GAP log看到一些详细的测试过程,该log是在点击测试项的Run(debug logs)就会自动产生出来。除了该log,可以通过blueto...
2019-11-05 18:23:00 3435
原创 STM32F411RE-0019-外部中断是如何进行配置的
SYSCFG_EXTICR1~4这四个寄存器可以选择外部中断的pin。有23个EXTI,分别是EXTI0~22;对于EXIT0~15对应到各个GPIO组的16个PIN;EXTI line 16 is connected to the PVD outputEXTI line 17 is connected to the RTC Alarm eventEXTI line ...
2019-11-01 14:06:24 618
原创 STM32F411RE-0018-对GPIO的控制原理
GPIO寄存器可以控制多组GPIO(A~H),每一组多达16个GPIO口。配置寄存器有GPIOx_MODER:配置输入、输出、复用、模拟;GPIOx_OTYPER:配置输出类型是开漏还是推挽;GPIOx_OSPEEDR:配置输出速度是低速、中速、快速、高速;GPIOx_PUPDR:配置上下拉是没有上下拉、上拉、下拉;GPIOx_IDR:读取输入;GPIOx_ODR:输出...
2019-11-01 12:16:09 642
原创 STM32F411RE-0017-深入了解异常处理
当异常中断来时,通常会先将R0~R3、R12、LR、PC、xPSR这8个寄存器压入栈中。取出异常向量表地址;更新NVIC寄存器、xPSR、LR、PC、SP;举例,我们在某个中断入口做一个断点。可以看到R0~R3、R12和下面绿色全出来的是对应起来的。从上面的LR为0xfffffff9可能很多人感觉很奇怪,下面会对此做个详细介绍。...
2019-10-30 20:41:40 445
原创 STM32F411RE-0016-需要对寄存器有一些了解
普通寄存器接触的比较多,比较好理解,不多做解释R0~R12R13称为栈指针寄存器,对应到两个物理寄存器MSP/PSP;R14称为LR寄存器,用来指示返回地址;R15称为PC寄存器;特殊寄存器xPSR称为程序状态寄存器,由APSR+EPSR+IPSR组成;PRIMASK寄存器只有一个bit位,置位会屏蔽除了NMI+HardFault以外的异常中断;FAULTMASK...
2019-10-30 17:45:36 815
原创 STM32F411RE-0015-关于clock的知识储备
这里有一张clock tree,非常详细,从这个图中就可以知道clock之间的继承关系。system clock可以通过RCC_CFGR寄存器的SW[0:1]来选择是用HSI、HSE、PLL的哪个source;AHB clock 可以通过RCC_CFGR寄存器的HPRE[0:3]设定分频(1 2 4 8 16 64 128 256 512),是从system clock分频出来的;...
2019-10-30 13:30:47 328
原创 STM32F411RE-0014-了解system tick interrupt
通过code可以了解是如何设置的1ms的系统滴答中断。例如假设AHB clock是16M=16000000,那么一个clock时间就是1/16000000,那么1ms是多少个clock呢,是16000个clock。如何进行编程呢,这里也是有相关的建议编程顺序。__STATIC_INLINE uint32_t SysTick_Config(uint32_t ticks){ if...
2019-10-30 11:14:38 311
原创 STM32F411RE-0013-对电平触发中断和边沿触发中断的理解
以高电平触发和上升沿触发的两种中断说明。当高电平时,产生中断,进入ISR,处理完之后,如果仍然还有高电平,会继续进入ISR。上升沿出发,为了能够让NVIC可以检测到这个中断,对该上升沿的时隙也是有要求的,例如至少保持1个cpu clock;...
2019-10-30 10:47:15 1741
原创 STM32F411RE-0012-中断控制优先级
AIRCR寄存器是SCB里重要的寄存器,而PRIGROUP又是AIRCR中的重点。因为他规定了后面中断优先级的分组性。可以从code中看到也是有对应上面表格中的PRIGROUP的5个level;#define NVIC_PRIORITYGROUP_0 0x00000007U /*!< 0 bits for pre-emption priority ...
2019-10-30 10:36:53 389
原创 STM32F411RE-0011-分析startup_stm32f411xe.s做了什么事情
设定栈指针Reset_Handler: ldr sp, =_estack /* set stack pointer */程序中有定义一些赋初值的变量,在编译的时候,会规定好这些变量在ram中的地址,以及这些变量的初值存在flash中的哪里。有这些信息,就是为了将ram中编译器为这些变量预订好的地址的地方,填充好他们各自的初值。/* Copy the da...
2019-10-29 21:44:38 1153
原创 STM32F411RE-0010-结合map文件分析连接脚本
下面是定义好对于STM32F411RE这个芯片的flash和ram的地址和大小设定。/* Specify the memory areas */MEMORY{FLASH (rx) : ORIGIN = 0x08000000, LENGTH = 512KRAM (xrw) : ORIGIN = 0x20000000, LENGTH = 128K}下面可以看到有将....
2019-10-29 21:09:53 638
原创 STM32F411RE-0009-如何设置调试程序的入口停止点
在STM32CubeIDE,通过菜单Run-》Debug configuration这里默认是设置在main入口。如果要修改在汇编的Reset_Handler就可以将这里的main修改成Reset_Handler。下面是调试开始后停止的地方就是我们前面配置的地方。...
2019-10-29 20:33:44 441
原创 STM32F411RE-0008-认真理解编译过程,对后续开发极有益处
点击project->properties,会看到如下:最重要的就是这里的红色标注的部分,其中绿色标识的是重点。在这里有对汇编、C的编译选项配置,包含路径,宏定义,连接器的选项配置,以及postbuild的输出配置。Logging下面可以配置编译过程的log输出到哪里,这个还是比较有用的,当然在IDE上也有编译过程的log输出到console窗口。一旦遇到build erro...
2019-10-29 19:51:40 519
原创 STM32F411RE-0007-学习代码的第一个脚印
在已经安装了STM32CubeIDE环境之后,后面的操作基本都可以在这个IDE中进行了。可以此时连SDK都还没有拿到呢,别着急,这个IDE会帮你搞定。选择File-》New-》STM32 Project;此时会打开一个对话框,让你选择你的开发目标平台。为你的project起一个名字,点击next;下面就会选择要下载的SDK;这样就已经将这个工程建立完成了,后面可...
2019-10-29 17:55:15 450
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人