Tracealyzer for FreeRTOS(FreeRTOS+Trace) 详解(源码解析+移植)

2023-05-16

原文:http://blog.csdn.net/zcshoucsdn/article/details/54670473

  最近公司搞新项目,需要使用FreeRTOS,之前只有Linux的基础(学了个皮毛),对于FreeRTOS不是非常了解。在官网转悠的时候发现了有个可视化分析工具:FreeRTOS+Trace,感觉应该不错!下载后发现其是http://percepio.com/这个网站上的东西。到官网看了看,功能确实非常强大!

Views

  不过这个东西是收费的,虽然也提供了免费版本,但是免费版功能确实太少了,只能查看各全局图,没有详细信息!不过,对于个人使用,可以申请30天的评估版License。
  目前,Tracealyzer for FreeRTOS支持两种追踪模式:快照模式(Snapshot Mode)和流模式(Streaming Mode)

  • 快照模式(Snapshot Mode):将追踪数据放到芯片的RAM中,然后读取出来分析显示(就相当于每次都取一次快照)
  • 流模式(Streaming Mode):将追踪数据实时传送到PC机,目前Tracealyzer for FreeRTOS支持Jlink_RTT、 USB CDC、TCP/IP三种方式的流模式(官方将其称为streamports)。注意,虽然是实时传送过来的,在分析时还是需要停止后才能分析,即:不能实时分析

  以上两种模式,都需要进行相关的配置,配置项目还是挺多的,详细的说明,可以参照官方的 User Manual!

仅适用于 FreeRTOS v7.3 及之后的版本

Trace源码

  想要使用Tracealyzer for FreeRTOS,必须将Tracealyzer for FreeRTOS的Trace源码放到自己的项目中才可以!安装后打开软件(至于注册啥的就不说了)如下图所示

Tracealyzer for FreeRTOS

通过上图的菜单,可以定位到Tracealyzer for FreeRTOS的Trace源代码!各文件的说明见注释。

│  readme.txt
│  trcKernelPort.c
│  trcSnapshotRecorder.c
│  trcStreamingRecorder.c
├─config
│      trcConfig.h                  // 整个Trace源码的配置文件.
│      trcSnapshotConfig.h          // 快照模式配置文件,和流模式对应文件选其一
│      trcStreamingConfig.h         // 流模式配置文件,和快照模式对应文件选其一
├─include
│      trcHardwarePort.h            // 所有硬件依赖关系。包含几个预定义的硬件端口,包括ARM Cortex-M,PIC32,Renesas RX等。
│      trcKernelPort.h              // FreeRTOS特定的定义,最值得注意的是跟踪钩子定义。
│      trcPortDefines.h             // 配置文件的各种常量定义
│      trcRecorder.h                // 公共API,开发者将以上两种模式进行了统一,用户使用时,只需要包含该文件即可!
└─streamports                       // 该文件夹下就是流模式对应的不同接口方式的实现,以下任选其一即可
    ├─Jlink_RTT
    │  │  Readme.txt
    │  │  SEGGER_RTT.c
    │  │  SEGGER_RTT_Printf.c
    │  └─include
    │          SEGGER_RTT.h
    │          SEGGER_RTT_Conf.h
    │          trcStreamingPort.h
    ├─TCPIP
    │  │  Readme.txt
    │  │  trcStreamingPort.c
    │  └─include
    │          trcStreamingPort.h
    └─USB_CDC
        │  Readme.txt
        │  trcStreamingPort.c
        └─include
                trcStreamingPort.h

注意:
1. 官网最新的版本是3.1.0,从3.1.0开始,Trace源代码有了很大的改变,源码进行了整合,简洁了很多!
2. FreeRTOS的源码目录下,有个FreeRTOS-Plus目录,其中也有Trace源码,但是该源码也比较旧,不建议使用!
3. 网上现有资料也是针对旧源码的,和官方的User Manual不匹配。

Trace源码ARM-MDK使用

  上面提到,Tracealyzer for FreeRTOS支持两种追踪模式,首先我们就要确定使用哪一种模式。Tracealyzer for FreeRTOS默认的模式是快照模式。这里,我以流模式使用Jlink_RTT方式为例来说明。使用的开发板为自己画的,芯片为STM32F205VE。在移植之前,首先确保已将FreeRTOS移植完成,并能正常运行。
  首先对Trace的源代码进行一下整理(个人不喜欢在源码中放一堆实际用不到的文件),以下是我的目录结构(整个项目结构):

