授权发明专利 35项 

支撑专利技术 30项

所有产品/方案可定制和二次开发 

  服务热线

  18688755863   产品购买

               13825202170     技术咨询

               18923482170     客户对接


【技术心得】对公司网关产品软件架构的理解

作者:深圳蓝奥声科技有限公司 浏览: 发表时间:2020-12-29 11:01:34

刚好来公司也一个月了。就谈谈一个月时间我对公司产品的软件框架的理解。


所有的程序其实都是一个死循环,尤其是在学单片机的时候这种感觉最明显。那时候写的一些简单的程序都是直接放在 `main()` 函数的主循环里。后来要写复杂一点,功能比较多的程序的时候再用这种写法其实就很不合适了,这时候就需要用到分时多任务管理框架,更复杂的一些产品还会用到实时操作系统。


但不管是使用分时多任务,还是实时系统,其实主要目的都是为了把一个复杂的系统分成多个任务或线程,让他们彼此相对独立的去运行。一般要去维护这种项目都是先看他有多少个任务,再按照先易后难的顺序把一个个任务的功能逻辑搞清楚,这样一个新的项目就算基本上手了。不过我们公司的产品是在芯片厂商提供的一种 SDK 开发包的基础上二次开发。他既没有实时系统,也没有任务管理函数(其实不是没有,而是 SDK 隐藏起来了对开发人员不可见)。


以网关的 ESP8266 为列, 乐鑫 SDK 只给了一个 `user_init()` 函数,只能在他给的这个函数里执行上电初始化,和配置之类的工作,初始化完了之后系统运行到哪里去了,完全不知道,剩下的所有业务逻辑都是在各种回调函数里执行的。各种各样的回调函数,让人摸不着头脑。而且我对网络这方面不是很懂,所以对他的业务流程、逻辑也不清楚,让我一下子有一种找不着北的感觉。


好在这种感觉持续没多久,很快就找到了其中的一些套路。比如说 SDK 会提供软件定时器,用户可以初始化一个定时器,在初始化的时候指定这个定时器的时间、和回调函数,这样这个定时器就会每隔指定的时间间隔,运行一次那个回调函数,这种机制就可以看成是一个任务管理函数。那个回调函数就相当于一个任务。其他的功能函数也是类似的模式。


串口接收数据,就是串口开启了一个中断,当中断接收到指定长度的数据后就会调用配置好的一个串口接收函数。用户对串口数据的处理就写在这个串口接收函数里。其他的 TCP HTTP 的客户端和服务端也是一样的,先创建一个 TCP 套件字,再指定套接字的各种回调函数,接收到数据就会执行一次接收回调函数,用户可以在回调函数里处理接收到的数据。他们就像单片机里的各种模块的中断,不过单片机里的是一种硬件中断,执行中断程序的时候会独占 CPU 资源,系统的节拍就不能正常的更新(可以理解为系统心跳停止),会导致其他的应用函数延时变大(实时性降低),所以单片机是要求中断里的程序尽可能的简洁,***只做一个标记,由其他的应用层任务通过相关标记去处理具体的事件。


乐鑫的 SDK 提供的回调函数,应该是一种用软件模拟的中断,不是真的在硬件中断里执行的。所以他提供的这些回调函数可以理解成是一个个线程,平时没事事件的时候他们不会被执行,相当于处于一种休眠状态,但是一旦有相关的事件发生他们就会被后台调用(后台应该也是一种分时多任务管理函数)。


***的总结(个人观点)

1. 对于一个项目的熟悉和了解需要从两个维度去看——横向和纵向。

2. 横向就是对于各个不同的任务或线程的理解。

3. 纵向就是从硬件的操作和到应用层的业务流程,也就是从底层到应用层。


文章推荐
图片展示
公众号
在线咨询

您好,请点击在线客服进行在线沟通!

联系方式
热线电话
18688755863
上班时间
周一到周六
E-mail地址
liangjingshan@alm-iot.cn
扫一扫二维码
二维码
添加微信好友,详细了解产品
使用企业微信
“扫一扫”加入群聊
复制成功
添加微信好友,详细了解产品
我知道了
粤ICP备14082221号