当前位置: 首页 > news >正文

如何在网站插做视频郑州app制作公司

如何在网站插做视频,郑州app制作公司,宁波网站制作首推蓉胜网络好,如何下载别人网站模板搞单片机,MCU:STM32/GD32/HC32,通讯模组:4G/WIFI/BT/433,总线:USB/CAN/K/232/485,各种常见的传感器,都接触过。 一开始学习单片机的时候没有形成很好的编写习惯,如LED点亮/熄灭/闪烁…

搞单片机,MCU:STM32/GD32/HC32,通讯模组:4G/WIFI/BT/433,总线:USB/CAN/K/232/485,各种常见的传感器,都接触过。

一开始学习单片机的时候没有形成很好的编写习惯,如LED点亮/熄灭/闪烁控制都是有一个功能新增一个函数,外面直接调用这个函数。
其实模块化的东西,就应该模块化。如同Linux的底层驱动,都是先注册一个设备类型,实现初始化、读写和控制函数。对外部只提供一个结构体指针(里面包含函数指针)。

这里就记录和分享一下驱动框架:

首先是.c和.h文件结构

  1. Include files
  2. Local type definitions (‘typedef’)
  3. Local pre-processor symbols/macros (‘#define’)
  4. Local variable definitions (‘static’)
  5. Function implementation - global (‘extern’) and local (‘static’)

.c文件应该包含以上5个部分,.h文件包含4部分(不包括static)
static:代码中内部实现的子函数、不需要外部访问的变量,都应该限制其作用域,只允许在本文件内访问。包含因代码逻辑处理或运算而定义的宏定义和宏函数也应该在本文件内定义。

其次是typedef和define

  1. typedef
    在.h文件中应该根据设备的硬件结构和配置寄存器定义一个合理的结构体,让外部调用函数指针。

如W25Q256的驱动文件可以分成2层:
一是整体驱动文件,二是功能驱动文件。

在功能驱动的.h文件中
定义了如下这么一个结构体,
typedef struct {
void (*Delay)(uint32_t);
void (*Init)(void);
void (*DeInit)(void);
void (*Active)(void);
void (*Inactive)(void);
int32_t (*Trans)(const uint8_t *, uint32_t);
int32_t (*Receive)(uint8_t *, uint32_t);
} stc_w25qxx_ll_t;
其对应的驱动函数,
int32_t W25QXX_Init(const stc_w25qxx_ll_t *pstcW25qxxLL);
int32_t W25QXX_DeInit(const stc_w25qxx_ll_t *pstcW25qxxLL);
int32_t W25QXX_GetManDeviceId(const stc_w25qxx_ll_t *pstcW25qxxLL, uint16_t *pu16ID);

可以这样总结:
1、功能驱动的.c文件基本是不包含静态变量或全局变量的,只关注于实现W25Q256对应的寄存器功能,如基本读写/擦除/获取ID/初始化等函数。借鉴下来,对于硬件模块,功能驱动文件应该只关注实现细分子功能。而不应该将上层应用的实现直接放到驱动层里面来。
2、功能驱动的.c文件的函数都要有一个底层驱动的结构体指针传进来,底层驱动无非就是初始化、读写、控制,将之封装成结构体函数指针,也尽量不包含静态变量或全局变量。供上层调用。
3、这个功能驱动文件应该是一个只需要include stdint.h、string.h的代码文件,就是模块化。

  1. define
    对于底层驱动:
    1、应该是尽量减少define定义,只关注于实现基础函数。
    2、需要实现define定义的:
    1)硬件的规格参数
    2)宏函数

对于功能驱动:
1、应该包含硬件寄存器相关的定义
2、包含相关硬件规格定义

多少个C文件

最简单的,一个C文件搞定。只提供结构体指针来调用内部的接口。
这样能做的就是,合理的设计和拆分子功能,不要出现多个接口代码类似的情况。
当然.h文件要包含必要的宏定义、宏函数和错误码、状态定义等等

两个C文件,这样搞一般是有多型号、微差别的模块,可以将功能驱动抽象出来。
如W25QXX系列,差别在于存储容量、单元大小会有不同。
这个功能驱动文件是一个标准的c文件,理论上可以在不同平台和环境使用。
最终实现是在整体驱动文件中:实现底层驱动函数和结构体指针,调用功能驱动文件实现功能。

三个C文件,则是更进一步的细分:
1、底层驱动文件
只实现底层驱动文件,属于更换编译器、芯片平台时需要修改的文件。
2、功能驱动文件
同上。逻辑抽象好之后基本不需要修改的文件。
3、整体驱动文件
引用底层驱动和功能驱动,实现上层应用需要的接口函数。

由此及彼

  1. CAN驱动
    1)一个CAN驱动首先是根据CAN ISO11898等协议,制定和拆分功能驱动文件。实现如总线初始化、总线接收配置,发送和接收回调、读取接收等函数。
    2)根据芯片平台的不同,制作底层驱动文件,实现基本驱动接口
    3)根据上层应用,或简化,或逻辑组合调用,实现上层功能接口
    这样,
    老项目换主控芯片,只需要修改底层驱动文件;
    相同芯片开发新应用,只需要修改上层功能接口;
http://www.yayakq.cn/news/251863/

相关文章:

  • 专业团队怎样建设网站小程序模板开发教程
  • 浙江常升建设有限公司网站推进网站集约化建设制度
  • 有个做搞笑视频的网站安阳县面积
  • 整站网站优化费用seo网站推广方案
  • 有一个专门做lol同人的网站大型网站建设企业名录模板
  • 何做百度推广网站市场营销的主要应用领域
  • 南昌企业网站制作五指山网站建设
  • 家具电商网站建设网站美工做专题尺寸多少
  • 制作网站用什么软件有哪些wordpress 仿北京时间
  • 沁阳建网站用vs做购物网站代码
  • 国外公司网站模板手机网站制作app
  • wordpress源码网站主题手机医疗网站模板
  • 网站 用cms 侵权免费公司网址怎么注册
  • 网站开发技术html5软件开发公司排行
  • 营销型网站的名词解释玉溪做网站
  • php网站开发班wordpress 快速安装失败
  • 网站规划与网页设计案例上海做网站公司有哪些
  • 太原智能化营销网站制作公司企业建站为什么选择网站定制
  • 网站建设阿胶膏的作用制作网页的步骤是什么
  • 网站怎么做访问量统计宣传类的网站
  • 中装建设集团有限公司股票搜索引擎优化英文简称为
  • 新手做淘宝哪个网站比较好wordpress 微信 微博
  • 福田网站设计公司免费网络推广方法
  • 成品门户网站源码免费腾云公司做网站
  • 沈阳自助模板建站网络推广引流最快方法
  • 游戏网站怎么建设上海关键词排名优化公司
  • 广告网站设计苏州工业园区限电
  • 公司做网站的费用入账苏州外贸网站建设制作方案
  • 网站建设规划设计任务书长沙网站平台建设公司
  • 网站开发资料河南航天建设工程有限公司网站