├─Docs                      // 文档
├─FreeRTOS                  // FreeRTOS源码的头文件和源文件
│  ├─inc
│  └─src
├─Libraries                 // STM32 标准外设库和CMSIS
│  ├─CMSIS                  // CMSIS
│  │  ├─Device
│  │  │  ├─Include
│  │  │  │      stm32f2xx.h
│  │  │  │      system_stm32f2xx.h 
│  │  │  └─Source
│  │  │          startup_stm32f2xx.s
│  │  │          system_stm32f2xx.c
│  │  └─Include             // ARM Cortex 核相关文件
│  └─STM32F2xx_StdPeriph_Driver     // 标准外设库
│      ├─inc   
│      └─src           
├─MDK-ARM                           // MDK-ARM项目文件及其输出文件目录
│  │  E10.uvprojx
│  ├─Bin   
│  ├─Listings
│  └─Objects
├─TraceRecorder                     // Trace的源码整理后
│  ├─inc
│  │      SEGGER_RTT.h
│  │      SEGGER_RTT_Conf.h
│  │      trcConfig.h
│  │      trcHardwarePort.h
│  │      trcKernelPort.h
│  │      trcPortDefines.h
│  │      trcRecorder.h
│  │      trcStreamingConfig.h
│  │      trcStreamingPort.h
│  │      
│  └─src
│          SEGGER_RTT.c
│          trcKernelPort.c
│          trcStreamingRecorder.c
└─User                          // 用户自定义源码的头文件及源文件
    ├─inc
    └─src

如果使用的是快照模式,streamports下的代码完全忽略即可。

接下来,在MDK-ARM中建立项目
IDE

(1)将各文件添加到MDK-ARM中,并且设置好MDK-ARM头文件路径(保证FreeRTOS以正常运行)

(2)打开trcConfig.h,修改如下,尤其是加注释的地方,特别注意。其他参数保持默认即可:

/*******************************************************************************
 * Trace Recorder Library for Tracealyzer v3.1.0
 * Percepio AB, www.percepio.com
 *
 * trcConfig.h
 *
 * Main configuration parameters for the trace recorder library.
 * More settings can be found in trcStreamingConfig.h and trcSnapshotConfig.h.
 *
 * Read more at http://percepio.com/2016/10/05/rtos-tracing/
 *
 * Terms of Use
 * This file is part of the trace recorder library (RECORDER), which is the 
 * intellectual property of Percepio AB (PERCEPIO) and provided under a
 * license as follows.
 * The RECORDER may be used free of charge for the purpose of recording data
 * intended for analysis in PERCEPIO products. It may not be used or modified
 * for other purposes without explicit permission from PERCEPIO.
 * You may distribute the RECORDER in its original source code form, assuming
 * this text (terms of use, disclaimer, copyright notice) is unchanged. You are
 * allowed to distribute the RECORDER with minor modifications intended for
 * configuration or porting of the RECORDER, e.g., to allow using it on a 
 * specific processor, processor family or with a specific communication
 * interface. Any such modifications should be documented directly below
 * this comment block.  
 *
 * Disclaimer
 * The RECORDER is being delivered to you AS IS and PERCEPIO makes no warranty
 * as to its use or performance. PERCEPIO does not and cannot warrant the 
 * performance or results you may obtain by using the RECORDER or documentation.
 * PERCEPIO make no warranties, express or implied, as to noninfringement of
 * third party rights, merchantability, or fitness for any particular purpose.
 * In no event will PERCEPIO, its technology partners, or distributors be liable
 * to you for any consequential, incidental or special damages, including any
 * lost profits or lost savings, even if a representative of PERCEPIO has been
 * advised of the possibility of such damages, or for any claim by any third
 * party. Some jurisdictions do not allow the exclusion or limitation of
 * incidental, consequential or special damages, or the exclusion of implied
 * warranties or limitations on how long an implied warranty may last, so the
 * above limitations may not apply to you.
 *
 * Tabs are used for indent in this file (1 tab = 4 spaces)
 *
 * Copyright Percepio AB, 2016.
 * www.percepio.com
 ******************************************************************************/

#ifndef TRC_CONFIG_H
#define TRC_CONFIG_H

