当前位置: 首页 > news >正文

北京网站建设网络推广公司seo标题优化关键词怎么选

北京网站建设网络推广公司,seo标题优化关键词怎么选,私人定制女装店,网站怎么做收费1、介绍 EasyLogger 是一款超轻量级、高性能的C日志库,非常适合对资源敏感的软件项目。例如:IoT产品、可穿戴设备、智能家居等等。相比log4c、zlog这些知名的C日志库,EasyLogger的功能更加简单,提供给用户的接口更少,但…

 1、介绍

        EasyLogger 是一款超轻量级、高性能的C日志库,非常适合对资源敏感的软件项目。例如:IoT产品、可穿戴设备、智能家居等等。相比log4c、zlog这些知名的C日志库,EasyLogger的功能更加简单,提供给用户的接口更少,但上手会很快,更多实用功能支持以插件形式进行动态扩展。

目前EasyLogger支持以下功能:

  • 日志输出方式支持串口、Flash、文件等;

  • 日志内容可包含级别、时间戳、线程信息、进程信息等;

  • 支持多种操作系统,支持裸机;

  • 各级别日志支持不同颜色显示;

EasyLogger的GitHub代码地址:
GitHub - armink/EasyLogger: An ultra-lightweight(ROM<1.6K, RAM<0.3k), high-performance C/C++ log library. | 一款超轻量级(ROM<1.6K, RAM<0.3k)、高性能的 C/C++ 日志库icon-default.png?t=O83Ahttps://github.com/armink/EasyLogger

2、移植EasyLogger过程 

    2.1整体的移植思路

        (1)添加源码到裸机工程中;
        (2)实现需要的接口; 

    2.2 具体添加源码到工程的操作

     在移植的时候,可以参考从上面的链接中下载的ZIP文件解压出来的EasyLogger-master项目的readme文档和demo工程。

        通过这些可以对EasyLogger有一个大致的了解。docs中的API和port中的kernel.md有对于EasyLogger 核心功能移植说明和EasyLogger 核心功能 API 说明。重点看一下这部分!!!
        然后准备一份裸机工程文件,将printf重定向到串口打印,准备好之后开始移植easylogger。
首先是将下载好的开源文件中的easylogger复制到裸机工程中。(本人使用的是STM32F407芯片的板子,仅有LED和串口两部分的代码)

       将这个部分的源码,复制到准备好的裸机工程的third_lib文件夹下。然后打开keil工程,进行添加easylogger组件的源码文件。

  • port/elog_port.c:elog移植接口文件;

  • src/elog.c:           elog核心功能源码;

  • src/elog_utils.c:elog所用到的一些c库工具函数实现;

  • src/elog_buf.c(可选添加):elog缓冲输出模式源码;

  • src/elog_async.c(可选添加):elog异步输出模式源码;

 在像上图中添加了以后,再将easylogger/inc的头文件路径添加到keil中。如下图:
 

 对于串口的重定向部分的代码如下:(后续的输出日志信息要使用printf函数,所以需要进行添加这个串口重定向代码!)

int fputc(int ch, FILE *stream)
{/* 堵塞判断串口是否发送完成 */while((USART1->ISR & 0X40) == 0);/* 串口发送完成,将该字符发送 */USART1->TDR = (uint8_t) ch;return ch;
}

我将这部分代码放到了elog_port.c文件中,如下图:

     2.3 实现elog移植接口

      elog的移植接口都已经写好了,在elog_port.c文件中,只需要在函数体中添加代码即可。

① elog初始化接口

ElogErrCode elog_port_init(void);

如果涉及到后续elog使用资源的初始化,比如动态申请分配缓冲区内存,可以放在此接口中,本文中保持默认。这个暂时不需要调用,因为该接口会在调用elog_init函数中被调用。
② elog日志输出接口(重点)

//开头添加
#include <stdio.h>
....void elog_port_output(const char *log, size_t size) {/* add your code here *///日志使用printf输出,printf已经重定向到串口USART1printf("%.*s", size, log);              //%s表示字符串输出,.<十进制数>是精度控制格式符,输出字符时表示输出字符的位数
}

 ③ 日志输出上锁/解锁接口
       该接口可以对日志输出接口进行上锁/解锁,以保证日志在并发输出时的正确性,本文中使用的是裸机程序,所以在此使用关闭全局中断来加锁,打开全局中断来解锁(STM32开关全局中断的方式很多,这里是直接操作 PRIMASK 寄存器来快速的屏蔽/打开全局中断)

//开头添加
#include "stm32f4xx.h"void elog_port_output_lock(void) {/* add your code here *///关闭全局中断__set_PRIMASK(1);                       //使用的是裸机程序,所以在此使用关闭全局中断来加锁,打开全局中断来解锁:
}/*** output unlock*/
void elog_port_output_unlock(void) {/* add your code here *///开启全局中断__set_PRIMASK(0);
}

④ 系统信息获取接口
        elog提供了三个接口用来获取当前时间、获取进程号、获取线程号,因为本文中移植到裸机工程中,并且没有提供时间支持,所以这三个接口都返回空字符串。

