xcode中如何抑制告警 Double-quoted include in framework header, expected angle-bracketed instead

问题

编译时会有大量类似“Double-quoted include in framework header, expected angle-bracketed instead”的告警,从内容我们理解是双引号和角括号的问题,如果我们不希望提示,该如何做?

solution

先从左侧project 栏选中项目,然后进入到 Build Settings ,然后找到 Quoted Include In Framework Header,然后选 No

蓝牙AoA AoD

蓝牙aoa aod

蓝牙aoa aod,对于不熟悉具体技术的人来说,并不能很好区分其中的差别。
下面将通过两张图片,来浅显的解释这两个概念的差别:
aoa

aod

从以上两张图,我们可以这样简单的来理解:
aoa:到达角定位,通过到达接收机的多路天线信号差来定位的方式。解算在基站侧,基站多天线接收。
aod:离开角的定位,通过离开发射机的多路天线信号差来定位的方式。解算在标签侧,基站多天线发射。

初入大连

伴随着渐渐模糊的记忆,很多真实的片段,我已经无法分辨是否是梦境中的残留。

大约是2005年的3月的某一天,我异常兴奋的和一群校友,去人生中的第一家公司报道,我们大约两三个班的同学都选择了同一家公司,这是巧合,也是有因,后面再表。

这种第一次到异地的感觉,是无法言表的新鲜和激动。那时的大连,一方面有bo在经济方面的成就,一方面是对日外包的窗口,经济蓬勃,又有旅游城市的效应,城市年轻而有活力,而软件园作为当时大连的支柱产业,园区显得格外崭新和设计时尚。

我们一行人坐火车,从哈尔滨出发,到达大连,然后坐大巴直达软件园,似乎到达的是早晨的时间,停靠在当时还是叫通用大厦的门前的那条路上,那种感觉和震撼,就像我第一次看到大学初恋的感觉,人生中仅有的几次,哈尔滨,看见她,落脚大连,初到深圳,那种感觉在第一个地方呆久了后,再也没有出现过,仿若梦幻。

我们落地后,给了似乎是7班还是6班的其他到东软的校友电话,请求暂放了行李,然后我们去软件园广场的公司去报道。

再后来听说接待我们的校友不久后就离开大连去北京了,我们再无联系和音信。

我们最近的一行4人,来自3个版,7班,8班 9班,在一个公司,开始了为期3个月的一起上课,一起学习,一起下班做饭,一起打牌的美好时光。

我们白天上课练习,主要是基于tengin嵌入式操作系统的学习和练习题。除了我们校招的预备役员工,还有社会交钱的培训学员,当然还有一些后面没通过测试的,没有成为正式的员工。除了我们学校,还有很多其他学校的应届本科,硕士,好像没有博士。我们们有微薄的补助,具体是多少我忘了,反正够我们租房和吃饭了,相对于在学校没有收入的我们,已经不错了。

实习为期三个月,我们除了要学习基本的东西,还要学习日语,通过相关的技术测试,同时也顺便基于我们的开发项目完成一个相关的嵌入式毕业设计。当然因为学员众多,不可能每个人单独辅道,所以最后大家的毕设都大同小异,但是好在是不同班,也没有什么影响。

毕业设计是围绕我们学习的tengin,自己选一个驱动课题,然后就基本的操作系统原理,接口,驱动设计思路,实现代码,等等到最后可以在开发板演示的程度,这些素材来完成一个驱动开发的相关毕设,虽然大家都是相同的操作系统方向,但实现细节和内容并不首先和相同,还是有很大发挥空间。我记得自己的大概内容是一个模拟shell的cf card的交互式命令行系统,可以通过诸多自定义的shell 指令来 操作cf card ,自己实现了一套指令。这个课题本身三个月来说难度并不小,但是因为很多人类似的内容,又显得并无十分突出。

