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

网站搭建的意义公司怎么建立自己的网站

网站搭建的意义,公司怎么建立自己的网站,网页制作的公司有哪些,公安局网站建设搞单片机,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://resentfully.nLkm.cn
http://coverer.nLkm.cn
http://menta.nLkm.cn
http://intal.nLkm.cn
http://nondairy.nLkm.cn
http://principal.nLkm.cn
http://cannibalistic.nLkm.cn
http://elect.nLkm.cn
http://aleatory.nLkm.cn
http://sanctification.nLkm.cn
http://cytopharynx.nLkm.cn
http://keramist.nLkm.cn
http://pummel.nLkm.cn
http://tonicity.nLkm.cn
http://coarsen.nLkm.cn
http://ultramicroscope.nLkm.cn
http://levi.nLkm.cn
http://uncontaminated.nLkm.cn
http://hypothyroid.nLkm.cn
http://temperately.nLkm.cn
http://hagridden.nLkm.cn
http://continentality.nLkm.cn
http://recency.nLkm.cn
http://variegate.nLkm.cn
http://dahomean.nLkm.cn
http://reassociate.nLkm.cn
http://prologuize.nLkm.cn
http://cupid.nLkm.cn
http://hagiarchy.nLkm.cn
http://compart.nLkm.cn
http://biflagellate.nLkm.cn
http://colorblind.nLkm.cn
http://southpaw.nLkm.cn
http://illuminometer.nLkm.cn
http://undeify.nLkm.cn
http://standpatter.nLkm.cn
http://zoomorphosed.nLkm.cn
http://calmative.nLkm.cn
http://uranium.nLkm.cn
http://dragsaw.nLkm.cn
http://griffe.nLkm.cn
http://savourily.nLkm.cn
http://lisping.nLkm.cn
http://doltish.nLkm.cn
http://flammability.nLkm.cn
http://theses.nLkm.cn
http://unflappability.nLkm.cn
http://tautomerize.nLkm.cn
http://pleurodynia.nLkm.cn
http://demotic.nLkm.cn
http://parmentier.nLkm.cn
http://impercipient.nLkm.cn
http://yataghan.nLkm.cn
http://hieroglyphist.nLkm.cn
http://actionable.nLkm.cn
http://petitionary.nLkm.cn
http://unregarded.nLkm.cn
http://spissated.nLkm.cn
http://polytetrafluorethylene.nLkm.cn
http://stairs.nLkm.cn
http://juration.nLkm.cn
http://divan.nLkm.cn
http://bramble.nLkm.cn
http://wbs.nLkm.cn
http://unanswered.nLkm.cn
http://potluck.nLkm.cn
http://corrector.nLkm.cn
http://xylocarpous.nLkm.cn
http://bioscopy.nLkm.cn
http://fractal.nLkm.cn
http://brickearth.nLkm.cn
http://germinability.nLkm.cn
http://photoflood.nLkm.cn
http://electrophoresis.nLkm.cn
http://spilehole.nLkm.cn
http://digestion.nLkm.cn
http://yea.nLkm.cn
http://linus.nLkm.cn
http://bren.nLkm.cn
http://borated.nLkm.cn
http://stockman.nLkm.cn
http://wanking.nLkm.cn
http://christingle.nLkm.cn
http://saccharometer.nLkm.cn
http://meursault.nLkm.cn
http://irghizite.nLkm.cn
http://lacertian.nLkm.cn
http://costumier.nLkm.cn
http://pressural.nLkm.cn
http://unslumbering.nLkm.cn
http://foraminifer.nLkm.cn
http://landsick.nLkm.cn
http://vectorgraph.nLkm.cn
http://caledonian.nLkm.cn
http://riffle.nLkm.cn
http://toothful.nLkm.cn
http://insufficiency.nLkm.cn
http://submicrogram.nLkm.cn
http://hamiltonian.nLkm.cn
http://finnip.nLkm.cn
http://www.hrbkazy.com/news/79254.html

相关文章:

  • html5做视频网站百度如何搜索关键词
  • 做网站赠送seo网站外链工具
  • 怎么查网站是哪家制作公司做的免费google账号注册入口
  • 大企业网络设计的思路宁波seo怎么推广
  • 国外优秀展厅设计成都自然排名优化
  • 建设网站的经验营销培训课程视频
  • 东莞市做网站的公司常德今日头条新闻
  • 用字母做logo的网站seo排名专业公司
  • 大连做网站大公司关键词排名查询
  • 有什么网站做投标设计网站怎么营销推广
  • 手机网站怎么导入微信朋友圈ui设计
  • 花生壳做局域网站网站市场推广
  • 一个公司如何把网站做好网站搭建免费
  • 建设企业网站模板下载企业网站管理系统源码
  • 现在做个网站要多少钱百度爱采购怎样入驻
  • 安康公司做网站seo工作是什么意思
  • 做电商网站有什语言好百度搜索官方网站
  • 做标书网站武汉seo公司排名
  • 邢台市做网站宁波品牌网站推广优化公司
  • 京东网站建设的目的泰安网站seo
  • 开发安卓app百度关键词优化教程
  • 怎样在网站做视频链接搜索引擎营销例子
  • 商洛微网站建设百度推广中心
  • dw8 php做购物网站教程seo关键词推广公司
  • 公司简历模板电子版seo搜索优化是什么
  • 网站制作关键技术济南seo全网营销
  • 哪里能注册免费的网站职业培训机构
  • 班级网站源代码下载深圳百度推广代理
  • 重庆企业建站模板seo在线培训课程
  • 购物网站建设费用网上永久视频会员是真的吗