#ifdef __cplusplus
extern "C" {
#endif

#include "trcPortDefines.h"

/******************************************************************************
 * Include of processor header file
 * 
 * Here you may need to include the header file for your processor. This is 
 * required at least for the ARM Cortex-M port, that uses the ARM CMSIS API.
 * Try that in case of build problems. Otherwise, remove the #error line below.
 *****************************************************************************/
#include "stm32F2xx.h"      // 这里根据需要添加自己的芯片的头文件
//#error "Trace Recorder: Please include your processor´s header file here and remove this line."

/*******************************************************************************
 * Configuration Macro: TRC_CFG_HARDWARE_PORT
 *
 * Specify what hardware port to use (i.e., the "timestamping driver").
 * All ARM Cortex-M MCUs are supported by "TRC_HARDWARE_PORT_ARM_Cortex_M".
 *
 * See trcSnapshotHardwarePort.h or trcStreamingHardwarePort.h for available
 * ports and information on how to define your own port, if not already present.
 ******************************************************************************/
#define TRC_CFG_HARDWARE_PORT TRC_HARDWARE_PORT_ARM_Cortex_M        // 选择芯片对应的类型

/*******************************************************************************
 * Configuration Macro: TRC_CFG_RECORDER_MODE
 *
 * Specify what recording mode to use. Snapshot means that the data is saved in
 * an internal RAM buffer, for later upload. Streaming means that the data is
 * transferred continuously to the host PC. 
 *
 * For more information, see http://percepio.com/2016/10/05/rtos-tracing/
 * and the Tracealyzer User Manual.
 *
 * Values:
 * TRC_RECORDER_MODE_SNAPSHOT
 * TRC_RECORDER_MODE_STREAMING
 ******************************************************************************/
#define TRC_CFG_RECORDER_MODE TRC_RECORDER_MODE_STREAMING       // 选择追踪模式(默认快照模式,这里我改成了流模式)

/*******************************************************************************
 * Configuration Macro: TRC_CFG_RECORDER_BUFFER_ALLOCATION
 *
 * Specifies how the recorder's internal buffer is allocated (snapshot or
 * streaming). Note that CUSTOM is only supported in snapshot mode.
 *
 * TRC_RECORDER_BUFFER_ALLOCATION_STATIC  - Static allocation 
 * TRC_RECORDER_BUFFER_ALLOCATION_DYNAMIC - Allocated in vTraceEnable
 * TRC_RECORDER_BUFFER_ALLOCATION_CUSTOM  - Use vTraceSetRecorderDataBuffer
 ******************************************************************************/
#define TRC_CFG_RECORDER_BUFFER_ALLOCATION TRC_RECORDER_BUFFER_ALLOCATION_STATIC

/******************************************************************************
 * TRC_CFG_FREERTOS_VERSION
 * 
 * Specify what version of FreeRTOS that is used (don't change unless using the
 * trace recorder library with an older version of FreeRTOS).
 * 
 * TRC_FREERTOS_VERSION_7_3_OR_7_4              If using FreeRTOS v7.3.0 - v7.4.2
 * TRC_FREERTOS_VERSION_7_5_OR_7_6              If using FreeRTOS v7.5.0 - v7.6.0
 * TRC_FREERTOS_VERSION_8_X                     If using FreeRTOS v8.X.X
 * TRC_FREERTOS_VERSION_9_X                     If using FreeRTOS v9.X.X
 *****************************************************************************/
#define TRC_CFG_FREERTOS_VERSION    TRC_FREERTOS_VERSION_9_X                // 这里根据自己的FreeRTOS版本修改

/******************************************************************************
 * TRC_CFG_MAX_ISR_NESTING
 * 
 * Defines how many levels of interrupt nesting the recorder can handle, in
 * case multiple ISRs are traced and ISR nesting is possible. If this
 * is exceeded, the particular ISR will not be traced and the recorder then 
 * logs an error message. This setting is used to allocate an internal stack
 * for keeping track of the previous execution context (4 byte per entry). 
 *
 * This value must be a non-zero positive constant, at least 1.
 * 
 * Default value: 8
 *****************************************************************************/
#define TRC_CFG_MAX_ISR_NESTING 8

/* Specific configuration, depending on Streaming/Snapshot mode */
#if (TRC_CFG_RECORDER_MODE == TRC_RECORDER_MODE_SNAPSHOT)
#include "trcSnapshotConfig.h"
#elif (TRC_CFG_RECORDER_MODE == TRC_RECORDER_MODE_STREAMING)
#include "trcStreamingConfig.h"
#endif

#ifdef __cplusplus
}
#endif