在说说我们入职的几个人,除了我们一起租房的4个,大概还有几个人,除了计算机系的还有自动化系的,我们共同的联系是我们可能都在实验室给相同的老师平时做项目,或者给几个认识的老师做项目,而我们校招时尽然选择了同一个主做嵌入式方向的公司,也算是大家对自己技术方向的认同吧。

那时我刚毕业税前2800。在我2007年4月份离开时,我是我们那一届的优秀员工,第一年工资就长了不少,2007年离职时,大概是接近4000,后面我被人挖走当时还替我缴纳了一年多的提前离职违约金,大概一万多,后面有空再表。

那个时候很轻松,有很好的环境,那时的大连it公司基本对于一个毕业生来说是相当现代和梦幻的。中午有很好的自选快餐盒和水果。晚上我们很早下班,回住处4个人分工做饭,有焖饭的,炒菜的,日子过得真惬意。六月底回学校答辩时,体重三个月长了20斤,就是最好的证明吧。

在大连的一帮同学和同事 也是我人生中最亲密的朋友,很多至今还保持着联系。

我们当时自己租房,我记得是800的一个军工区的红房子,四个人四张铺地的垫子,买了一台电视,这个就是我们仅有的家具家电,对了,还有电饭煲。

我在学校是对51汇编很擅 长,课程设计和平时的课程都做的很好,所以也有契机跟专业课老师做了些参加学校科技大赛的嵌入式项目,那时在学校学习的protel画板子,调试汇编单片机,做竞赛,没想到后面竟然影响了我后面15年的职业生涯。人生每一个改变都可能是契机。

基于在学校的技术方向和大四的整个项目经验,我自然而然的选择了嵌入式方向,在校招的大厅,我选了一家大连的初创公司,我们大概是第二批员工,第一批员工后面也成为了我们的朋友。这家公司后面被股权吸收成为了软件园下属的全资子公司,那是后话,那时我已经离开了,去了另外一家做工控的小公司。

崭新的城市,新的公司,还有崭新的漂亮姑娘们,一切好事兴奋,新奇。我们中间的胡某似乎对一个漂亮女生表示过,注意我说的表示不是表白,因为好像没有那么轰动和强烈,毕竟我是后面从其他人口中听说的。那个女生听说是有本校的男友,所以表表示并未成功,今天看,我很羡慕和敬佩他。

说道一个好玩的细节,我们一行大约30人,有计算机系的,有自动化系的,有数学系的,也有几个是吉大的日语系的,因为当时的嵌入式业务还是偏日本的外包方向,打印机设备,自动化机械控制设备,嵌入式设备等,所以很多原始需求书都是日文的。一起招聘的日语系女生,也是我们培训期间的日语老师,给我们平时培训日语,至今我能熟练日语的50音图,也是那时学习的,还会几个基本常用日语短语,其他的我基本都忘了。

我们转正后,先是在后面所说的通用大楼上班,后面搬家到了转盘的软件园大厦,等我07年离职时,已经搬到七贤岭了,公司的人员规模在迅速扩大。

那时的通用大厦和软件园等设施都是一流的,因为很多公司和项目都是和日本员工一共办公的,所以对于刚毕业的我们来说这种条件简直是,现代化的没法表达,加班也不猛,至少比现在的深圳的的工作来说,我都不记得在大连加过什么班。

那时我们的工作内容大概是这样的,我们会接到日本外包的项目,有原始的日语文档,翻译们会帮我们翻译,然后我们开始研究文档规格,根据对应的实际设备或者指定开发板,我们开始完成相应的功能,然后由测试按照规格书进行功能验收。这期间包括嵌入式的开发,和pcba的设计,那时还主要是arm7和arm9,比如xscale270,三星的2440等主控。我们当时主攻的是日本oki的mcu系列,配套日本的嵌入式操作系统tengin。这个tengin可比淘宝后面那个tengin早多了,但是大部分人应该不知道这个实时嵌入式操作系统。

