引言
mcs-51系列单片机应用广泛,在我国学习研究的人较多。使用c语言在单片机上开发程序可提高开发效率,目前针对该内核兼容单片机开发的c语言编译器有keil、tasking、raisonance、iar和hi-tech等,但这些都是商业化的产品,使用需要付费购买。使用专为单片机开发的免费c语言编译器sdcc(small device c compiler)则是一个不错的选择。
由于技术和工艺的发展,各种mcs~51系列内核兼容的新型单片机不断推出,除了运行速度提高,内部资源也逐渐丰富。例如,silicon labs公司推出的c8051f系列单片机,兼容8051内核,功能强大,运算速度快,处理能力强,为复杂软件的运行提供了可能。
本文介绍了sdcc编译器和freertos实时操作系统,在c8051f340上移植了freertos并使用sdcc编译开发了门禁系统。事实证明,使用免费的资源完全可以满足某些系统的开发需求。
1 sdcc编译器和freertos简介
sdcc是sandeep dutta为8位微控制器设计的一个开放源代码、可编译产生不同cpu的目标代码、优化的ansi-c编译器。当前版本的目标cpu是intel公司的 mcs-51兼容系列微处理器芯片、dallas公司的ds80c390系列、freescale公司的hc08系列、microchip公司的pic系列和atmel公司的avr系列等。sdcc编译器的代码遵循gpl协议发布,可以免费使用。
freertos是为小型嵌入式系统开发的一个开放源代码、免费的实时操作系统内核。其内核大部分使用c语言编程,具有高度的可移植性,目前已经被移植到的处理器平台超过19种。freertos操作系统商业应用免费,具有源码公开、可移植、可裁减、调度策略灵活的特点,可以方便地移植到各种单片机上运行。freertos提供的功能包括任务管理、时间管理、信号量、消息队列、内存管理等功能,可基本满足较小系统的需要。
2 freertos在c8051 f340中的移植和调试
freertos设计时就考虑了在各种平台上的可移植性,内核大部分代码使用c语言编写,少数代码使用相应平台的汇编语言编写并且这部分被压缩到最小。 freer-tos已经被移植到各种微控制器上,在8051平台上也有相应的移植代码。从freertos网站下载得到的程序中,包含了一个在 c8051f120单片机上的移植版本。c8051f120和c8051f340单片机在硬件资源上的主要差别,如表1所列。
freertos对目标平台硬件资源的要求不高,最后编译的目标代码量由所选配置选项决定。一般需要2 kbram和10 kb左右的rom即可运行。由表1可以看出,二者的硬件平台比较接近,因此移植工作量不大。针对c8051f120和c8051f340单片机硬件平台的差别,将在c8051f120单片机上运行的freertos移植到c8051f340平台上所做的工作包括:替换c8051f120cpu的头文件,调整ram范围大小,修改外部晶振频率,修改时钟滴答数等。
修改的文件有freertos\demo\
freertos的c8051f120平台移植代码中使用定时器2来产生系统所需的定时中断。c8051f340和c8051f120的定时器 2寄存器配置略有不同,port.c中的static void prvsetuptimerinterrupt(void)函数修改后内容如下:
silicon labs公司提供了一个集成开发环境(ide),可方便地使用该ide开发c8051f系列单片机程序。该ide支持多种第三方编译工具,如keil、 raisonance、tas-king、hi-tech、sdcc和iar等,使用时只需安装对应的软件,然后设置编译器的安装路径和编译选项即可,如图1所示。本文只对涉及sdcc的选项进行说明。
sdcc可从http://sdcc.sourceforge.net下载得到。本文使用的版本为sdcc-win32 2.8.0,具体安装方法和步骤参考sdccman.pdf手册。安装完后,在c8051f340平台上编译freertos的sdcc选项,如表2所列。
3 在门禁系统中使用freertos
freertos移植完成后,成功地在开发的门禁系统中得到了应用验证。该门禁系统实现的功能主要有:实现刷id卡开门,利用键盘输入住户号和密码开门,住户数据使用gprs服务通信实现数据远程管理等。
硬件系统主要由c8051f340单片机、id卡读卡模块、gprs模块、键盘/显示模块和存储器模块等组成,系统结构如图3所示。
系统软件上如果使用传统的前后台程序设计思路,则程序结构复杂,设计周期长,测试困难。使用实时操作系统,可将系统按功能和设备依赖性的原则划分为不同的任务,各个任务可以看作是并行执行,任务之间使用实时操作系统提供的api实现存储器互斥访问和其他资源的同步等,可以较好地满足该系统的需求。
根据系统的功能,建立3个任务:id卡读卡处理任务、键盘/显示任务和gprs数据通信处理任务。各个任务的功能如下:
①id卡读卡处理任务vidtask。id卡读卡任务主要完成id卡卡号的读取和识别等功能,优先级最高。
②键盘/显示任务vkeydisptask。键盘/显示模块主要完成人机交互和日期的显示,错误信息的提示等,优先级次之。
③gprs数据通信处理任务vg-prstask。gprs数据通信任务主要完成与管理端gprs模块的通信连接和gprs协议数据的处理等,优先级最低。
另外,gprs模块使用串行通信口与c8051f340通信,串口的接收程序采用中断服务程序,不受操作系统的管理。当收到对应的信息时,向 gprs数据通信处理任务发送消息,gprs数据通信处理任务再进行处理。建立的三个任务都有可能同时读写存储器,因此建立一个互斥信号量,当需要操作存储器时,先得到这个信号量,存储器操作完毕后再释放这个信号量。id卡读卡处理任务的代码中互斥信号量的使用如下:
系统主函数主要完成硬件初始化,建立信号量、任务和各个任务的启动等。部分代码实现如下:
4 结论
使用sdcc编译器和 freertos操作系统等免费资源开发系统程序,能够减少工作量,降低开发成本,具有很大的优势。sdcc编译器应用灵活,配置方便,freertos 经过修改裁减后,代码精简,结构紧凑,适合于小型嵌入式系统应用。作者在门禁系统中应用得到成功的验证;但是sdcc和 freertos仍有许多缺点,如sdcc没有ide,编译配置选项复杂,freertos提供的服务功能有限等。
北京阿贝克ABEK LVDT位移传感器
大两门家用冰箱盘点 让健康时刻伴随你的左右
一文解析TYPE-C接口的内部构造
哪款蓝牙耳机品质高?佩戴舒适的蓝牙耳机盘点
哪款蓝牙耳机音质好?音质好的四款蓝牙耳机推荐
SDCC编译器和FreeRTOS实时操作系统的优缺点及应用研究
二氧化钒材料相变的太赫兹光谱与阵列成像
寿命长、稳定性高的μLED技术简介
正弦交流电如何形成
对于物联网而言,传感器发挥着至关重要的作用
中国机器人密度的发展是世界上最具活力的
德州仪器(TI)智能燃气表和水表解决方案
11月内存出货排行显示金士顿稳居第一 第二名出货量竟少一半
联动台采用了什么特殊设计,它的特点是什么
研究团队通过新型OLED开发数据传输速率达2.2Mb/s的VLC装置
华为拿下5G短码影响深远, 对此你却一无所知?
手机子品牌哪家强_对比分析竟是它
莱特波特科技推动“5G”WiFi产品的快速导入
今年LED链经营普遍不佳 台厂在陆投资却不减反增
场效应管发热严重的原因