为嵌入式设备提供弱小的日志输入配置-log.h (为嵌入式设备提供的java版本是什么)
置信大少数嵌入式开发者都会碰到对程序启动调试或许查找BUG的状况,经常出现的两种方法都是仿真和经过日志启动的。
有条件仿真的是更好,单是在编写嵌入式软件程序环节中,并不是一切的配件都允许仿真或许繁难仿真,这样大少数方法便是加打印信息启动找疑问。
打印的接口有很多种,比如串口,网络,显示等等。繁难的配件开发串口预计是最罕用的。这里繁难记载下一种日志打印方法。
目标:
基本常识
C言语中的__FILE__、LINE__和__FUNCTION:
注:
源码
#defineDEBUG_EN(1u)#if(DEBUG_EN)#defineDEBUG_MAX_SIZE512externcharszBuf[DEBUG_MAX_SIZE];#defineDEBUG_INFO(format,...)do{u16unLen=0;unLen+=snprintf(szBuf+unLen,DEBUG_MAX_SIZE,"[INFO][%s][@%s][#%d]:",__FILE__,__FUNCTION__,__LINE__);unLen+=snprintf(szBuf+unLen,DEBUG_MAX_SIZE-unLen,format,##__VA_ARGS__);usart1_send_buf_with_txe((u8*)szBuf,unLen);}while(0)#defineDEBUG_WARN(format,...)do{u16unLen=0;unLen+=snprintf(szBuf+unLen,DEBUG_MAX_SIZE,"[WARN][%s][@%s][#%d]:",__FILE__,__FUNCTION__,__LINE__);unLen+=snprintf(szBuf+unLen,DEBUG_MAX_SIZE-unLen,format,##__VA_ARGS__);usart1_send_buf_with_txe((u8*)szBuf,unLen);}while(0)#defineDEBUG_ERR(format,...)do{u16unLen=0;unLen+=snprintf(szBuf+unLen,DEBUG_MAX_SIZE,"[ERR][%s][@%s][#%d]:",__FILE__,__FUNCTION__,__LINE__);unLen+=snprintf(szBuf+unLen,DEBUG_MAX_SIZE-unLen,format,##__VA_ARGS__);usart1_send_buf_with_txe((u8*)szBuf,unLen);}while(0)#elif#defineDEBUG_INFO(...)#defineDEBUG_WARN(...)#defineDEBUG_ERR(...)#endif
源码关键经常使用宏定义的方式,为了允许文件、行号,函数等等,不能经常使用独自的函数启动定义。详细要素可以思索下,不过多赘述。
C文件目前只要一个数组定义charszBuf[DEBUG_MAX_SIZE];。
为了兼容,INFO,WARN和ERR三个共用一个buf,申明全局变量更关键的一个要素是经常使用了串口的终止发送函数usart1_send_buf_with_txe,而不是循环发送成功再分开,这里传输是启动指针传递的,发送经常使用终止的好处就是高效率,不耽误其余程序跑。
当然移植的时刻齐全可以依据自己的接口和成功方式启动改换。
成成成果:
[INFO][..sourcemn.c][@main][#36]:testStr[111],testInt[111],testHex[0x000015BC][WARN][..sourcemain.c][@main][#37]:testStr[111],testInt[111],testHex[0x000015BC][ERR][..sourcemain.c][@main][#38]:testStr[111],testInt[111],testHex[0x000015BC]
发送syslog时openlog函数可以不用吗
发送syslog时openlog函数可以不用是一种工业标准的协议,可用来记录设备的日志。 Ubuntu下安装syslogapt-get install inetutils-syslogd这里面的三个函数openlog, syslog, closelog是一套系统日志写入接口。 另外那个vsyslog和syslog功能一样,只是参数格式不同。 通常,syslog守护进程读取三种格式的记录消息。 此守护进程在启动时读一个配置文件。 一般来说,其文件名为/etc/,该文件决定了不同种类的消息应送向何处。 例如,紧急消息可被送向系统管理员(若已登录),并在控制台上显示,而警告消息则可记录到一个文件中。 该机制提供了 syslog函数,其调用格式如下#include <syslog.h>void openlog (char*ident,int option ,int facility);void syslog(int priority,char*format,……)void closelog();调用openlog是可选择的。 如果不调用openlog,则在第一次调用syslog时,自动调用openlog。 调用closelog也是可选择的,它只是关闭被用于与syslog守护进程通信的描述符。 调用openlog 使我们可以指定一个ident,以后, 此ident 将被加至每则记录消息中。 ident 一般是程序的名称(例如 ,cron ,ine 等)程序的用法示例代码如下:#include <syslog.h>int main(int argc, char **argv){openlog(MyMsgMARK, LOG_CONS | LOG_PID, 0);syslog(LOG_DEBUG,This is a syslog test message generated by program %s\n,argv[0]);closelog();return 0;}编译生成可执行程序后,运行一次程序将向/var/log /message文件添加一行信息如下:Feb 12 08:48:38 localhost MyMsgMARK[7085]: This is a syslog test message generated by program ./函数及参数syslog函数用于把日志消息发给系统程序syslogd去记录,此函数原型是:void syslog(int priority, const char *format, ...);第一个参数是消息的紧急级别,第二个参数是消息的格式,之后是格式对应的参数。 就是printf函数一样使用。 如果我们的程序要使用系统日志功能,只需要在程序启动时使用openlog函数来连接 syslogd程序,后面随时用syslog函数写日志就行了。 下面介绍在RedHat和ubuntu中如何配置它:Ubuntu和红帽常使用它,并且通过文件/etc/进行管理。 文件中包含许多指定的特殊系统日志:有的是控制台方面的,有的是文件方面或其它主机的。 首先,我们需要载入合适的TCP和UDP插件以支持接收系统日志。 把下面的代码添加到的头部:$modload imtcp$modload imudp$InputTCPServerRun $UDPServerRun 514载入的这两个模块能支持监听TCP和UDP的端口,并且指定哪个端口来接受事件,在这种情况下,使用TCP的端口和UDP的514端口。 你需要确认一下本地防火墙(在你的主机和中央系统日志服务器之间的防火墙)下面我们需要指定一些规则来告诉rSyslog在哪放输入事件。 如果你不添加任何规则,输入事件将按照本地的规则进行处理,并且与本地主机的事件交织在一起。 我们需要在上面添加节之后和本地处理系统日志之前来正确的指定这个规则,例如:if $fromhost-ip isequal 192.168.0.2 then /var/log/& ~这里我们说的每一个来自于192.168.0.2的系统日志都应该保存在/var/log/文件中。 &~这个符号是非常重要的,因为它告诉rSyslog将停止处理消息。 如果你把它忘写了,消息将越过下一个规则,并且继续处理。 在这一规则中还有其他的变量。 例如:if $fromhost-ip startswith 192.168. then /var/log/& ~这里我们用192.168.*替代了以这个为开始的所有IP地址,写入到/var/log/文件中。 你还可以看到一些其它的过滤。 你将需要重启这个rsyslog服务来激活我们所做的新的配置:$ sudo service rsyslog restart现在,对于发送方的主机,我们还需要对文件进行一些更改,在文件的头部,添加下面这行:*.* @@192.168.0.1这是发送的所有事件,来自于所有源代码和所有重要级别(用*.*),通过TCP协议传给IP地址为192.168.0.1的端口。 你可是用你所在环境的地址来替换这个IP地址。 要启用此配置,你将需要重启主机上的rSyslog。 你可以通过SSL/TLS更进一步地发送你的系统日志。 如果你在互联网上或其它网络间传输系统日志,这也没什么坏处,你可能会发现这个的简单说明。 现在,如果给你的配置管理系统(如果不使用这个,你可以试一试Puppet或Cfengine工具)添加这个配置,然后,您可以用适当的系统日志来有效地配置每台主机,以确保你的日志将被发送到中央系统日志服务器。
什么是嵌入式操作系统?
嵌入式操作系统EOS(Embedded)是一种用途广泛的系统软件,过去它主要应用于工业控制和国防系统领域。EOS负责嵌人系统的全部软、硬件资源的分配、调度工作,控制协调并发活动;它必须体现其所在系统的特征,能够通过装卸某些模块来达到系统所要求的功能。目前,已推出一些应用比较成功的EOS产品系列。随着Internet技术的发展、信息家电的普及应用及EOS的微型化和专业化,EOS开始从单一的弱功能向高专业化的强功能方向发展。嵌人式操作系统在系统实时高效性、硬件的相关依赖性、软件固态化以及应用的专用性等方面具有较为突出的特点。EOS是相对于一般操作系统而言的,它除具备了一般操作系统最基本的功能,如任务调度、同步机制、中断处理、文件功能等外,还有以下特点:
(1)可装卸性。开放性、可伸缩性的体系结构。
(2)强实时性。EOS实时性一般较强,可用于各种设备控制当中。
(3)统一的接口。提供各种设备驱动接日.
(4)操作方便、简单、提供友好的图形GUI,图形界面,追求易学易用.
(5)提供强大的网络功能,支持TCP门P协议及其它协议,提供TCP/UDP/IP/PPP协议支持及统一的MAC访问层接口,为各种移动计算设备预留接口.
(6)强稳定性,弱交互性。嵌入式系统一旦开始运行就不需要用户过多的干预,这就要负责系统管理的EOS臭有较强的稳定性。嵌入式操作系统的用户接日一般不提供操作命令,它通过系统调用命令向用户程序提供服务。
(7)固化代码。在嵌入系统中,嵌入式操作系统和应用软件被固化在嵌入式系统计算机的ROM中。辅助存储器在嵌入式系统中很少使用,因此,嵌入式操作系统的文件管理功能应该能够很容易地拆卸,而用各种内存文件系统.
(8)更好的硬件适应性,也就是良好的移植性.
国际上用于信息电器的嵌入式操作系统有40种左右。现在,市场上非常流行的EOS产品,包括3Corn公司下属子公司的PalmOS,全球占有份额达50%,MicroS。fi公司的Wind。wsCE不过29%。在美国市场,PalmOS更以80%的占有率远超WindowsCE。开放源代码的Linux很适于做信息家电的开发.
比如:中科红旗软件技术有限公司开发的红旗嵌入式Linux和美商网虎公司开发的基于Xlinux的嵌人式操作系统“夸克”。“夸克”是目前全世界最小的Linux,它有两个很突出的特点,就是体积小和使用GCS编码。
常见的嵌入式系统有:Linux、uClinux、WinCE、PalmOS、Symbian、eCos、uCOS-II、VxWorks、pSOS、Nucleus、ThreadX、Rtems、QNX、INTEGRITY、OSE、CExecutive.
嵌入式操作系统的发展
1.引言
嵌入式操作系统与嵌入式系统密不可分。嵌入式系统主要由嵌入式微处理器、外围硬件设备、嵌入式操作系统以及用户的应用程序等四个部分组成,它是集软硬件于一体的可独立工作的“器件”。
嵌入式技术的发展,大致经历了四个阶段[1]。
第一阶段是以单芯片为核心的可编程控制器形式的系统,同时具有与监测、伺服、指示设备相配合的功能。这种系统大部分应用于一些专业性极强的工业控制系统中,一般没有操作系统的支持,通过汇编语言编程对系统进行直接控制,运行结束后清除内存。
第二阶段是以嵌入式CPU为基础、以简单操作系统为核心的嵌入式系统。这一阶段的操作系统具有一定的兼容性和扩展性,但用户界面不够友好。
第三阶段是以嵌入式操作系统为标志的嵌入式系统。这一阶段系统的主要特点是:嵌入式操作系统能运行于各种不同类型的微处理器上,兼容性好;操作系统内核精小、效率高,并且具有高度的模块化和扩展性;具备文件和目录管理、设备支持、多任务、网络支持、图形窗口以及用户界面等功能;具有大量的应用程序接口(API),开发应用程序简单;嵌入式应用软件丰富。
第四阶段是以基于Internet为标志的嵌入式系统,这是一个正在迅速发展的阶段。目前大多数嵌入式系统还孤立于Internet之外,但随着Internet的发展以及Internet技术与信息家电、工业控制技术等结合日益密切,嵌入式设备与Internet的结合将代表着嵌入式技术的真正未来[2]。
嵌入式系统的发展对嵌入式操作系统提出了更高的要求。因此,对嵌入式操作系统的结构、设计、用户界面等诸多方面进行深入研究,将有助于嵌入式系统的应用和发展。
2.嵌入式操作系统的特点
2.1嵌入式系统的开发人员对操作系统的依赖性
早期的硬件设备很简单,软件的编程和调试工具也很原始,与硬件系统配套的软件都必须从头编写。程序大都采用宏汇编语言,调试是一件很麻烦的事。随着系统越来越复杂,操作系统就显得很必要。
(1)操作系统能有效管理越来越复杂的系统资源。
(2)操作系统能够把硬件虚拟化,使得开发人员从繁忙的驱动程序移植和维护中解脱出来。
(3)操作系统能够提供库函数、驱动程序、工具集以及应用程序。
在70年代的后期,出现了嵌入式系统的操作系统。在80年代末,市场上出现了几个著名的商业嵌入式操作系统,包括Vxwork、Neculeus、QNX和WindowsCE等,这些系统提供性能良好的开发环境,提高了应用系统的开发效率。
2.2嵌入式操作系统的特点
与其他类型的操作系统相比,嵌入式操作系统具有以下一些特点。
(1)体积小。嵌入式系统有别于一般的计算机处理系统,它不具备像硬盘那样大容量的存储介质,而大多使用闪存(FlashMemory)作为存储介质。这就要求嵌入式操作系统只能运行在有限的内存中,不能使用虚拟内存,中断的使用也受到限制。因此,嵌入式操作系统必须结构紧凑,体积微小。
(2)实时性。大多数嵌入式系统都是实时系统,而且多是强实时多任务系统,要求相应的嵌入式操作系统也必须是实时操作系统(RTOS)[8]。实时操作系统作为操作系统的一个重要分支已成为研究的一个热点,主要探讨实时多任务调度算法和可调度性、死锁解除等问题。
(3)特殊的开发调试环境。提供完整的集成开发环境是每一个嵌入式系统开发人员所期待的。一个完整的嵌入式系统的集成开发环境一般需要提供的工具是编译/连接器、内核调试/跟踪器和集成图形界面开发平台。其中的集成图形界面开发平台包括编辑器、调试器、软件仿真器和监视器等。
3.嵌入式操作系统的发展状况
国外嵌入式操作系统已经从简单走向成熟,主要有Vxwork、QNX、PalmOS、WindowsCE等。国内的嵌入式操作系统研究开发有2种类型,一类是基于国外操作系统二次开发完成的,如海信的基于WindowsCE的机顶盒系统;另一类是中国自主开发的嵌入式操作系统,如凯思集团公司自主研制开发的嵌入式操作系统HopenOS(“女娲计划”)等。
WindowsCE内核较小,能作为一种嵌入式操作系统应用到工业控制等领域。其优点在于便携性、提供对微处理器的选择以及非强行的电源管理功能。内置的标准通信能力使WindowsCE能够访问Internet并收发E_mail或浏览Web。除此之外,WindowsCE特有的与Windows类似的用户界面使最终用户易于使用。WindowsCE的缺点是速度慢、效率低、价格偏高、开发应用程序相对较难。
3Com公司的PalmOS在掌上电脑和PDA市场上独占其霸主地位,它有开放的操作系统应用程序接口(API),开发商可根据需要自行开发所需的应用程序。
QNX是由加拿大QSSL公司开发的分布式实时操作系统,它由微内核和一组共操作的进程组成,具有高度的伸缩性,可灵活地剪裁,最小配置只占用几十KB内存。因此,可以广泛地嵌入到智能机器、智能仪器仪表、机顶盒、通讯设备、PDA等应用中去[6][7]。
HopenOS是凯思集团自主研制开发的嵌入式操作系统,由一个体积很小的内核及一些可以根据需要进行定制的系统模块组成。其核心HopenKernel一般为10KB左右大小,占用空间小,并具有实时、多任务、多线程的系统特征。
在众多的实时操作系统和嵌入式操作系统产品中,WindRiver公司的VxWorks是较为有特色的一种实时操作系统[5]。VxWorks支持各种工业标准,包括POSIX、ANSIC和TCP/IP网络协议。VxWorks运行系统的核心是一个高效率的微内核,该微内核支持各种实时功能,包括快速多任务处理、中断支持、抢占式和轮转式调度。微内核设计减轻了系统负载并可快速响应外部事件。在美国宇航局的“极地登陆者”号、“深空二号”和火星气候轨道器等登陆火星探测器上,就采用了VxWorks,负责火星探测器全部飞行控制,包括飞行纠正、载体自旋和降落时的高度控制等,而且还负责数据收集和与地球的通信工作。目前在全世界装有VxWorks系统的智能设备数以百万计,其应用范围遍及互联网、电信和数据通信、数字影像、网络、医学、计算机外设、汽车、火控、导航与制导、航空、指挥、控制、通信和情报、声纳与雷达、空间与导弹系统、模拟和测试等众多领域。
4.1嵌入式Linux的应用开发前景
Linux是个与生俱来的网络操作系统,成熟而且稳定。Linux是源代码开放软件,不存在黑箱技术,任何人都可以修改它,或者用它开发自己的产品。Linux系统是可以定制的,系统内核目前已经可以做得很小。一个带有中文系统及图形化界面的核心程序也可以做到不足1MB,而且同样稳定。Linux作为一种可裁减的软件平台系统,是发展未来嵌入设备产品的绝佳资源,遍布全球的众多Linux爱好者又能给予Linux开发者强大的技术支持。因此,Linux作为嵌入式系统新的选择,是非常有发展前途的。
(1)与硬件芯片的紧密结合
后PC时代的智能设备已经逐渐地模糊了硬件与软件的界限,SOC系统(SystemOnChip)的发展就是这种软硬件无缝结合趋势的证明。随着处理器片内微码的发展,在将来可能出现在处理器片内嵌进操作系统的代码模块。
嵌入式Linux的一大特点是:与硬件芯片(如SOC等)的紧密结合。它不是一个纯软件的Linux系统,而比一般操作系统更加接近于硬件。嵌入式Linux的进一步发展,逐步地具备了嵌入式RTOS的一切特征:实时性及与嵌入式处理器的紧密结合。
(2)开放的源代码
嵌入式Linux的另一大特点是:代码的开放性。代码的开放性是与后PC时代的智能设备的多样性相适应的。代码的开放性主要体现在源代码可获得上,Linux代码开发就像是“集市式”开发,任意选择并按自己的意愿整合出新的产品。
对于嵌入式Linux,事实上是把BIOS层的功能实现在Linux的driver层。目前,在Linux领域,已经出现了专门为Linux操作系统定制的自由软件的BIOS代码,并在多款主板上实现此类的BIOS层功能。
(3)嵌入式Linux与硬件芯片的紧密结合
对于许多信息家电的应用来说,嵌入的性能指标是最难满足的,只有靠提高芯片的集成度与装配密度来解决。嵌入式Linux与标准Linux的一个重要区别是嵌入式Linux与硬件芯片的紧密结合。这是一个不可逾越的难点,也是嵌入式Linux技术的关键之处。嵌入式Linux和商用专用RTOS一样,需要编写BSP(BoardSupportPackage),这相当于编写PC的BIOS。这不仅仅是嵌入式Linux的难点,也是使用商用专用RTOS开发的难点。硬件芯片(SOC芯片或者是嵌入式处理器)的多样性也决定了代码开放的嵌入式Linux的成功。嵌入式系统的发展,必然导致软硬件无缝结合的趋势,逐渐地模糊了硬件与软件的界限,在将来可能出现SOC片内的操作系统代码模块。
随着处理器片内微码的发展,在将来应出现在处理器片内嵌进操作系统的代码模块,很显然模块将具有安全性好、健壮性强、代码执行效率高等特点。着眼于未来的嵌入式系统的发展,我们基于对嵌入式Linux技术的深入研究,对嵌入式处理器及SOC系统的深刻理解和研究;对EDA技术的深入研究;对模拟数字混合集成电路芯片的深入研究;对SOC片内进行嵌入式Linux操作系统代码的植入研究。此类的研究有可能减轻系统开发者对BSP开发的难度要求,并使得嵌入式Linux能够成为普及的嵌入式操作系统,而大大提高嵌入式Linux的易用性,提高其开发出的高智能设备的安全性、稳定性,同时也大大提高智能设备的计算能力、处理能力。
4.2部分嵌入式Linux产品[3][4]
嵌入式Linux一般是按照嵌入式目标系统的要求而设计,由一个体积很小的内核及一些可以根据需要进行随意裁减的系统模块组成。一般来说整个系统所占用的空间不会超过几M大小。目前,国外不少大学、研究机构和知名公司都加入了嵌入式Linux的开发工作,较成熟的嵌入式Linux产品不断涌现。
由美国新墨西哥理工学院开发的基于标准Linux的嵌入式操作系统RTLinux,已成功地应用于航天飞机的空间数据采集、科学仪器测控、电影特技图像处理等领域。RTLinux开发者并没有针对实时操作系统的特性重写Linux的内核,这样做工作量会非常大,而且要保证兼容性也非常困难。为此,RTLinux提供了一个精巧的实时内核,并把标准的Linux核心作为实时核心的一个进程同用户的实时进程一起调度,这样做的好处是对Linux的改动量最小,充分利用了Linux平台下现有的丰富的软件资源。
由嵌入式Linux行业主要厂商之一Lineo推出的Embedix,是根据嵌入式应用系统的特点重新设计的Linux发行版本。Embedix提供了超过25种的Linux系统服务,包括Web服务器等。系统需要最小8M内存,3M只读内存或闪存。Embedix基于Linux2.2核心,并已经成功地移植到了IntelX86和PowerPC处理器系列上。
由美国网虎公司推出的XLinux,号称是世界上最小的嵌入式Linux系统,核心只有143K字节,而且还在不断减小。
致力于国产嵌入式Linux操作系统和应用软件开发的广州博利思软件公司推出的嵌入式Linux中文操作系统POCKETIX,基于标准的Linux内核,并包括一些可以根据需要进行定制的系统模块。支持标准以太网和TCP/IP协议、支持标准的XWindow,中文支持采用国际化标准,提供桌面和窗口管理功能、带WEB浏览器和文件管理器,并支持智能拼音和五笔字型输入。可适应个人PDA、WAP手机、机顶盒等广泛的智能信息产品。
4.3开发嵌入式Linux的几个问题
(1)Linux的移植。如果Linux不支持选用的平台,就需要把Linux内核中与硬件平台相关的部分改写,使之支持所选用的平台。
(2)内核的裁剪。嵌入式产品的可用资源比较少,所以它的内核相对嵌入式系统来说就显得有点大,需要进行剪裁到可利用的大小。
(3)桌面系统。现代的操作系统如果没有一个友好的界面是没有说服力的。现在的台式机Linux系统使用了传统的XWindow系统的模式—Client/Server结构。和硬件有关的部分即是Server端,实现一个标准的显示接口;应用程序通过对Server的服务请求,实现程序的显示。在此之上,实现窗口的管理功能。但XWindow对于嵌入式系统来说显得很庞大。现在国内有MiniGUI,国外有MicroWindow,都在致力于嵌入式LinuxGUI的开发。适用于嵌入式Linux上的XWindow的工作也在进行。
(4)驱动程序的开发。Linux内核更新的很快,许多最新的硬件驱动很快就被支持。但嵌入式系统应用领域是多种多样的,所选用的硬件设备也不同,并且不可能都有Linux的驱动程序,因此,设备驱动程序的开发也是重要的工作。
(5)应用软件的开发。
(6)中文的支持。
5.结束语
目前,绝大部分嵌入式系统的硬件平台还掌握在外国公司的手中,国产的嵌入式操作系统在技术含量、兼容性、市场运作模式等方面也还有很多工作要做,我们应该在跟踪国外嵌入式操作系统的最新技术的同时,坚持自主产权,力争找到自己的突破点,探索出一条自己的发展道路。
免责声明:本文转载或采集自网络,版权归原作者所有。本网站刊发此文旨在传递更多信息,并不代表本网赞同其观点和对其真实性负责。如涉及版权、内容等问题,请联系本网,我们将在第一时间删除。同时,本网站不对所刊发内容的准确性、真实性、完整性、及时性、原创性等进行保证,请读者仅作参考,并请自行核实相关内容。对于因使用或依赖本文内容所产生的任何直接或间接损失,本网站不承担任何责任。