等到7月份我们正式毕业入职时,我们在大工对面的写字楼上班,我们在大工教师职工区的红房子,还是四个人一起合租了房子,每天大概上班去公司,走过去5分钟。

我在学校主要是汇编,C语言比较厉害,mfc做上位机,画板子是protel。毕业从2005 7月到2007 4月eda方面我基本已经转到cadence和allegro了,因为前辈也是我后面的同事,都是在用cadence和allegro。这两个工具也成为我2012年创业时的主要利器,人生处处是惊喜,后面有机会再表。

除了画板,调试,焊接,开发上位机,调试嵌入式驱动,可以说毕业的几年是我人生中学习最快乐成长最快的时候,我后面的整个职业方向和开发方向都跟这期间的学习和积累有关。

前面说到我住在大工,是的,有个很方便的地方就是我们可以去学生食堂吃饭,我们也可以去北门附近的网球场去打球,经常也看到留学生在北门教学楼前玩飞盘,那时好羡慕。关于网球,我人生中仅有的一段联系时光就是那时,后面再无机会解除。

一个有意思的话题是,我们那时没有女朋友,仅一个有的还不在大连,等于基本单身状态,我们唯一的娱乐项目竟然是做饭,特别是周末的大餐。我们经常会做的很多,觉得吃不完的时候,我们就会很默契的说,让你那个大工同班同学来吃饭吧,好在我们的手艺都还练的不错,他每次来都吃的很开心,毕业很多年后,我们还会在同学微信群里谈起我那时的饭菜,时光真好。

当时的大连,除了软件园(既指园区房地产企业又是it企业)还有华信和东软,类似今天我们提到的深圳的华为和腾讯一样。那时我们这三个企业都有校友,似乎哈尔滨毕业的不是去北京就是来大连。这其中软件圆似乎是名气和实力最差的额,今天过去了15年,我已经不知道具体的情况了,反正当时是那样的感觉。除了我们这一波选择嵌入式,其他的都是纯软件的,基本都是java或者cobo(记不清具体发音了)的方向。

说到大连,当然不能不说那时的星海广场,号称当时亚洲最大的广场,还有当时全国除了北京外唯一的大型华表,后面被bo事件给拆了。星海很漂亮,海边也干净很适合游玩和散步,那时离软件园也不远,想想现在在深圳,好生羡慕,但是,人生无法回头。

那时我印象中服务最好的是软件园的浦发银行,然后是黑石礁的招商银行。多年后我在深圳还特地申请了一张浦发的信用卡,给了我我1500的额度,虽然我不懈一用,仍然保留了好多年,前两天刚注销,就是因为那时毕业时,浦发给我留下的美好印象。现在我是招商的主力用户。

实习一共三个月,每天学习交作业,有老师(前辈和后来的同事)给审批,结束时进行考试,然后通过的就可以正式入职,没通过的就当花钱或者免费培训了。有几个没过的,具体我已经忘记名字了,时间太久远了。

对于第一份工作,我有着很多的记忆,就像你的第一个初恋一样,你会记忆一辈子。漂亮的办公环境,良好的学习培训机会,很技术的项目,漂亮的女同事,这份工作几乎满足了我对于一份工作的所有美好要求。因为工作的原因,我们会接触很多日文的材料,我对日语的兴趣和日本文化的兴趣也是那时培养的。

那时虽然技术的很多工作我都有参与,但是更多的还是辅助同事,焊接,调试,测试,去采买元器件基本我都干过。有时候还出差去保税区,去日本客户工厂调试设备,那时很忙碌但是好像没有现在的这种沉重和压力感。

在学校的时候很穷,学的计算机,却自己没有电脑,所以大四基本是在实验室猫着,用实验室的电脑练习。 毕业后第一台电脑是大工学生的二手电脑,amd的处理器,很便宜,基本也能用,也能打红警,不错了。后面正式工资发放了,有了积蓄,就当时花了5000左右买了叫惠普康柏的笔记本,那个本现在还记忆尤新,毕竟是我的第一台笔记本,后面因为散热死机而寿终正寝。