#endif /* _TRC_CONFIG_H */

(3)注意:由于默认情况下,Keil不支持C99特性,而Trace源码使用了C99特性(C99规定,变量声明可以放到函数的任何位置,而早期C规定,变量定义必须在函数开头)。在Keil中,将C99特性选中,如下图:
Keil修改

如果没有上面的设置,编译时,Keil报错:error: #268: declaration may not appear after executable statement in block.

(4)修改 FreeRTOSConfig.h。FreeRTOS 是一个高度可配置的系统。通常来说,我们只需要修改该配置文件即可,而不用去关注FreeRTOS的其他文件,修改后文件如下(注意图中注释部分):

/*
 自带的文件说明,为节省篇幅,省略...
*/

#ifndef FREERTOS_CONFIG_H
#define FREERTOS_CONFIG_H

/*-----------------------------------------------------------
 * Application specific definitions.
 *
 * These definitions should be adjusted for your particular hardware and
 * application requirements.
 *
 * THESE PARAMETERS ARE DESCRIBED WITHIN THE 'CONFIGURATION' SECTION OF THE
 * FreeRTOS API DOCUMENTATION AVAILABLE ON THE FreeRTOS.org WEB SITE. 
 *
 * See http://www.freertos.org/a00110.html.
 *----------------------------------------------------------*/

#define configUSE_PREEMPTION        1
#define configUSE_IDLE_HOOK         0
#define configUSE_TICK_HOOK         0
#define configCPU_CLOCK_HZ          ( ( unsigned long ) 24000000 )  
#define configTICK_RATE_HZ          ( ( TickType_t ) 1000 )
#define configMAX_PRIORITIES        ( 5 )
#define configMINIMAL_STACK_SIZE    ( ( unsigned short ) 128 )
#define configTOTAL_HEAP_SIZE       ( ( size_t ) ( 17 * 1024 ) )
#define configMAX_TASK_NAME_LEN     ( 16 )
#define configUSE_TRACE_FACILITY    1               // 开启追踪调试
#define configUSE_16_BIT_TICKS      0
#define configIDLE_SHOULD_YIELD     1

/* Co-routine definitions. */
#define configUSE_CO_ROUTINES       0
#define configMAX_CO_ROUTINE_PRIORITIES ( 2 )

/* Set the following definitions to 1 to include the API function, or zero
to exclude the API function. */

#define INCLUDE_vTaskPrioritySet        1
#define INCLUDE_uxTaskPriorityGet       1
#define INCLUDE_vTaskDelete             1
#define INCLUDE_vTaskCleanUpResources   0
#define INCLUDE_vTaskSuspend            1
#define INCLUDE_vTaskDelayUntil         1
#define INCLUDE_vTaskDelay              1
#define INCLUDE_xTaskGetCurrentTaskHandle               1   // 启用一个可选函数(该函数被 Trace源码使用,默认该值为0 表示不用)

/* This is the raw value as per the Cortex-M3 NVIC.  Values can be 255
(lowest) to 0 (1?) (highest). */
#define configKERNEL_INTERRUPT_PRIORITY         255
/* !!!! configMAX_SYSCALL_INTERRUPT_PRIORITY must not be set to zero !!!!
See http://www.FreeRTOS.org/RTOS-Cortex-M3-M4.html. */
#define configMAX_SYSCALL_INTERRUPT_PRIORITY    191 /* equivalent to 0xb0, or priority 11. */

/* This is the value being used as per the ST library which permits 16
priority values, 0 to 15.  This must correspond to the
configKERNEL_INTERRUPT_PRIORITY setting.  Here 15 corresponds to the lowest
NVIC value of 255. */
#define configLIBRARY_KERNEL_INTERRUPT_PRIORITY 15

/* Definitions that map the FreeRTOS port interrupt handlers to their CMSIS
standard names. */
#define vPortSVCHandler    SVC_Handler
#define xPortPendSVHandler PendSV_Handler
#define xPortSysTickHandler SysTick_Handler

/* Trace源码头文件,前面说过,最新的3.1.0版本,Trace源码被统一,简化,使用者只需要包含这一个文件即可!*/
/* Integrates the Tracealyzer recorder with FreeRTOS */ 
#if ( configUSE_TRACE_FACILITY == 1 )
#include "trcRecorder.h"
#endif
#endif /* FREERTOS_CONFIG_H */

