基于BES2500芯片的方案开发总结和反思
前记
虽然蓝牙芯片现在非常多,可是一旦想做一些差异化的产品时候,能用的非常少。在和客户的反复斟酌中,最终选择了BES2500来开发这款新的产品。这里面是基于自身的实力,产品定位和芯片诉求多重考量的结果。
核心技能:团队的积累是软件算法,这就要求产品中一定要有不少算法在,这样才能凸显团队的价值和算法的价值。
产品定位:这个客户对产品的性能要求比较高,所以,选择好的芯片平台和做差异化的开发是必须要的。
芯片实力:bes2500有几点吸引了我们,支持蓝牙5.2双模,功耗低于5ma,sram空间大的惊人,并且已经有几个大厂已经使用了。
综合起来,BES2500就成该产品的首选。
代码熟悉
由于该芯片的文档特别少,代码量比较大,结构又比较复杂,代码熟悉这块,团队花了不少时间来梳理这些代码逻辑。
用户接口部分流程:这部分主要牵扯到几点,用户信息配置,这个一般的在config目录下的工程配置里面寻找,比如,特征宏,音量,电源管理,GPIO映射等。这部分代码比较简洁,很多初级工程师很快都能熟悉的。
音乐部分流程熟悉:音乐流程相对2300的代码,改动不大,就是针对aac做了一个优化,这个部分一般不会出问题,毕竟,已经迭代次数那么多了,这个已经相当成熟了。
电话部分流程梳理:SCO部分涉及到的算法比较多,芯片自带算法,第三方算法,降噪算法,回声消除算法,这些加起来,显得系统有点臃肿,再加上需要增加自身的算法,所以这部分需要花费不少时间来研究。
硬件接口流程梳理:bes2500的硬件接口配置比较丰富,双串口,双I2C接口,I2S接口,这些接口的熟悉和使用,需要花一些时间研究的,毕竟,这些没文档,并且参数没有说明。不过,这些难度还算是可以克服的范围之内。
算法移植
使用BES2500,最重要的就是添加自己的算法。做出差异化的产品,这里移植算法需要花费不少工作量的。想要优化算法,必须要对芯片的整体接口和特性做一个比较深入的理解,这部分花了不少时间来研究的。
内存分配:bes2500使用的是静态内存,内存管理这块做的不是很好,使用外界算法的,这部分花了不少时间去解决bug。
算法加速:这里面涉及到怎么把主频修改,怎么使用辅核,怎么把让代码运行变得更快,这部分需要比较深厚的功力了,也是团队中吃亏最多的地方。
后记
项目虽然做成了,但是踩坑也是非常的多啊。同时也暴露了团队不少问题。整体的技术实力还需要不断地历练,内部配合要不断地去磨合。有了这次的历练,后面的项目开发会顺利很多。
基于BES2500芯片的方案开发总结和反思的更多相关文章
- 基于全志H3芯片的ARM开发环境搭建
基于全志H3芯片的ARM开发环境搭建 最近买了个友善之臂的NanoPi M1板子,又在网上申请了个NanoPi NEO板子,这两个都是基于全志H3芯片的Crotex-A7四核ARM开发板,两个板子可以 ...
- 基于STM32L4的开源NBIOT开发资料
基于STM32L4的开源NBIOT开发资料 1. 参考路径:http://www.stmcu.org/module/forum/forum.php?mod=viewthread&tid=615 ...
- HiLink & LiteOS & IoT芯片 让IoT开发简单高效
HiLink & LiteOS & IoT芯片让IoT开发简单高效 华为HiLink & LiteOS & IoT芯片使能三件套,让IoT开发更简单高效.下一代智能手机 ...
- 基于webpack的前端工程化开发解决方案探索(一):动态生成HTML(转)
1.什么是工程化开发 软件工程的工程化开发概念由来已久,但对于前端开发来说,我们没有像VS或者eclipse这样量身打造的IDE,因为在大多数人眼中,前端代码无需编译,因此只要一个浏览器来运行调试就行 ...
- openfire:基于开源 Openfire 聊天服务器 - 开发Openfire聊天记录插件
基于开源 Openfire 聊天服务器 - 开发Openfire聊天记录插件 上一篇文章介绍到怎么在自己的Java环境中搭建openfire插件开发的环境,同时介绍到怎样一步步简单的开发openfir ...
- 基于开源 Openfire 聊天服务器 - 开发Openfire聊天记录插件
原文:http://www.cnblogs.com/hoojo/archive/2013/03/29/openfire_plugin_chatlogs_plugin_.html 随笔-150 评论- ...
- 基于mycat高可用方案——数据库负载
引言 传统企业级应用一般采取单台数据库,吞吐所有应用的读写,随着互联网的高速发展,以及微服务架构越来越普及,往往采用分库分表来支撑高速增长的大量业务数据吞吐.分库分表主要有两种方式:水平分表和垂直分库 ...
- 深入理解基于selenium的二次开发
对于做web端自动化测试的人来说,可能接触selenium比QTP还要多,但是我们在做基于selenium的二次开发的时候,经常会说到二次开发是为了易于维护,很多人可能不懂得维护的价值是什么,和到底要 ...
- 基于flask的轻量级webapi开发入门-从搭建到部署
基于flask的轻量级webapi开发入门-从搭建到部署 注:本文的代码开发工作均是在python3.7环境下完成的. 关键词:python flask tornado webapi 在python虚 ...
- 基于ngx_lua模块的waf开发实践
0x00 常见WAF简单分析 WAF主要分为硬件WAF和软件防火墙,硬件WAF如绿盟的NSFOCUS Web Application Firewall,软件防火墙比较有名的是ModSecurity,再 ...
随机推荐
- C++11之函数对象
目录 1.使用场景 2.函数对象 3.std::bind 4.总结 1.使用场景 在没有C++11的时候,我们通常使用回调函数来完成某些特定的功能,使用回调函数就需要先声明函数指针 示例: typed ...
- Windows10安装Apache2.4.54并配置PHP5.6.40/PHP8.1.11
环境 Windows 10 Apache2.4.54 PHP5.6.40/PHP8.1.11 安装Microsoft Visual C++ 下载地址:https://learn.microsoft.c ...
- JVM(Java虚拟机)整理(二)
前言 上一篇内容:JVM(Java虚拟机)整理(一)https://www.cnblogs.com/xiegongzi/p/17994659 Java 内存模型(JMM) Java 内存模型引入 声明 ...
- 教你用JavaScript实现背景图像滑动
案例介绍 欢迎来到我的小院,我是霍大侠,恭喜你今天又要进步一点点了!我们来用JavaScript编程实战案例,做一个背景图像滚动效果.滚动鼠标背景图像缩小,下方滑动出现文字.通过实战我们将学会obj. ...
- 案例:OGG目标端进程ABENDED处理
源端环境:RHEL 6.5 + Oracle 11.2.0.4 RAC + OGG 19.1.0.0.4 目标端环境:RHEL 7.6 + Oracle 19.3 + OGG 19.1.0.0.4 故 ...
- Python——检测Popen返回的stdOutMsg中是否是否包含指定字符,并提取指定位置的信息
问题背景: Python 中经常会需要通过subprocess.PoPen函数下发Shell Command,与操作系统进行交互.一些情况下,还需要分析shell command的返回值,提取有用信息 ...
- uniapp实现点击加载更多
使用场景 举个栗子:外卖app当订单商品数量比较多时,不方便一次性展示出来.通常会展示一部分,并在页面给出一个查看更多功能.点击后即可自定义展示剩余内容,比如可以每次点击多展示N个内容,或展示所有. ...
- Linux证书问题:curl#60 - “The certificate issuer‘s certificate has expired
问题说明 最近在centos7上打算安装php7版本,需要下载一个外网https的yum源,结果报错如下: 执行命令 rpm -Uvh https://mirror.webtatic.com/yum/ ...
- gitlab/github 设置 SSH
最近项目要部署到另一台机器上,故要重新 git clone 一下 一开始只是简单的设置 config 里的 user.name 和 user.email,以为就可以 clone(邮箱账户拥有项目的权限 ...
- VS2019 配置 Qt 库
如标题所说,在 VS 编译器中调用 Qt 库 首先安装一个适合 VS 的 Qt 版本 不知道怎么安装的,可以参考:Visual Studio+Qt配置开发环境 Qt 安装之后,需要在 VS 编译器中 ...