欢迎来到第壹文秘! | 帮助中心 分享价值,成长自我!
第壹文秘
全部分类
  • 幼儿/小学教育>
  • 中学教育>
  • 高等教育>
  • 研究生考试>
  • 外语学习>
  • 资格/认证考试>
  • 论文>
  • IT计算机>
  • 法律/法学>
  • 建筑/环境>
  • 通信/电子>
  • 医学/心理学>
  • ImageVerifierCode 换一换
    首页 第壹文秘 > 资源分类 > DOCX文档下载
    分享到微信 分享到微博 分享到QQ空间

    嵌入式系统日志记录的简易方法.docx

    • 资源ID:1097503       资源大小:46.14KB        全文页数:36页
    • 资源格式: DOCX        下载积分:5金币
    快捷下载 游客一键下载
    账号登录下载
    三方登录下载: 微信开放平台登录 QQ登录
    下载资源需要5金币
    邮箱/手机:
    温馨提示:
    快捷下载时,如果您不填写信息,系统将为您自动创建临时账号,适用于临时下载。
    如果您填写信息,用户名和密码都是您填写的【邮箱或者手机号】(系统自动生成),方便查询和重复下载。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP,免费下载
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    嵌入式系统日志记录的简易方法.docx

    很多场景都需要记录日志,在战入式系统中,特别是雎片机这种存储资源有限的环境下,就需要一种轻Sc级的存储方法。系统日志在嵌入式设备应用场景中,系统日志时常可以监控设备软件的运行状态,及时记录问题点以及关键信息,方便开发人先后期定位以及解决问题.本文将讲述一种简易的系统日志记录方法,用下保存设备的系统日志,视具体嵌入式设备情况而定,可存储在MCU内部FIaSh、外部F1.aSh、EEPRoM等,本文采用外部F1.ash作为示例展开介绍“思路分析对于系统日志可以当成文件系统,可以划分为三个重要部分:目录区、参数区、日志区。目录区:根据日期进行归类,记录当天的日志的存储地址、日志索引、日志大小,通过目录可以获取整个日志文件的概况;参数区:存储记录日志写位设、目录项个数、写状态等参数:日志区:这是我们主要的存储区,记录系统的日志,支持环写。这:个区域都需要占用部分内存,可以自行分配大小。实现的效果如卜图所示,设置通过指令可查询到整个日志目录区的概况。查询系统日志目录:AT+CATA1.0G?1.oGD:存储日志按日期分类,该ID用于查询对应日期日志,从1开始计数:1.OGDATE:系统日志存储日期:1.oG_ADDR:系统日志存储外部F1.ASH地址:1.0G>FFSET:系统日志存储偏移垃(各日期日志大小,单位:字节).图片查询指定日期系统日志:AT+CATA1.OG=<1.OG-ID>1.OGD:在查询系统日志目录时获取,当1.oGD为0时,为查询推个系统日志。图片另外提供移除系统日志(消除日志目录)指令:AT+RM1.OG.后面将讲述具体实现。F1.ASH内存划分F1.ASH内存需要看具体设备进行合理划分,目录区、参数区与日志区实现环形存储,延长擦写寿命。defineF1._ASH_SECTOR_SIZE(uint32-t)0x001000)SdefineF1.ASH_B1.OCK_32K_SIZE(Uint32_t)OXOo8000)defineF1._ASH_B1.OCK_64K_SIZE(Uint32_t)OXo1.OoOO)WdefineSECTORMASK(F1.ASH_SECTOR_SIZE-1)扇区掩码一7defineSECTOR_BASE(addr)扇区的基地址-*/WdefineSECTOR_OFFSET(addr)扇区内的偏移-*/defineB1.OCK_32K_BASE(addr)WdefineB1.OCK_64K_BASE(addr)typedefenumF1.ASH_B1.OCK_4K=0,F1.ASH_B1.OCK_32K=1,F1.ASH_B1.OCK_64K=2f1.ash_b1.ock_t;addr&(-SECTOR,MASK)(addr&SECTOR_MASK)(addr&(F1.ASH_B1.OCK_32K_SIZE)(addr&(F1.ASH_B1.OCK_64K_SIZE)*<f1.asheraseb1.ocksize4k/<f1.asheraseb1.ocksize32k/*<f1.asheraseb1.ocksize64k*/*f1.ash空间索引*/typedefenumF1.ASH_CATA1.OG_ZONE=0,F1.ASH_SYS1.OG_PARA_ZONE,F1.ASH_SYS1.OG_ZONE,F1.ASH_ZONEX,f1.ash_zone_e;tpedefstructf1.ash_zone_ezone;uint32_tstart-address;uint32_tend_address;f1.ash_tab1.e_t;*地址划分7staticconstf1.ash_tab1.e_tf1.ash_tab1.e=.zone=F1.ASH_CATA1.OG_ZONE,.startaddress0x03200000,.end-address=OxO32FFFFF,.zone=F1.ASH_SYS1.OG_PARA_ZONE,.startaddress0x03300000,.end-address=OxO33FFFFF,.zone=F1.ASH_SYS1.OG_ZONE,.startaddress0x03400000,.end,address=OxO3FFFFFF),FIaSh底层实现擦除、读写操作接口,由读者自行实现。f1.ash_tab1.e_t"get_f1.ash_tab1.e(f1.ash_zone_ezone)inti=O;for(i0;i<f1.ash_ZOne_count;i+)if(zone=f1.ashjab1.e(i.zone)return(f1.ash_tab1.e_t*)&f1.ash_tab1.ei;)returnNU1.1.;)intf1.ash_erasef1.ash_zone_ezone,uint32-taddress,f1.ash_b1.ock_tb1.ock_type)(f1.ash_tab1.e_t*f1.ash_tab1.e_tmp=get_f1.ash_tab1.e(zone);if(f1.ash_tab1.e_tmp=NU1.1.)return-1;if(address<f1.ash_tab1.e_tmp->start_address11addressf1.ash_tab1.e_tmp->end_address)return-1;returnbsp_spi_f1.ash_eraseaddress,b1.ockjype);intf1.ash_write(f1.ash_zone_ezone,uint32-taddress,constuint8-t*data,uint32-t1.ength)(f1.ash_tab1.e_t*f1.ash_tab1.e_tmp=get_f1.ash_tab1.e(zone);if(f1.ashIab1.e_tmp=NU1.1.)return-1;if(address<f1.ash_tab1.e_tmp->start_address)!(address+1.ength)>f1.ash_tab1.e_tmp->end_address)return-1;returnbsp_spi_f1.ash_buffer_writeaddress,(uint8_t*)data,1.ength);intf1.ash_read(f1.ash_zone_ezone,uint32-taddress,uint8j*buffer,uint32-t1.ength)(f1.ash_tab1.e_t*f1.ash_tab1.e_tmp=get_f1.ash_tab1.e(zone);if(f1.ash_tab1.e_tmp=NU1.1.)return-1;if(address<f1.ash_tab1.e_tmp->start_address)!(address+1.ength)>f1.ash_tab1.e_tmp->end_address)return-1;bsp_spi_f1.a$h_buffer_read(buffer,address,1.ength);returnO;参数与结构体定义日志数据存储时间戳,便丁问题定位,需要实现RTC接口调用.typedefstructuint1.6-tYear;年份:YYYY/uint8-tMonth;*月份:MM*/uint8tDay;*日:DDuint8-tHour;*小时:HH"/uint8-tMinute;/分钟:MM/uint8-tSecond;/*杪:SS*/intbsp_rtc_get_timetime_t*date);参数区应当保证数据的正确性,应加入参数校眩存储,定义校验结构体。#defineSYSTEM_1.OG_MAGIC_PARAM0x87654321*日志参数标识符7typedefstructuint32jmagic;/*参数标识符/uint1.6_tcrc;/*校验值*/uint1.6jIen;/参数长度7sing1.e_sav_t;参数区需记录当前日志记录的写位置,以及目录项个数,还有日志区和目录区环写状态,并且存储最新时间等等./*日志区参数*/tpedefstructuint32-tWrite_pos;写位置*/uint32jcata1.og_num;/目录项个数*/uint8_t1.og_cvc1.ic_status;/*系统日志环形写状态*/uint8_tCataIog_CydiJStatUs;/日志目录环形写状态*/time_t1.og_1.atest_time;/*存储最新时间*/system_1.og_t;/*目录区参数7typedefstructuint32j1.og_id;*日志索引/uint32_t1.og_addr;*日志地址*/uint32j1.og.offset;*日志偏移大小,单位:字节/time_t1.og_time;/*日志存储时间*/system_cata1.og_t;/*系统日志参数*/typedefstructsing1.e_sav_tcrc_va1.;system_1.og_tsystemjog;system_cata1.og_tSYStem.cata1.og;sys_1.og_param_t;typedefstructuint8jsystem_1.og_print_enab1.e;系统日志打印使能/uint1.6_t$vstem_1.og_print_id;*打印指定id系统日志,/uint32jsystem_1.og_param_addr;/当前日志写地址*/sys_ram_t;sys_ram_tSysRam;sys_1.og_param_tSys1.ogParam;sys_ram_tegp_sys_ram=SSysRam;sys_1.og_param_t*gp_sys_1.og=&Sys1.ogParam;实现接口说明CRC校验接口,可以自定义实现."16位CRC校监苗位表7staticconstUint8_tauchCRCHi11=0x00,0xc1.,0x81,0x40,0x01,0xc0,0x80,0x41,0x01,OxcO,0x80,0x41,0x00,0xc1.,0x81,0x40,0x01,0xc0,0x80,0x41,0x00,0xc1.,0x81,0x40,0x00,Oxc1.,0x81,0x40,0x01,OxcO,0×80,0x41f0x01,0xc0,0x80,0x41,0x00,0xc1.,0x81,0x40,0x00,0xc1.,0x81,0x40,0x01,0xc0,0x80,0x41f0x00,0xc1.,0x

    注意事项

    本文(嵌入式系统日志记录的简易方法.docx)为本站会员(p**)主动上传,第壹文秘仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知第壹文秘(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

    copyright@ 2008-2023 1wenmi网站版权所有

    经营许可证编号:宁ICP备2022001189号-1

    本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。第壹文秘仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知第壹文秘网,我们立即给予删除!

    收起
    展开