大家使用华大单片机的时候,会发现在SDK开发包的驱动库及样例文件夹中会有DDL和lite两个版本的例程(因为样例也是基于相应的驱动库来开发的,所以本文后面为了称呼方便,我们把驱动库及样例简称为库)。下面两图列出了HC32F005和HC32L136 驱动库及样例文件夹中的两种库。


大家肯定会关心这两种库的区别和在使用的是时候如何来选择的问题。如果有工程师比较早就接触并使用了华大单片机会发现之前只有DDL的库,在2019年的时候出现了lite库。至于这两个库的区别大家记住“lite库是精简高效的库”这句话就可以。
先来段DDL库中uart.c里定义的Uart_EnableIrq()函数

/********************************************************************************** \brief  UART通信中断使能函数设置**** \param [in] u8Idx通道号,enIrqSel发送or接收中断使能**** \retval OK配置成功**\retval ErrorInvalidParameter配置失败******************************************************************************/
en_result_t Uart_EnableIrq(uint8_t u8Idx,en_uart_irq_sel_t enIrqSel)
{stc_uart_instance_data_t* pstcData = NULL;ASSERT(IS_VALID_CH(u8Idx));ASSERT(IS_VALID_IRQSEL(enIrqSel));pstcData = UartGetInternDataPtr(u8Idx);if (NULL == pstcData){return ErrorInvalidParameter;}switch(enIrqSel){case  UartTxIrq:pstcData->pstcInstance->SCON_f.TCIE  = 1u;break;case  UartRxIrq:pstcData->pstcInstance->SCON_f.RCIE  = 1u;break; case  UartFEIrq:pstcData->pstcInstance->SCON_f.FEIE  = 1u;break;case  UartCtsIrq:pstcData->pstcInstance->SCON_f.CTSIE = 1u;break;case  UartPEIrq:pstcData->pstcInstance->SCON_f.PEIE  = 1u;break;case  UartTxEIrq:pstcData->pstcInstance->SCON_f.TXEIE = 1u;break;default:return (ErrorInvalidParameter);       }return Ok;
}

DDL库更多的是按软件工程的思想来写出的,里面做了非常多的安全措施(如用ASSERT()断言函数来判断数据是否合法,取数据会判断是否有效等),这样在程序出问题的时候会很容易查到问题的根源。当然可靠性增加同样会增加芯片的代码量和编译后生成的文件的大小,并且会降低实现同样功能时芯片的执行效率。DDL库大多数不支持ARM最新编译器ARMCC V6。

我们再看下lite库中uart.c文件中的Uart_EnableIrq()函数

/********************************************************************************** \brief  UART通信中断使能函数设置**** \param [in] UARTx通道号,enIrqSel发送or接收中断使能**** \retval OK配置成功** \retval ErrorInvalidParameter配置失败******************************************************************************/
en_result_t Uart_EnableIrq(M0P_UART_TypeDef* UARTx, en_uart_irq_sel_t enIrqSel)
{SetBit((uint32_t)(&(UARTx->SCON)), enIrqSel, TRUE);return Ok;
}

大家看后什么感觉?清爽了吧?更符合大家的使用习惯了吧?是的,这样写出来的程序代码量非常小,而且执行效率会很高。但同时也失去了一定的可靠性(例如这里写入一个芯片中没有的UART,如UART5,程序是不会返回错误标记的)。lite库增加了对ARM最新编译器ARMCC V6的支持。


大家清楚这两种库的区别后,现在我们分别打开两个库中的空模板工程template,进行编译,查看编译结果。先看DDL库ARMCC V5.06编译,编译结果如下图

lite库ARMMCC V5.06编译,编译结果如下图

再看下lite库ARMMCC V6编译,编译结果如下图

通过上面的对比可以看出同样的编译器,lite库的程序会显著比DDL的库的生成的文件小,因为这个空模板本身没有什么功能,节省了这么多的空间已经相当可观。
同样的程序使用不同的编译器会发现 ,ARMMCC V6编译器无论是生成文件的大小,还是编译的速度都有很大的优势。


最后总结

优点 缺点
DDL 库 软件可靠性高 占空间,效率差,不支持ARMMCC V6
Lite库 省空间,效率高,支持ARMMCC V6 软件可靠性要工程师自己掌控

经过上面的介绍相信大家都已经知道该选哪个库来开发了,如果还有不明白的欢迎公众号留言交流。


关注微信公众号『芯缘意码』,查看更多内容,回复“加群”加入技术交流群。
淘宝 店铺 搜索 『芯缘意码』,购买开发学习板仿真器。