大工的校园不错,我记忆中有很多类似丁香的常年白色小花树,芳香而不艳丽。 学校很大,人很多,我们行于其中,每日匆匆,却未想此生竟再也不遇。

我经常买元器件的电子市场的大嫂,人很好,有一次很晚了,留我去她家吃了饭,具体饭菜饭菜我忘了,我竟此后都无法相遇和表达感谢,希望她和家人都身体健康吧。

那时公司人很多,好像没记得什么通宵加班的事情,业务也是严格的工程划分,开发,设计,还有一帮测试的小姑娘,现在想想真实很清空的氛围。

当时在学校的竞赛课题是单片机控制rf431做短距离无线双向通讯,后面工作了,是调试xscal270开发板,基于okI的arm7做了 自售机和palm之前的红外适配器,用户parm管理自售机数据,客户是富士冰山,不知现在是否还存否。

那时开始接触嵌入式linux的概念,虽然当时公司主攻tengin,但嵌入式linux palm等已经进入视线,那时windows mobile还没兴起。安卓还没出头。

工作后主要用c做嵌入式开发,用mfc 做桌面开发,后面用evc做windows mobile开发。业余还做些学习项目,第一个挣钱的是给本溪的一家当铺做一个基于mfc的当铺管理软件,使用access数据库,支持局域网多机,那个项目写了很多代码,可惜当时没用类似github的东西,并没有把代码保留下来,多次更换电脑后,就彻底丢失了。

这个第一份工作大概维持了一年8个月,工具上从protel升级到了cadence系列,平台从单片机升级到了arm9,开发也从汇编升级到了c、mfc,工资从2800升级到了3700左右。技术上基本在软硬件一体化的层面上更上了一个层面,慢慢接近软硬件独立一体化,这个也促成了我第二份工作,对方还给我付了违约金。让我提前出来参与项目。

那时刚从哈尔滨到大连,刚从学生开始上班,穷,舍不得花钱,也没女朋友,大把的时间,可是没钱。记忆最多的业余活动好像是四个人打牌,打升级,不亦乐乎,傻乐呵。

现在回想,除了大学,第一份工作时期基本是我最轻松快乐的时光了。后面的时间越来越忙,因为我的工作方向和生活中不断有新的东西进来。

站在今天的起点,评价当时的时间,那是个全面学习的未成形阶段,各方都有进展,但是还未能独立单挑项目,但是我的斗志已经蠢蠢欲动了,我要追求更快速的进步。契机就是第二份工作,这个是后话。那时爱情还没有进展,穷,长相一般,内心自卑,所以也未在爱情方面有刻意目标,主要还是工作方面的进展。

那时的公司氛围轻松,公司会经常组织聚餐,踢球等活动,聚会时大家也都很年轻很嗨,现在想想,真是一个黄金一般的年龄。

时间过去了15年,但是当时的第一份工作,竟然和今如此的相似,设计pcba,开发嵌入式,选型设计,也许一切都是命中安排好的,只是我们都不自知。

招聘我的是我们当时的老板,王老板,我不想写他全名,算是尊重吧,我离职后也再无交集,偶尔听老同事谈起,希望他也安好。

还有丁哥,最想写的就是你了,但是还是放到心里吧,人生何必再相逢,一切尽在不言中。

累了,先写这么多,有心情了再补充。

再见,大连
再见,我的第一份工作
再见,我落地的那第一束阳光
再见,那些模糊的甜美的微笑
再见,那个激情澎湃的年纪
再见,那年轻的朋友们
我想你们,我想念那时的自己

2020.09.06

[RDA8910 CSDK系列]724ug 差分fota之证实-附带ota简要流程分析

这两天在学习csdk系统,昨晚销售小哥给了一个链接:http://doc.openluat.com/article/1416/0 其中零妖大佬说了关于cat1 差分升级的事。

