第八章
     
     
      
       PX4-SDlog
      
     
     
      解析
     
    
   
   
   
    
     
      
      
     
    
    
     
      这一章节我们对
     
    
    
     
      
       SD
      
     
     
      存储卡来进行解析。
     
     
      
       SD
      
     
     
      卡涉及到
     
     
      
       log
      
     
     
      日志,在很多飞行中
     
     
      
       log
      
     
     
      文件非常重要的,尤其是新手在炸机过程中有了这些数据我们基本上就能分析出炸机原因。
     
    
   
   
   
    
     
      
       
       
      
     
     
      首先我们还是来找
     
     
      
       RCS
      
     
     
      中的
     
     
      
       sd
      
     
     
      卡的启动。这里直接贴出来至于原因大家自己分分析一下
      
     
     
     
     
      。
     
     
      
       Sd
      
     
     
      卡的驱动用的是硬件驱动它的驱动在是
     
     
      
       stm32_sdio.c
      
     
     
      中,经过前面几章的学习,这个应该也不难了吧。大家自己去探个究竟。
     
    
   
   
   
    
     
      
       
       
      
     
     
      回到文件
     
     
      
       sdlog2.c
      
     
     
      文件中,找到入口函数
      
     
     
     
     
      首先回到
     
     
      
       start
      
     
     
      中首先就是对
     
     
      
       SD
      
     
     
      卡的优先级进行选择。然后执行函数
      
     
     
     
     
      这里面就有解析
      
     
     
     
     
      ,
     
     
      
       log_rate=500,log_buffer_siza=18,
      
     
     
      然后就是
     
     
      
       e
      
     
     
      的标志。
     
    
   
   
   
    
     
      
       
       
      
     
     
      然后就是一堆的读取参数。这些参数都是
     
     
      
       param_find
      
     
     
      函数。
      
     
     
     
     
      看到没创建
     
     
      
       log
      
     
     
      文件的路径。
     
    
   
   
   
    
     
      开辟了空间哦。
     
    
   
   
   
    
     
      
     
    
   
   
   
    
     
      
     
    
   
   
   
    
     
      
     
    
   
   
   
    
     
     
    
    
     
      
       
       log_type
      
     
     
      选择。回到
     
     
      
       while
      
     
     
      中,
     
     
      
       while
      
     
     
      开始会对数据进行订阅。真正的写入函数是
     
     
      
       LOGBUFFER_WRITE_ADN_COUNT().
      
     
    
   
   
   
    
     
      
       
       
      
     
     
      这里我们其他的不做细描述,我们这里只讲
     
     
      
       imu
      
     
     
      数据写入到
     
     
      
       log
      
     
     
      中。这里我们用的
     
     
      
       log_type
      
     
     
      为
     
     
      
       LOG_TYPE_NORMAL
      
     
     
      所以我们找到这个
     
     
      
       if
      
     
     
      语句
      
     
     
     
     
      首先就是对数据订阅
      
     
     
     
     
      然后判断对否写入标志位进行赋值
      
     
     
     
     
      然后就是将原始数据赋值到
     
     
      
       log_msg
      
     
     
      中。
      
     
     
     
    
   
   
   
    
     
      这个
     
     
      
       log
      
     
     
      的标号是
     
     
      
       LOG_IMU_MSG=4
      
     
     
      ,在这里我们只对
     
     
      
       LOGBUFFER_WRITE_AND_COUNT
      
     
     
      函数说明,这里我们可以看到参数是
     
     
      
       IMU
      
     
     
      。我们追踪到
     
     
      
       sdlog2_messages.h
      
     
     
      中找到
     
     
      
       IMU
      
     
     
      的结构体。
      
     
     
     
     
      看到没对应上了哦。在说一个
     
     
      
       LOG
      
     
     
      的格式也在这个文件最下面我们找到
     
     
      
       IMU
      
     
     
      的
      
     
     
     
     
      这里同样就对应上了哦,
     
     
      
       f
      
     
     
      代表浮点型。
     
    
   
   
   
    
     
      
       
       
      
     
     
      这一章节也不难,整个架构也已经完成。如果要添加新的数据到
     
     
      
       LOG
      
     
     
      中只需在
     
     
      
       sdlog2_messages.h
      
     
     
      中添加数据
     
     
      
       MSG
      
     
     
      标号(不能重复哦,只需在后面递增就行),增加数据结构体。再在
     
     
      
       log_formats
      
     
     
      中写入你的数据格式和你的数据说明。最后再
     
     
      
       sdlog2.c
      
     
     
      中进行订阅相关数据,进行写入就行了。如果不知道如何去做就去参考
     
     
      
       IMU
      
     
     
      数据的写入。
     
    
   
   
   
  
 
