首页 > 其他分享 >alog一个日志库

alog一个日志库

时间:2023-09-22 15:56:33浏览次数:43  
标签:alog 一个 例程 +--- 串口 日志 移植

alog

alog测试结果

brief 功能介绍:

alog是一个非常精简的串口输出日志组件,
类似easyloger,但是比easyloger更简单易用,
只有2个实际不到百行的文件,实现了基本日志所需的全部功能。
需移植配置的接口选项少,实现了串口输出字符串就可以用了,没有C库以外的其他依赖。
没有存储日志相关的扩展的API,适合新手使用理解和在资源紧张的单片机上移植使用

特色

alog类图

  • 支持可裁剪的格式输出功能
  • 预留互斥锁的调用宏定义
  • 支持自定义log过滤的等级
  • 支持显示报错所在文件和行数
  • 预留RTC功能的宏定义支持输出报错和警告的rtc时间

注意!!!

推荐在支持颜色码的串口终端查看输出的日志,否则普通串口助手收到的颜色码可能就是乱码
例如:mobaxterm 、xshell 等

源码结构

@version 当前版本:0.1

+---doc 文档
+---example 例子
| ---port 移植好的例程
| +---ATK_stm32F407_HAL_example_5_uart 正点原子F407HAL库串口例程
| |
| +---ATK_stm32F407_RES_example_5_uart 正点原子F407寄存器串口例程
| |
| +---ATK_stm32F407_STD_example_4_uart 正点原子F407标准库串口例程
| |
| ---PY32F002A_uart
+---inc 头文件
| alog.h
---src 源文件
alog.c

移植教程

可参考已经移植好的工程
和源码对配置项的解释
来移植到你使用的单片机平台
步骤就是

  1. 首先把alog.h加入头文件路径目录
  2. 然后把alog.c加入工程
  3. 把alog.h注释掉的的宏定义//#deine LOG_PORT_UART_INIT

    换为#deine LOG_PORT_UART_INIT (你实现的对应的串口初始化函数)
  4. 把alog.h注释掉的的宏定义//#deine LOG_PORT_UART_PUTS

    换为#deine LOG_PORT_UART_PUTS (你实现的对应的串口输出字符串的puts函数)

开源地址

GLPv2开源协议
gitee开源地址:https://gitee.com/nikolan/alog.git
author 作者: ageek_nikola 邮箱:([email protected])

标签:alog,一个,例程,+---,串口,日志,移植
From: https://www.cnblogs.com/ageek-blog/p/17722566.html

相关文章

  • 使用Object.defineProperty() 定义对象属性时,如已设置 set 或 get, 就不能设置 writab
    使用Object.defineProperty()定义对象属性时,如已设置set或get,就不能设置writable和value中的任何一个了,不然会报如下错误。TypeError:Invalidpropertydescriptor.Cannotbothspecifyaccessorsandavalueorwritableattribute,#<Object>  letobj_tes......
  • 同一个类调方法导致注解式事务失效的问题
    说明在项目启动时,如果有@Transactional注解,spring是生成代理类来开启事务、提交事务和回滚事务的,但是如果是同一个类之间调用,就是直接调方法,导致事务失效。我们可以用一下方式在同一类获取当前类的代理对象,从而避免事务失效的问题。但是这种方式会有问题,下面有说明。推荐调用拆到......
  • appium+Python封装日志类
    创建logger.py文件放置在框架目录Common文件夹下,logger.py代码如下:#_*_coding:utf-8_*_importloggingimporttimeclassLogger(object):def__init__(self,logger):self.logger=logging.getLogger(logger)self.logger.setLevel(logging.DE......
  • 5.使用日志+自定义全局异常过滤器
    刚开始写文章,封装Base基类的时候,添加了trycatch异常块,不过当时没有去记录日志,直接return了。有小伙伴劝我不要吃了Exception 其实没有啦,项目刚开始,我觉得先做好整体结构比较好。像是盖楼一样。先把楼体建造出来,然后再一步一步的美化完善。基础的仓储模式已经ok,Autofac已经注入......
  • Java 21的StringBuilder和StringBuffer新增了一个repeat方法
    发现Java21的StringBuilder和StringBuffer中多了repeat方法:/***@throwsIllegalArgumentException{@inheritDoc}**@since21*/@OverridepublicStringBuilderrepeat(intcodePoint,intcount){super.repeat(codePoint,co......
  • 小白之IDEA创建java第一个程序
    (1)打开IDEA,创建项目名为first的项目。在src目录下创建名为HelloWorld的java类并写入代码再运行。  ......
  • 编写一个接受两个字符串参数的脚本。脚本应检查第一个字符串是否包含第二个参数的子串
    方法一:#!/bin/bash#检查是否提供了足够的参数if[$#-ne2];thenecho"用法:$0<主字符串><子串>"exit1fi#从命令行参数中获取主字符串和子串main_string="$1"substring="$2"#检查主字符串是否包含子串if[[$main_string==*$substring*]];then......
  • 记一个多线程调用同一个函数引发的数据冲突问题
    main.py负责接收请求,异步起线程调用高度离散的B(a、b、c...).py类文件,B(a、b、c...).py类文件在执行结束后会统一调用C.py文件中的一个函数规范处理结果,C.py本来的用途是解耦提高代码复用,但在高并发情况下出现了数据冲突的问题。即只有B(a).py才会产生的结果给写进了只会调用B(b).......
  • 项目开发难点-项目中两个窗口的页面,其中一个选择数据后回显到另一个项目页面中
    方法一:sessionStorage  如果项目是在浏览器中,打开或跳转另一个页面(可以使用同一个控制台)的情况下,可以用sessionStroage来存储数据,然后另一个页面获取数据 方法二:postMessage 适用情况与方法一一致(两个页面可以使用同一个控制台)。第二个页面选择后发送数据给第一个页面: w......
  • 开源一个优惠券小程序
    开源一个优惠券小程序E-Coupon自己的淘客网站(一点优惠)一直缺少一个移动端的入口,心里觉得是个急需完善的地方,所以国庆假期头几天,我宅在房间里研究了阵,搞出了个领优惠券的小程序。不过,尝试发布了下,没通过审核,说我过度营销。想了想,估计是不好通过审核的,就打算开源了,抛砖引玉吧。......