查看: 2771|回复: 0

[51基础固件库项目]SDK51用户参考手册(3/4)-软件开发包

[复制链接]
  • TA的每日心情
    奋斗
    2018-10-29 22:48
  • 签到天数: 731 天

    连续签到: 1 天

    [LV.9]以坛为家II

    发表于 2014-8-27 22:02:09 | 显示全部楼层 |阅读模式
    分享到:
    软件开发包(Package
        这部分将说明SDK51的软件包。完整的软件包开发目录中包含了SDK51的库工程及代码,样例工程及源码和随软件包发布的用户使用手册和开发日志等等。虽然SDK51本身是一个非常小的项目,但是功能设计及推进过程完全是按照专业的软件开发流程完成的,甚至使用了Git作为代码仓库进行维护。
    目录结构(Directories)
    表1 SDK51软件包的文件结构
    SDK51
    doc
    存放参考手册,开发日志等文档。
    library
    build
    存放SDK51_LIB库工程组织文件,子目录output存放编译生成的SDK51.LIB文件。
    include
    存放SDK51固件库的头文件。
    source
    存放SDK51库工程实现源码文件。
    example
    01_UART_Hello
    演示串口样例工程。第一个演示工程。
    02_TICK_Delay
    演示滴答时基延时服务。
    03_TICK_Callback
    演示滴答回调服务。第一个注册中断回调工程。
    04_GPIO_LED
    演示GPIO控制闪烁LED。
    05_GPIO_Key
    演示GPIO检测按键。
    06_INT_Callback
    演示注册外部中断回调服务。
    段编译架构(Build Steps)
    SDK51工程的组织是基于二段编译的架构。首先,要编译一下SDK51的库工程,生成一个“SDK51.LIB”的库文件。然后才能编译各个样例工程,样例工程均包含这个公共的库文件。这是很多成熟软件的开发方式,使用库可以封装凌乱的内部实现(实际上SDK51的设计很清晰,代码也很规整),而且一次编译多次使用可以减少大量应用工程的编译时间,当然也能减少硬盘的存储空间。当然,还有保证代码一致性等等,总之,各种好处。
    然而,实际发布的SDK51软件包中可能只包含已经预先编译好的SDK51.LIB库文件,而不再需要第一次编译。这倒不是说我小气不愿意开发SDK51实现的源代码,事实上51单片机的代码也什么可藏着掖着的。只是SDK51强调使用API进行开发,而不必纠结代码的实现过程。当然,如果在使用过程中遇到bug也可以给我写电子邮件,我会非常高兴别人帮我在我的代码里帮我抓虫子(Bug)的。这里可以保证SDK51是用百分之百的C51语言实现的,兼容所有的符合标准51单片机架构的芯片,而且也没有设计什么后门,可以放心使用并且不用担心泄漏你的私密信息。
    样例程序摘要(Examples)
    跟随SDK51一同发布的若干个样例程序演示了SDK51中每一个API的使用场景,每个工程都是经过测试的,完全可以保证在你自己的板子上欢快地跑起来。
    表1中列出了每个样例小程序用到的API。
    表1 SDK51样例程序
    样例程序
    程序执行说明
    主要用到的API
    UART_Hello
    第一个样例程序,演示基本的系统启动过程,然后通过串口发出欢迎信息,然后回显从串口接收到任何数据。
    SYSTEM_Init()
      
    SYSTEM_Start()
      
    UART_PutStr()
      
    UART_PutChar()
    TICK_Delay
    每隔一段时间通过串口发出一些字符串,说明延时函数的使用。
    TICK_Delay()
    TICK_Callback
    每隔一段时间通过串口发出一些字符串,说明延时回调的使用。第一次使用注册回调函数。
    TICK_InstallCallback()
    GPIO_LED
    使用GPIO控制连接在引脚上的一盏小灯。
    GPIO_SetPinsDir()
      
    GPIO_SetPins()
      
    GPIO_ResetPins()
    GPIO_Key
    使用GPIO读取一个外部按键的状态,根据与按键连接的引脚电平控制小灯的闪烁。
    GPIO_GetPins()
    INT_Callback
    通过连接在INT0和INT1引脚上的两个按键触发外部中断事件,从而控制小灯的闪烁。
    INT0_InstallCallback()
      
    INT1_InstallCallback()
    用心的读者在做实验的时候必然会发现,编译样例工程会产生不少警告“Warning”,如图3所示。
                                  
    图3 编译SDK51应用程序的警告
    写程序的时候最好不要有“Warning”,因为它们可能是潜在的“Error”。但在这里我们忍了,为啥?因为C51的编译器实在是太笨了!大多数编译器在链接的时候可以自动排除未使用过的程序段,但是C51的就是不行,只是傻乎乎地说“XXX未使用”,然后还是把没有用到过的程序段打包到可执行文件中。同样,在图3中也可以看出,一个简单的小程序竟然使用了如此大的内部存储。
    这里还要说明的是,SDK51其实说起来算是一个“玩具”级的开发平台,用于快速开发系统设计模型用的,主要在于简单好用,也就是强调用户体验。如果用所谓的“code size”和“performance”来评价SDK51,那它简直是一塌糊涂。而从实用的角度上看,片上存储资源只要能满足应用程序就够用。拼命的优化,留着那么多存储空间实在是浪费。绝大多数Android系统的运行平台配置比iOS系统高得不是一点半点,结果iOS运行的好好的,Android就总是当机。用户体验很重要!
    无论如何,这里还是列出一个表格,让大家对SDK51的片上内存空间使用量有个印象。如果是系统资源非常紧缺或是存储空间有洁癖的开发者,好吧,SDK51并不是一个非常合适的选择。表2中的数据均为在没有启动任何编译器优化的实验结果。
    表2 样例工程使用内存状况
    样例工程
    RAM占用(Byte)
    xDATA占用(Byte)
    FLASH占用(Byte)
    UART_Hello
    32.1
    0
    1473
    TICK_Delay
    32.1
    0
    1557
    TICK_Callback
    34.2
    0
    1556
    GPIO_LED
    30.1
    0
    1552
    GPIO_Key
    30.1
    0
    1568
    INT_Callback
    29.3
    0
    1632
    这样的系统开销,对于现在市面上的流行的各种51单片机来说,基本上都可以胜任了。

    回复

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /4 下一条



    手机版|小黑屋|与非网

    GMT+8, 2024-11-15 09:23 , Processed in 0.104874 second(s), 15 queries , MemCache On.

    ICP经营许可证 苏B2-20140176  苏ICP备14012660号-2   苏州灵动帧格网络科技有限公司 版权所有.

    苏公网安备 32059002001037号

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.