本着求实的精神,就很像知道确凿的证据,最好有代码或者数据的依据。

所以今天特意准备了下评估板子,看看能不能拿到些直观的线索。

第一个想到的就是通过coolwatcher追查系统的日志。这里有个开发板和我的usb uart小板电平不匹配的小插曲,定位此问题又额外浪费了点时间,暂不展开,如果有人想细究再补充,先说结论:想稳定看coolwatcher的日志,你需要使用host log的串口方式,而不是用usb方式。

测试使用的是官方的ota平台: iot.openluat.com ,设备初始代码是自己编译的测试包, ota包使用同样的代码,只是改了下版本号,因为主要是验证流程,所以不用关注功能逻辑。

fota包的下载使用的是http,注意是http,不是https,主要原因就是简单,https是趋势。

第一步:

通过http获取到文件大小,这里对应是的是Content-Length

[ota] HTTPClientFindFirstHeader 21,Content-Length: 48330

[ota]GetSize fsz: 48330

6M左右的原始bin档,实际的下载大小只有48K左右,这就说明下载的是差分,而不是全量包。

第二步:

ota_parse otaProcess file size 48320, type 1

从48330 变成了48320 说明有10byte可能是控制描述数据,不细表。

第三步:

[ota] HTTPClientReadData readSize 511

[ota] HTTPClientReadData readTotalLen 1022, 48330

每次下载511个字节,一包一包开始下载

第四步:

中间重复无数包,通过总包大小控制下载次数,直到最后一包下载完成

[ota]--HTTPIntrnConnectionClose--

ota_parse otaDownloadDone appState 3 CoreState 1

[ota_parse] FILE: app 48320 0

app应该是文件名,48320是大小,0 是属性或者权限之类的吧。

第五步:校验

ota_app crc (f7ddf30f,f7ddf30f)

ota openat_newApp appImageIsVaild ok

使用的应该是crc32 的校验的多包累加和,纯瞎猜,不求证

第六步:更新ota的标志

ota check 1,0

ota check 1,1

ota OPENAT_newOtaFlagSet 102

这个102应该就是告诉bootloader这个是刚ota完成,第一次需要做些特殊的工作。

第七步:下载完成

ota_parse _otaDownloadDone ok

[ota]fota end 0

看日志,整个升级48k大小的样子,花了6s完成,基本无感知,所以如果你用usb方式看日志,可能coolwatch还没连接上,升级就完成了

nordic 如何使用单分区OTA模式

ref:https://devzone.nordicsemi.com/f/nordic-q-a/48364/v15-3-dfu-use-single-bank-directly

v15.3 DFU use single bank directly

Note that for SDK v12.3 : if application size * 2 > available space a single bank update is performed.

While I am using v15.3 and there seems no more infor about the single bank and dual bank settings, I want to free more space for data storage and disable dual bank dfu, my question is how to use single bank dfu directly?
solution1: final I find the NRF_DFU_SINGLE_BANK_APP_UPDATES in https://infocenter.nordicsemi.com/index.jsp?topic=%2Fcom.nordic.infocenter.sdk5.v15.3.0%2Flib_bootloader_dfu_banks.html&cp=5_1_3_5_1_2

solution2: increase the NRF_DFU_APP_DATA_AREA_SIZE to make the space less than dual bank.
Thanks for answering your question. Just want to add that option two may be better as it will prevent the bootloader from overwriting the app data in case an image is also too big for a single bank update.

refs:
Dual-bank and single-bank updates.pdf

IOS device support

问题

当你升级了macos,xcode自带的iphone支持版本和你iphone不一致时(比如手动升级的beta版本等),这时候xcode是无法正常调试和下载ios app的。

解决办法

增加对应ios的DeviceSupport文件,手动添加到xcode的对应目录:

更多请见:
https://developer.apple.com/download/
https://developer.apple.com/download/more/