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) 详解(源码解析+移植) 的相关文章

  • java是否有任何机制可以让VM在不使用javaagent等的情况下跟踪自身的方法调用?

    我想动态构建调用图 从任意方法调用开始 或者从运行的 JVM 本身内部的新线程开始 哪一个更容易 这个软件将成为一个测试装置 用于对另一个使用调用图的软件进行负载测试 我知道有一些 SPI 接口 但看起来您需要使用它们运行 javaagen
  • 当一个任务写入变量而其他任务读取该变量时,我们是否需要信号量?

    我正在研究 freeRtos 并且我有一个名为 x 的变量 现在 每秒只有一个任务正在写入该变量 而其他任务正在读取该变量值 我需要用互斥锁来保护变量吗 如果变量为 32 位或更小 并且其值是独立的并且不与任何其他变量一起解释 则不需要互斥
  • 跟踪 Informix Client for Linux 的 ODBC 调用

    我尝试跟踪 Linux 上运行的程序中的 ODBC 函数调用 该程序动态链接 ODBC 管理器 然后连接到数据库并获取一些数据 我可以通过添加到 odbcinst ini 来使用 unixODBC 跟踪 ODBC 调用 ODBC Trace
  • 如何在 ASP.NET MVC 中生成完整的trace.axd?

    在我的应用程序上 启用后ASP NET 跟踪 http msdn microsoft com en us library y13fw6we VS 71 aspx在 ASP NET MVC 应用程序中 时间计算统计数据相差 5000 倍 我的
  • 当前在 C# 中跟踪程序流程的可能性?

    我用过波斯特锐普 http www sharpcrafters com 几年前到跟踪程序流程执行期间无需手动添加trace语句到方法 是否还有其他新方法可以跟踪执行以以类似的方式调试输出 最好是一种不需要对构建的组件进行检测的方法 也许不可
  • 跟踪 Erlang 中从邮箱消费消息的操作

    我浏览了文档trace 3Erlang 中的 BIF 然而 我的一个观察结果是它不能用于跟踪邮箱中消息的使用情况 旗帜 receive 仅跟踪消息何时添加到进程的邮箱 有没有一种方法可以跟踪事件 例如使用receive构造 如果不是 是否有
  • DefaultTraceListener 的性能影响

    使用时System Diagnostics跟踪 如果不删除 默认 跟踪侦听器 是否会对性能产生重大 可测量 影响 生产ASP NET应用在release模式 与TRACE在编译时定义的常量 但在运行时没有附加调试器 为了澄清 问题是关于 默
  • ltrace(库跟踪工具)如何工作?

    如何ltrace https www man7 org linux man pages man1 ltrace 1 html work 它如何找出程序调用了哪些库函数 是否存在所有对库函数的调用都经过的公共代码路径 或许ltrace在这个公
  • 了解 Trace 在 C# 中的工作原理

    我想了解跟踪是如何工作的 我创建了一个简单的新网络项目 这是我可以使用的代码 Create a trace listener for the event log EventLogTraceListener myTraceListener n
  • go 1.5 跟踪命令

    Go 1 5 发行说明说 新的 go tool trace 命令可以实现运行时中新跟踪基础设施生成的程序跟踪的可视化 这真的很令人兴奋 我想了解更多 但其官方文件位于https golang org cmd trace https gola
  • WinDbg——TraceListener 和饱和线程池

    我有一个多线程 NET Windows 服务 它间歇性地挂起 可能每两周 24 7 运行一次 当发生挂起时 线程池完全饱和 因为对我们的自定义跟踪侦听器的调用由于某种原因开始阻塞 根据 Windbg 的说法 有问题的代码中没有任何锁 也没有
  • “sys.settrace”在 Python 3.5 中可以正常工作,但在 Python 3.6 中不能正常工作吗?

    在尝试回答另一个问题时 我突然意识到 当理论上您不应该拥有控制权时 您可以在线程中随时运行代码 CPython 有一个settrace用于在代码中注册跟踪函数的函数 为了通过使用类来测试这个想法 编写了以下代码 问题是跟踪似乎没有发生 并且
  • 哪些变量类型/大小在 STM32 微控制器上是原子的?

    以下是 STM32 微控制器上的数据类型 http www keil com support man docs armcc armcc chr1359125009502 htm http www keil com support man d
  • WCF 仅跟踪失败的请求?

    我想将跟踪信息保存到 svclog 文件中 但仅限于失败的请求 这可能吗 如果是这样 具体如何 我有一个每分钟调用数百次的 WCF 服务 在极少数情况下 客户端会收到错误 500 该错误发生在 WCF 内运行的代码边界之外 通常是安全问题
  • ftrace:仅打印trace_printk()的输出

    是否可以只转储trace printk 输出于trace文件 我的意思是过滤掉函数跟踪器 或任何其他跟踪器 中的所有函数 一般来说 您可以在选项目录中关闭选项 sys kernel debug tracing options Use ls显
  • 替代(免费)AOP PostSharp 用于方法跟踪(和异常)

    我喜欢添加跟踪类中每个方法的进入和离开 并在发生异常时跟踪参数 使用 PostSharp AOP 我不需要将其放入每个方法中 而只需应用属性即可 但我买不起 PostSharp 有其他方法可以做到这一点吗 Unity3D可以做到吗 我正在使
  • 如何打印脚本的每一行,因为它仅针对正在运行的顶级脚本运行?

    python 跟踪模块将允许您运行一个脚本 打印每一行代码 因为它在脚本和所有导入的模块中运行 如下所示 python m trace trace myscript py 有没有办法做同样的事情 但是only打印顶级调用 即仅打印以下行my
  • ftrace 是否允许捕获 Linux 内核的系统调用参数,或者仅捕获函数名称?

    目标是检查任何进程传递给特定系统调用 例如 exec open 等 的参数 来自官方文档 https www kernel org doc Documentation trace ftrace txt 没有描述记录函数参数的功能 主要查看
  • Linux:如何调试 SIGSEGV?如何追踪错误源?

    我的火狐浏览器从今天开始崩溃了 我没有更改系统或 Firefox 配置上的任何内容 I use strace ff o dumpfile txt firefox来追踪问题 这没什么大帮助 我在两个生成的进程转储中看到了段错误 但我怎样才能t
  • 如何从 OpenTracing API 获取跟踪 ID?

    In 105 https github com opentracing opentracing java issues 105大卫B问 我希望拥有对 Span id SpanContext id 的读取访问权限 以便能够在日志和错误报告中使

随机推荐

  • 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 学了个