注意:由于trcRecorder的源码是针对旧的FreeRTOS源码的,因此,configENABLE_BACKWARD_COMPATIBILITY 必须留空或者定义为 1以兼容旧的FreeRTOS源码

(5)在main函数中,启用trcRecorder中统一的API即可!启动追踪函数为 vTraceEnable(TRC_INIT)

注意:对于两种模式,trcRecorder中的公共API的传参是有区别的!例如:上面的vTraceEnable函数,在流模式下只能用:TRC_INIT或者TRC_START_AWAIT_HOST

  至此,编译项目(我已经添加了两个任务),现在到开发板即可!打开Tracealyzer for FreeRTOS,如下,现在自己的芯片类型,然后,菜单->file->就可以开始追踪了!

我测试编译后程序未正常运行,发现heap不足,修改FreeRTOSConfig.h 中的configTOTAL_HEAP_SIZE 改大即可。使用的是 heap_4管理方案。

#define configTOTAL_HEAP_SIZE                    (( size_t ) ( 17 * 1024 ))

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Tracealyzer for FreeRTOS(FreeRTOS+Trace) 详解(源码解析+移植) 的相关文章

  • 13-FreeRTOS任务创建与删除

    任务创建和删除API函数位于文件task c中 需要包含task h头文件 task h里面包函数任务的类型函数 例如 对xTaskCreate的调用 通过指针方式 返回一个TaskHandle t 变量 然后可将该变量用vTaskDele
  • FreeRTOS实时操作系统(三)任务挂起与恢复

    系列文章 FreeRTOS实时操作系统 一 RTOS的基本概念 FreeRTOS实时操作系统 二 任务创建与任务删除 HAL库 FreeRTOS实时操作系统 三 任务挂起与恢复 FreeRTOS实时操作系统 四 中断任务管理 FreeRTO
  • FreeRTOSConfig.h 配置优化及深入

    本篇目标 基于上一篇的移植freertos stm32f4 freertos 上 修改 FreeRTOSConfig h 文件的相关配置来优化辅助 FreeRtos 的使用 并且建立一些基本功能 信号量 消息地列等 的简单应用位于 stm3
  • 自动跟踪程序执行[关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 目前不接受答案 我想知道我们是否可以在任何 C 或 C 应用程序中启用跟踪 例如 使用 gcc 选项或小工具 我将启用跟踪 并将跟踪打印在控制台上或转储到文件中 由
  • 如何运行具有详细输出的 PowerShell 脚本?

    我想知道是否有一种方法可以运行 PowerShell 脚本 以便打印脚本每一行的命令和输出 例如 在 Bash 中你可以这样写bash x myscript或放置一个set x在脚本的顶部 在批处理中 您将省略 echo off传统上留在脚
  • 无法理解 .net 2010 跟踪和 app.config

    在我的 app config 中 我想设置 3 个跟踪级别 开关 详细 警告和无 在代码的调试版本中 我希望详细开关处于活动状态 在发布版本中我希望发出警告 在特殊情况下 我的应用程序用户可以修改配置文件以禁用所有跟踪 我希望调试跟踪输出在
  • 在设备上运行 Android systrace

    我无法运行名为 systrace pl 的 Android SDK 工具 因为出现如下错误 error opening sys kernel debug tracing options overwrite No such file or d
  • 如何在C#中拦截调试信息(Debugview风格)?

    出于测试目的 我计划组装一个小应用程序 该应用程序将侦听来自应用程序的特定事件并在此时与其交互 鉴于我们正处于测试过程中不可能更改应用程序代码的阶段 从我的角度来看 理想的做法是监听应用程序的调试跟踪 有点像 debugview 所做的那样
  • C++ 函数地址在附加探查器库中的显示与主题代码库中的显示不同

    我用 C 编写了一个仪器 通过挂钩进入和退出调用来记录进入和退出函数 它按照预期与遗留代码库一起工作 然而 在挂钩我从 git 下载的项目时 我保存在主题代码的 extern 变量中的函数地址 它们在探查器库中的结果是不同的 这扰乱了挂钩函
  • Java,如何跟踪调用的函数

    我想跟踪Java中调用的函数的开头 结尾 如以下代码 public void foo System out println begin of foo System out println e n d of foo 但维护转储代码System
  • React-Native 分析不显示 JS 线程

    我按照官方指南来分析我的 JS https facebook github io react native docs android ui performance html 但是当我得到结果时 没有任何js相关的代码可以看 知道发生了什么吗
  • 跟踪 Informix Client for Linux 的 ODBC 调用

    我尝试跟踪 Linux 上运行的程序中的 ODBC 函数调用 该程序动态链接 ODBC 管理器 然后连接到数据库并获取一些数据 我可以通过添加到 odbcinst ini 来使用 unixODBC 跟踪 ODBC 调用 ODBC Trace
  • 如何将 void* 转换为函数指针?

    我在 FreeRTOS 中使用 xTaskCreate 其第四个参数 void const 是传递给新线程调用的函数的参数 void connect to foo void const task params void on connect
  • 如何调试mysql用户自定义函数?

    我有一个 mysql 函数 我想调试它 设置断点 查看该时间段的变量值等 怎么做 从我目前的搜索来看 尽管我可能错过了一些东西 我必须同意 Devart 的观点 即你无法调试 UDF 函数 给您的一项额外建议是使用 stderr 进行调试
  • Android 绑定器跟踪

    在Android操作系统源代码中 路径 drivers staging android binder trace h 我们有一个名为binder trace h并且也在 drivers staging android binder c bi
  • http 跟踪实用程序

    我需要跟踪 嗅探来自其他机器的 http 流量 例如来自我的 Android 手机或 ios 设备 过去我使用MSSOAPT 这里描述http www devproconnections com article net framework2
  • 如何将跟踪信息保存到文件中

    我正在通过启用跟踪来跟踪我的 ASPX 页面web config
  • 追踪事务为何升级为 DTC

    有什么方法可以准确确定 System Transaction TrasactionScope 升级为 DTC 的原因吗 我们的一个组件遇到了麻烦 该组件似乎升级了交易 而所有其他组件 看起来看似相似 却没有升级 是否提供了有关升级原因以及如
  • TFDMoniFlatFileClientLink 不规则地不跟踪到文件

    我有一个TFDMoniFlatFileClientLink在表单上 文件名设置为d temp monitor txt 追踪 真 TFDConnection Params MonitorBy mbFlatFile 这有时有效 有时则不跟踪任何
  • WCF:如何跟踪消息正文?

    我正在尝试诊断在相对简单的服务主机进程 Service exe 中自托管的 WCF 服务 我已这样配置 Service exe config

随机推荐

  • Oracle:SQL语句--对表的操作—— 删除字段(即删除列)

    删除一个字段 即删除一列 xff08 未验证在有数据 xff0c 并且互有主外键时 xff0c 是否可用 xff09 语法 xff1a alter table 表名 drop column 字段名 即列名 例 xff1a alter tab
  • Oracle:SQL语句--对表的操作——删除表

    删除表 xff08 未验证在有数据 xff0c 并且互有主外键时 xff0c 是否可用 xff09 表中 列 为 其他表 外键 且有数据 应先解除约束 xff0c 或删除相关表 语法 xff1a drop table 表名 例 xff1a
  • Java作业:输入一个数字判断他是奇数还是偶数

    span class hljs comment 2 输入一个数字判断他是奇数还是偶数 span span class hljs keyword public span span class hljs keyword static span
  • Linux基础知识学习:Linux下修改文件名或修改文件夹名称(有待解决问题)

    Linux下修改文件名或修改文件夹名称 1 修改文件夹名称 1 1我先创建一个test文件夹用来测试 span class hljs keyword mkdir span test 1 2用 mv 命令 将文件移动 xff0c 目标地址如果
  • C语言学习:平方-->乘方(m的n方)

    平方 xff1a 直接用两个数 或变量 相乘就可以表示平方 xff0c 比如x x 不过如果 xff0c 需要求m的n次方 xff0c 就需要用到pow x y 乘方 包括开方 这个库函数了 xff0c 使用pow x y 这个库函数 xf
  • MySql学习:自定义函数之带参函数

    delimiter 如果数据库 test 里的存在函数 formatDate xff0c 就删除这个函数 DROP FUNCTION IF EXISTS test formatDate 创建一个函数 CREATE FUNCTION test
  • docker离线安装

    1 下载离线包 docker官网下载地址 本示例下载的是 xff1a docker 19 03 14 tgz 2 解压到对应目录 解压文件 span class token function tar span xzvf docker 19
  • 2013年:一个技术领导的启程

    作者 xff1a 朱金灿 来源 xff1a http blog csdn net clever101 又到一年总结时 总的来说 xff0c 这一年忙碌而充实 xff0c 现在有点胸中有千言却又不知从何说起 可能每一个希望有所作为的开发人员都
  • STM32——硬件IIC从机通信

    前言 xff1a 根据网上的资料 xff0c 大部分网友表示STM32自带的硬件IIC存在bug xff0c 读写时很容易卡死 自己在调试的时候也出现卡死的情况 xff0c 最后一点一点调试 xff0c 也还是调通了 本文将记录自己调试ST
  • HI3516的编译参数-mcpu=cortex-a7、-mfloat-abi=softfp和-mfpu=neon-vfpv4

    前言 Hi3516A具有浮点运算单元和neon 文件系统中的库是采用软浮点和neon编译而成 xff0c 因此所有Hi3516A板端代码编译时需要在Makefile里面添加选项 mcpu 61 cortex a7 mfloat abi 61
  • 算法移植优化基础

    PS xff1a 为了面试准备的 xff0c 总结的有点粗糙 ARM xff1a Advanced RISC Machines xff0c ARM架构是面向低预算市场设计的第一款RISC微处理器 xff0c 基本是32位单片机的行业标准 x
  • DBoW2在windows上的vs工程搭建方法

    xfeff xfeff 注释 xff1a 蓝体字是 opencv249 专用的修改 xff1b 黑体字是 opencv3 需要的修改 环境 xff1a vs2012 32bit 叙述比较简略 不明之处可以留言 1 配置 opencv 2 4
  • MSCKF_vio学习笔记

    最近因为项目需求 xff0c 对MSCKF vio的论文和代码进行了一番研读 xff0c 现将学习过程记下 MSCKF vio是一种基于多状态约束卡尔曼滤波器的双目视觉里程计 其中多状态约束是指将多帧图像的相机位姿加入卡尔曼状态向量中 xf
  • MSCKF2.0(Mingyang Li-IJRR2013) 论文要点总结

    论文 xff1a Li M Mourikis A I High precision consistent EKF based visual inertial odometry J The International Journal of R
  • SLAM,SLAM+IMU的状态估计问题描述-个人理解

    1 状态估计问题 令状态变量为x 61 x1 x2 x3 观测变量为z 61 z1 z2 z3 状态估计问题等同于求解条件概率分布 xff1a P x z xff0c 在当前观测状态z下的状态x分布 xff0c 也就是最可能的状态是什么 由
  • VINS-Fusion运行时的段错误(核心已转储)解决方法

    平台 ubuntu16 04 43 ROS 问题描述 xff1a 前两天VINS的原作者开源了VINS Fusion的双目版以及给出了和GPS融合的一个demo xff0c 所以试着运行下数据集 每次单目运行10s左右 xff0c 双目1
  • Jetson Xavier NX 刷机+更换清华源完美讲解

    当你拿到梦寐以求的NVIDIA Jetson Xavier NX开发板时 xff0c 第一个工作就是要刷机 究竟要怎么做呢 xff1f Let s go 这种板子有两种 xff0c 一种是带Micro SD卡槽的 xff0c 可以插入小型S
  • vmware下vmdk文件越来越大的解决方法探讨

    前段时间在vmware下面安装了ubuntu镜像 xff0c 用了一段时间后发现ubuntu的vmdk文件越来越大 xff0c 达到了31 6GB xff0c 如下图所示 而且随着继续安装新的软件仍然在增大中 即使在ubuntu里面删除了文
  • 工作日志的作用

    朱金灿 公司提倡我们每天都写工作日志 这使得我思考工作日志的作用 我想了一下 xff0c 工作日志应该要起两个作用 xff1a 1 计划作用 俗话说 xff1a 凡事预则立 xff0c 不预则废 最好在每天开始工作前先在工作日志上写下今天要
  • Tracealyzer for FreeRTOS(FreeRTOS+Trace) 详解(源码解析+移植)

    原文 xff1a http blog csdn net zcshoucsdn article details 54670473 最近公司搞新项目 xff0c 需要使用FreeRTOS xff0c 之前只有Linux的基础 xff08 学了个