华大单片机DDL库与lite库的区别相关推荐

  1. 手把手教程1: 华大单片机HC32F460如何新建工程(ddl库版本)

    华大单片机HC32F460如何新建工程(ddl库版本) 目录 华大单片机HC32F460如何新建工程(ddl库版本) 准备工作 正式工作 开发板请点击:  https://item.taobao.co ...

  2. 华大单片机HC32F003如何新建工程(ddl库版本)

    华大单片机HC32F003如何新建工程(ddl库版本) 准备工作 正式工作 准备工作 在硬盘中找个位置建立mdk_test文件夹,此文件夹用来存储项目中调用及生成的所有非内核的文件(内核文件位置与ke ...

  3. 华大单片机如何向MDK中加入头文件和库文件

    华大单片机如何向MDK中加入头文件和库文件 关键文件介绍 加入头文件 大多数习惯于8位单片机开发的工程师,都会使用操作寄存器的方式来使用单片机.当初次接触华大单片机库开发的时候,会发现库里有好多的文件 ...

  4. mysql ddl复制_MySQL DDL-对库和表的操作

    #DDL /* 数据定义语言 库和表的管理 一.库的管理 创建.修改.删除 二.表的管理 创建.修改.删除 创建:create 修改: alter 删除:drop */ 一.库的管理 #1.库的创建 ...

  5. 华大单片机HC32F460 系列MCU

    1 摘要 本篇应用笔记主要介绍如何使用华大单片机 HC32F460 系列MCU的 DMA 模块传输数据. 2 DMA 简介 什么是 DMA? DMA(直接内存访问控制器)功能块可以不通过 CPU 高速 ...

  6. 使用st-link+keil下载和调试华大单片机的教程

    使用st-link+keil下载和调试华大单片机的教程 首先说明一下,手里只有M0和M4内核的芯片,也就只测试了这两种,但是理论上讲这个方法是通用的 一.下载支持包 从华大官网找到你芯片资料页,下载D ...

  7. 华大单片机KEIL添加ST-LINK解决方法

    使用st-link+keil下载和调试华大单片机的教程 首先说明一下,目前只测试了HC32F005,但是理论上讲这个方法是通用的 一.下载支持包 从华大官网找到你芯片资料页,下载DDL库压缩包和IDE ...

  8. 华大单片机HC32L130X

    目录 华大单片机HCL13X系列 1.简单介绍下华大单片机 2.资料获取: 3.学习思路: 4.客观意见: 5.预告 华大单片机HCL13X系列 1.简单介绍下华大单片机 第一部分都是我吐槽的地方,可 ...

  9. 华大单片机HC32L136笔段式段码LCD显示

    目录 华大单片机LCD简介 LCD 主要特性 LCD 框图 LCD 驱动波形 LCD Bias 产生电路 内部电阻模式 外部电容模式 外部电阻模式 LCD三种驱动方式对比 LCD显示模式 LCD 显示 ...

最新文章

  1. 定义命令别名(alias)
  2. Makefile之嵌套执行(9)
  3. php手机电脑,php实现用手机关闭计算机(电脑)的方法
  4. Eclipse中和编辑相关的快捷键
  5. 《设计模式解析》第1章 面向对象范型
  6. 【GIT】git 提交代码正确步骤
  7. 房友系统服务器地址,房友系统的那些功能,你都知道吗?
  8. 对期货大赛获奖者杨宏斌、陈伟的采访
  9. 简单记录 03.21
  10. vue上传大文件/视频前后端(java)代码
  11. 傅里叶变换 ~ 基 2 时间抽取 FFT 算法
  12. 关于Spark默认并行度spark.default.parallelism的理解
  13. 测试-开发的恩怨情仇
  14. 【MySQL索引】底层实现原理 MyISAM非聚簇索引 vs. InnoDB聚簇索引
  15. 摆渡人 ——克莱尔.麦克福尔 读后感
  16. 大数据 就业 缺口_中国AI&大数据就业趋势报告:平均月薪超2万,缺口650万人...
  17. CrossCore Embedded Studio——看一下新建的工程都有些什么(二)
  18. Redis之消息队列的实现
  19. JsonResult工具类
  20. java递归函数例子_Java递归函数详解附案例

热门文章

  1. 解析zxw doc文档最终版本
  2. iOS 简单的人脸识别,获取人脸位置
  3. 计算机研究生刚上岸,深度学习方向,想要就业的话,应该如何规划研究生三年?...
  4. python--千库网素材爬取
  5. 数据库删除重复(所有列都重复)数据,保留一条,并且再给此表加上联合主键
  6. 现代软件工程 第一周博客记录
  7. 8.词袋和词向量模型
  8. 电力电子技术实验-单相桥式全控整流电路实验
  9. 计算机会计模块考试,会计职称计算机考试模块windowsxp考试试题.doc
  10. Java 遍历Map常见的五种方法