- 博客(29)
- 收藏
- 关注
原创 阅读rt-thread的rtlink代码源码
最近在思考怎么重新整改私有协议的代码,看待rt-thread有个组件叫rtlink,个人感觉代码写的很好,有一定参考意义,有重传,长包组包之类逻辑。这里画了个大概的逻辑图。
2025-03-07 17:41:17
147
原创 关于iap2
所以有了eap协议,当通过iap2协议认证通过了之后,手机app则通过设备在iap2流程里告诉手机的‘model’字段发现设备,也就是说苹果手机app没法通过usb的PID和VID来发现设备而必须通过iap2。app在发现设备后才可以‘打开和设备通讯的端口’然后得到一个id,这个id是手机给app的和设备没关系。是否为app的eap数据则是通过iap2包里的session id字段区分,设备通过usb读取到的数据则会再加上iap2的字段,同理设备上发给苹果手机的数据不按照iap2协议则也没办法到达app。
2024-12-08 14:51:31
701
原创 rtos原理(上):调度(基于cortex-M3内核)
一、RTOS是什么?下面是网上搜索到的定义:看到系统一般会想到window,linux这种,但是rtos区别于它们的是占用资源小,实时性强,可以运行在资源受限的mcu上。一些soc厂商编写的sdk里带有添加“任务”的功能,例如WCH(沁恒)这里以这篇文章里晒的沁恒ble的sdk代码【沁恒蓝牙mesh】数据收发接口与应用层模型传递_沁恒 mesh-优快云博客作为例子,应用层的调用的接口如:tmos_start_task,命名虽然带有os跟task的字眼,但是严格上不属于rtos,因为其没有调度,
2024-06-15 12:25:48
1378
1
原创 ble:从rf到host相关总结
Core_5.x》英文,蓝牙sig官网就能下载到的规范文档《Bluetooth Low Energy The The Developer’s Handbook》:英文,最初蓝牙4.0制定人之一写的,外国人写的书就是啰嗦了一些但是能解惑《低功耗蓝牙开发权威指南》:中文,前一本书的翻译版,英文阅读ok的建议直接看英文的,不行的就这个跟上面那个对照着看,本人看中文版的有些名词看了不知道是对应啥,回去翻英文的才知道是哪个东西毕竟平时工作看到的名称都是英文的。
2024-05-05 18:26:26
1358
1
原创 usb个人总结
圈圈教你玩usb》讲用一个usb模块+51如何让电脑识别出一个usb设备,也介绍了不少相关的字段内容。其他例如uac\hid相关字段怎么看的建议去官网下载文档USB中文网USB中文网这里不讨论3.0。一、基本概念数据脚:dm dp电源脚:vcc gndusb的角色:主和从,一切数据由主发起,从响应,类似ble,即使从发数据也是主发起。usb常见版本:低速,全速,高速分别对应于USB1.0,USB1.1,USB2.0,
2024-05-05 17:29:27
1053
原创 rt-thread的nfs如何实现软硬件对接
图里上层部分理解为 dfs_elm.c是封装好调用fatfs的应用程序,然后把自己的接口ops注册到rtt的dfs,rtt的dfs再提供接口给到通用的posix层,然后上层就能使用open,write,read等文件接口。这个函数就是上面文章里要给fatfs提供的硬件接口函数,前面记录了对应块设备id到disk[drv],drv又是挂载fat的时候保存的,这里属于fatfs的内容不去细究,到这里就知道了最后硬件接口是怎么跟文件系统链接起来的。二、硬件初始化:根据具体的文件系统执行具体的初始化流程。
2024-04-05 20:58:09
880
1
原创 leetcode第7题:整数反转/第8题:字符串转换
可以从反转后的高位开始遍历即输入的低位开始往高遍历,边遍历边累计,即将出现越界的话那就返回0.这道题我不理解为啥超越100%,提交两次都是,可能c用的人少。将这个数反转后返回,保留符号位,如果反转后出现越界则返回0。这道题相对比较简单,主要是有一些要注意的点,一个有符号的32位整形数。2、出现越界后返回了0,1、不使用64位的变量。
2023-11-13 14:23:26
93
原创 leetcode第6题:N字形变化
这里通过找规律的方法,但是这个规律只适用于 numRows >= 3的情况,其他情况要单独拎出来,最后重新排列出来的数组就是按。输出:返回一个根据N的形状排列的数组,根据官方的题意相当于对这个字符串重新排列返回一个新的字符串。这里以一个 numRows = n为例子讲,如下图,输入:字符串 ,行数。
2023-11-07 15:50:51
85
原创 leetcode第5题:最长回文子串
回文数的规矩是:aba或者aa这种,提交题目才发现 a这种当个字符也算,所以找到找不到的时候就返回第一个字符。这里找到最长的字符串然后malloc后返回就行了。
2023-10-31 15:17:09
90
1
原创 leetcode第4题:寻找两个正序数组的中位数
这里以一个例子来说明思路,下面两个数组(管它们叫数组a,数组b,合并的数组叫c)一个size是2一个是3,总数就是5为奇数,那我们的目标就是找到排序后下标为[2]的元素即c[2]。这里两个数组都不为空,我们先定两个索引,一个指向数组a[0],一个指向b[0],因为a[0]=3 < b[0]=4,那a[0]就是合并后的数组的第0个元素c[0],所以c[0]等于3;接下来就不重复描述了,这时候得到了a[1]=7 > b[1]=6,因此c[2]就是b[1],这里我们也找到了目标的中位数c[2],
2023-10-29 15:39:10
76
原创 leetcode第3题:无重复字符的最长子串
这道题需要判断子串的长度那就一定得找到子串的头和子串的尾,然后尾和头的差值就是长度,那就需要一个头指针一个尾指针,尾指针遍历数组每个字符的同时去查询头指针到尾指针这里是否有重复的字符,咋一看跟第1题有点像。
2023-10-22 16:01:24
94
1
原创 leetcode第1题:两数之和
这道题第一次写的时候运行速度比较慢,因为思路局限了,觉得找到目标值得遍历两遍,后来看看评论发现可以用哈希的方式:1-建立一个空的哈希表,2-遍历目标数组的同时往表里查找是否有目标值,如果没有就把当前这个数组的元素插进表里,这样只需要遍历一次就能找到目标值。有时候需要坐地铁的时间太长接近40分钟且是连续的,于是打开leetcode看看,解锁了一点新想法。拼速度的时候就别想节省内存,该堆分配就堆分配,该用全局就用全局,涉及到查找的时候可用哈希这种速度比较快的方式,用c没有现成的库得自己写个差不多的。
2023-10-22 10:23:20
66
1
原创 记录一次在新电脑上面克隆不了github代码
安装了那个小乌龟 tortoisegit跟git bash 和GUI(在360下面安装的自动装了2个)先是直接git clone 然后提示no supported authentication methods available(server sent:publickey)然后参考这个链接https://blog.youkuaiyun.com/yidragon88xx/article/detail...
2020-02-06 23:37:04
268
原创 nrf工程跑不起来的问题
跑不起来的时候首先验证是否软件问题,例如rom,ram地址有没有弄错,可以跑个芯片相对于的demo工程看看,打开串口调试看看有没有什么提示信息,有的话解决就行了,没有的话看看是不是没有外接晶振,这时候需要软件打开芯片内部晶振。...
2020-01-23 13:36:41
417
原创 nrf52832使用ble+2.4G(Gzll)遇到的问题
由于有nrf52832(从)与nrf24U01(主)通讯的需求,大概是这样,nrf24U01做为一个dongle接电脑,然后52这边与dongle通讯控制电脑。nrf52代码参考的是gzp_desktop_emulator这个demo,由于nrf24U01dongle的demo用的也是gzp_desktop,所以这个通讯非常简单,gzp初始化的时候把参数设为一样就能通讯了,通讯要求是3ms一个32...
2020-01-23 13:07:26
4266
4
原创 nrf52832与其他从机蓝牙芯片通讯注意的问题
由于有这种需求:从机连接主机,主机再连接手机,然后相当于可以两个设备都可以控制手机。nrf52832的主从一体其实就是把从机跟主机整在一起,最开始我拿两块nrf52832通讯上了,然后跟手机也通讯上了,由于一些原因从机改为了其他厂家芯片,代码还是参考自官方demo,根据广播UUID配对,根据参考Log调试信息看到一直出现可以出现‘connect’也就是连上了,但是一直没出现配对成功的log,百思不...
2020-01-23 12:24:41
1057
6
原创 nrf52832添加hid服务
由于有添加hid touch服务给ios和Android手机的需求,了解了一下关于hid描述符的东西,添加hid服务可参考官方demo ble/keyboard。sdk16的hid服务跟sdk12的hid服务有一点区别,就是要算好最大使用的内存池。添加下面宏代码可以为一个hid服务添加一个内存池,这里以demo的键盘hid服务为例子:BLE_HIDS_DEF(m_hids, ...
2020-01-22 20:39:49
2601
2
原创 nrf52832增加fds模块遇到的问题
需求大概这样:先初始化fds,然后通过fds在flash读出我上次存储的内容,代码参考自demo flash_fds我的代码大概长这样: ret_code_t ret = fds_register(my_fds_evt_handler);//注册一个自己的回调函数,参考自demo if (ret != NRF_SUCCESS) { //print info } ret...
2020-01-22 16:01:37
1641
原创 nrf52832 ble无法多次与手机配对问题
在sdk15.3.0的一个ble的demo里,与手机配对,然后手机取消与设备配对,然后再连接设备居然连接不上,看了下代码在配对的handler里没看到PM_EVT_CONN_SEC_CONFIG_REQ这个事件,于是自己加了一个就可以了。用SDK12的时候在nordic官方论坛也看到过这个问题 代码如下:static void pm_evt_handler(pm_evt_t const * ...
2020-01-22 15:30:07
2629
1
原创 nrf52832sdk15的SAADC
由于有使用52832的需求,所以19年8月下载了一份最新的SDK,版本为SDK15.3.0,得创建一个新的工程然后移植原来的应用代码到这个新的SDK下,IO什么的跟原来SDK12没啥区别,但是我在demo里没找到ADC的demo,反倒是找到一个叫SAADC的(手册里SA是Successive approximation),由于时间关系先看了一下demo然后网上在搜索看了别人写的,跑了一下这个dem...
2020-01-22 15:24:12
672
原创 多mac地址问题
由于项目需求需要,在基于nrf51822的设备上面实现如下功能:设备可以有几种不同的模式,用mac地址区分模式。这里说一下多mac地址和手机f配对的过程:设备用mac地址1和手机配对,手机保存了当前的蓝牙配对信息,设备记录了该手机信息并且标记为ID1,可以在代码里这样打印出手机的配对ID(也可以根据这个ID执行删除配对信息)static void pm_evt_handler(pm_evt_...
2020-01-21 23:59:15
728
原创 SDK12 与手机配对时在fds里遇到的问题
曾经在sdk12的fds里遇到了许多问题,在后面最新的sdk16 15没遇到问题,这里主要讲遇到的一个比较严重又当时没发现的问题,设备与手机配对的时候 配对的内容利用fds模块保存在fds的page里,印象中nrf51822的flash section 是1k,fds可以理解为一个文件系统(不恰当的理解),开发者只管用就是一般不需要关注它的细节,假如没有利用fds来保存其他东西的话3个页最多可以保...
2020-01-21 23:40:16
449
原创 nrf51822如何修改mac地址
设备跟手机配对后手机会保存当前配对的一些profile,例如hid的描述符,例如我设备有两种模式(举个不恰当的例子):鼠标和键盘,按住按键1开机是ble键盘,按住按键2开机是ble鼠标,这时候就需要有不同mac地址的需求,否则会出现现在当前是键盘跟手机或者电脑配对,然后手机保存了当前的配对内容把你当成键盘了,下次用鼠标模式配对手机还是用原来键盘的配对信息,这时候就需要手机跟设备取消配对,但是如果两...
2020-01-21 22:50:57
1019
原创 使用nordic芯片遇到休眠功耗的问题
19年5月第一次接触nordic的芯片,用的是nrf51822,SDK版本12,比较老,在同事的代码框架上添加应用代码,功能测试OK了之后板子拿给硬件同事看了之后跟我说休眠的功耗大,记得跟我说有60uA,那时候代码大概长这样:代码由sdk12的某个ble demo改过来的,利用初始化的时候RTC注册了一个调用一次的5ms的应用程序,应用程序进入休眠的时候会关掉ed灯和外设,然后把当前的这个定时...
2020-01-21 22:28:32
1574
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人