/*** get current time interface** @return current time*/
const char *elog_port_get_time(void) {      //elog提供了三个接口用来获取当前时间、获取进程号、获取线程号,因为本文中移植到裸机工程中,并且没有提供时间支持,所以这三个接口都返回空字符串/* add your code here */return "";}/*** get current process name interface** @return current process name*/
const char *elog_port_get_p_info(void) {/* add your code here */return "";
}/*** get current thread name interface** @return current thread name*/
const char *elog_port_get_t_info(void) {/* add your code here */return "";}

        2.4 配置elog

        elog的核心功能开启宏定义和核心参数宏定义都在配置文件elog_cfg.h中,下面讲述其中重要的宏定义。
       这三个地方要特别的注意,第一个是日志输出的总开关,该宏必须要在这里进行定义。第二个是换行符宏定义,修改成\r\n。第三个是带有颜色的日志输出开关,在这里进行定义。
       移植时并没有添加异步输出和缓冲区输出的源码,所以将这两个功能关掉:
到此为止,就算移植并且配置完成了,下面就可以进行使用了。

3、使用EasyLogger

    3.1. 初始化elog

   ​​elog使用之前需要初始化,过程有三步
        ① 初始化elog 

    /* 初始化elog */
void elog_init(void);

         ② 设置日志输出格式

void elog_set_fmt(uint8_t level, size_t set);

       其中第一个参数表示设置哪个日志输出级别对应的输出格式,其二个参数是日志输出格式,枚举给出,可以自由组合搭配。

        ③ 启动elog

void elog_start(void);

接下来在main函数中的串口初始化函数之后,while(1)之前编写elog初始化代码:

    /* 初始化elog */elog_init();elog_set_text_color_enabled(true);                                     //要想五彩缤纷的日志,仅在elog_cfg.h中使能颜色输出还不够,还需要使用API开启输出/* 设置每个级别的日志输出格式 *///输出所有内容elog_set_fmt(ELOG_LVL_ASSERT, ELOG_FMT_ALL);//输出日志级别信息和日志TAGelog_set_fmt(ELOG_LVL_ERROR, ELOG_FMT_LVL | ELOG_FMT_TAG);elog_set_fmt(ELOG_LVL_WARN, ELOG_FMT_LVL | ELOG_FMT_TAG);elog_set_fmt(ELOG_LVL_INFO, ELOG_FMT_LVL | ELOG_FMT_TAG);//除了时间、进程信息、线程信息之外,其余全部输出elog_set_fmt(ELOG_LVL_DEBUG, ELOG_FMT_ALL & ~(ELOG_FMT_TIME | ELOG_FMT_P_INFO | ELOG_FMT_T_INFO));//输出所有内容elog_set_fmt(ELOG_LVL_VERBOSE, ELOG_FMT_ALL);/* 启动elog */elog_start();

    3.2. elog日志输出

        elog中每种级别都有一种完整方式,两种简化方式,使用时自行选择: 

#define elog_assert(tag, ...) 
#define elog_a(tag, ...) //简化方式1,每次需填写 LOG_TAG
#define log_a(...)       //简化方式2,LOG_TAG 在文件顶部定义,使用前无需填写 LOG_TAG

        比如上面这个elog_assert函数就有两种表达方法,我选择的是简化方式2。前两种在使用的时候只需要包含<elog.h>头文件即可,第三种方式除了包含头文件之外,还需要在文件开始定义TAG宏定义,使用起来和printf相同
首先在main.c文件开始定义TAG宏,包含头文件:


#define LOG_TAG    "main"   //使用简化方式2,LOG_TAG 在文件顶部定义,使用前无需填写 LOG_TAG(必须是在下面包含的头文件前进行定义,因为程序顺序执行)
#include "elog.h"

然后在main函数中编写的elog初始化代码之后,继续添加代码,测试elog的使用:

    log_a("Hello EasyLogger!");log_e("Hello EasyLogger!");log_w("Hello EasyLogger!");log_i("Hello EasyLogger!");log_d("Hello EasyLogger!");log_v("Hello EasyLogger!");

然后再进行编译,烧写,使用串口助手查看串口输出:

    另外串口助手无法显示颜色,如果想要输出有颜色的日志,请使用使用串口终端(Mobaxterm)查看串口输出!! 

http://www.hrbkazy.com/news/53492.html

相关文章:

  • 轴承推广做哪个网站网站设计的流程
  • 做公众号网站网站查询ip地址查询
  • wordpress主题读取不到seo优化推广工程师
  • 网上服装定制平台惠州seo推广优化
  • 肥西建设局网站郑州网站建设外包
  • wordpress文章字体杭州优化公司多少钱
  • 常用小网站google搜索优化方法
  • 做网站需要注意什么苏州百度搜索排名优化
  • 网络规划设计师2019下半年真题seo网站外链平台
  • 页面模板在公号什么地方显示seo网络营销推广排名
  • 怎么样做网站注册量查网站排名
  • 浙江标力建设集团网站新闻发稿
  • 网站开发费用报价免费网站分析seo报告是坑吗
  • 网站登录后不显示内容今日新闻头条新闻最新
  • 购物网站开发需要什么软件谷歌推广公司哪家好
  • 做旅游的网站的目的和意义自制网站 免费
  • 嘉兴做美食图片的网站cpu游戏优化加速软件
  • 有需求或做任务赚钱的网站么百度拍照搜题
  • 有了域名后怎样做网站网络外贸推广
  • 宿迁房价最新价格表漯河seo公司
  • 视频网站怎样做西安网站建设公司
  • 犀牛云做网站多少钱域名查询ip138
  • 网页制作与网站建设从入门到精通 下载网站seo分析报告案例
  • 网站更新方案长沙百度快速优化排名
  • 上海网站建设就q479185700顶上廊坊seo排名霸屏
  • 淘宝网站首页是用什么软件做的巨量算数
  • 摄影网站制作百度推广管理系统
  • 自建网站怎么关闭seo怎么学在哪里学
  • 南昌市建设工程质量监督站网站排名优化公司哪家靠谱
  • 企业网页设计报价杭州seo博客