cmocka的学习(2)

CMake学习(四)——自检 这一篇博客我们将在之前的项目中添加一些代码实现简单的自检功能。代码的描述是这样的,依据目标平台是否有log和exp函数(当然,几乎所有的平台都有这两个函数,当时我们假定我们的项目不一定有),如果有的话,在mysqrt函数中应这两个函数计算平方根。 首先,我们需要检测在项目中这两个函数是否可用,通过在顶层CMakeLists.txt文件中调用CheckFunctionExists模块来实现,在CM... 阅读详情

cmocka的学习(2)-配置头文件config.h生成脚本

重点函数说明

  1. check_include_file(file.h VAR)
  2. check_function_exists(calloc HAVE_CALLOC)
  3. check_symbol_exists(snprintf stdio.h HAVE_SNPRINTF)

check_include_file(file.ext VAR)

这个函数可以检测某个文件是否存在。存在是会设置VAR变量。使用这个函数需要先用project函数,设置project使用的语言。

check_function_exists(calloc HAVE_CALLOC)

这个函数用于检测特定的函数是否存在。如果存在设置变量 HAVE_CALLOC。

check_symbol_exists(snprintf stdio.h HAVE_SNPRINTF)

这个函数检测文件stdio.h中是否定义了符号snprintf。如果定义了,设置变量HAVE_SNPRINTF。

cmocka源码

cmake以下是cmocka中ConfigureChecks.cmake文件的源码

include(CheckIncludeFile)
include(CheckSymbolExists)
include(CheckFunctionExists)
include(CheckLibraryExists)
include(CheckTypeSize)
include(CheckCXXSourceCompiles)
include(CheckStructHasMember)
include(TestBigEndian)

set(PACKAGE ${PROJECT_NAME})
set(VERSION ${PROJECT_VERSION})
set(DATADIR ${DATA_INSTALL_DIR})
set(LIBDIR ${CMAKE_INSTALL_LIBDIR})
set(PLUGINDIR "${PLUGIN_INSTALL_DIR}-${LIBRARY_SOVERSION}")
set(SYSCONFDIR ${SYSCONF_INSTALL_DIR})

set(BINARYDIR ${CMAKE_BINARY_DIR})
set(SOURCEDIR ${CMAKE_SOURCE_DIR})

function(COMPILER_DUMPVERSION _OUTPUT_VERSION)
    # Remove whitespaces from the argument.
    # This is needed for CC="ccache gcc" cmake ..
    string(REPLACE " " "" _C_COMPILER_ARG "${CMAKE_C_COMPILER_ARG1}")

    execute_process(
        COMMAND
            ${CMAKE_C_COMPILER} ${_C_COMPILER_ARG} -dumpversion
        OUTPUT_VARIABLE _COMPILER_VERSION
    )

    string(REGEX REPLACE "([0-9])\\.([0-9])(\\.[0-9])?" "\\1\\2"
        _COMPILER_VERSION ${_COMPILER_VERSION})

    set(${_OUTPUT_VERSION} ${_COMPILER_VERSION} PARENT_SCOPE)
endfunction()

if(CMAKE_COMPILER_IS_GNUCC AND NOT MINGW)
    compiler_dumpversion(GNUCC_VERSION)
    if (NOT GNUCC_VERSION EQUAL 34)
        check_c_compiler_flag("-fvisibility=hidden" WITH_VISIBILITY_HIDDEN)
    endif (NOT GNUCC_VERSION EQUAL 34)
endif(CMAKE_COMPILER_IS_GNUCC AND NOT MINGW)

# DEFINITIONS
if (SOLARIS)
    add_definitions(-D__EXTENSIONS__)
endif (SOLARIS)

# HEADER FILES
check_include_file(assert.h HAVE_ASSERT_H)
check_include_file(inttypes.h HAVE_INTTYPES_H)
check_include_file(io.h HAVE_IO_H)
check_include_file(malloc.h HAVE_MALLOC_H)
check_include_file(memory.h HAVE_MEMORY_H)
check_include_file(setjmp.h HAVE_SETJMP_H)
check_include_file(signal.h HAVE_SIGNAL_H)
check_include_file(stdarg.h HAVE_STDARG_H)
check_include_file(stddef.h HAVE_STDDEF_H)
check_include_file(stdint.h HAVE_STDINT_H)
check_include_file(stdio.h HAVE_STDIO_H)
check_include_file(stdlib.h HAVE_STDLIB_H)
check_include_file(string.h HAVE_STRING_H)
check_include_file(strings.h HAVE_STRINGS_H)
check_include_file(sys/stat.h HAVE_SYS_STAT_H)
check_include_file(sys/types.h HAVE_SYS_TYPES_H)
check_include_file(time.h HAVE_TIME_H)
check_include_file(unistd.h HAVE_UNISTD_H)

if (HAVE_TIME_H)
    check_struct_has_member("struct timespec" tv_sec "time.h" HAVE_STRUCT_TIMESPEC)
endif (HAVE_TIME_H)

# FUNCTIONS
check_function_exists(calloc HAVE_CALLOC)
check_function_exists(exit HAVE_EXIT)
check_function_exists(fprintf HAVE_FPRINTF)
check_function_exists(free HAVE_FREE)
check_function_exists(longjmp HAVE_LONGJMP)
check_function_exists(siglongjmp HAVE_SIGLONGJMP)
check_function_exists(malloc HAVE_MALLOC)
check_function_exists(memcpy HAVE_MEMCPY)
check_function_exists(memset HAVE_MEMSET)
check_function_exists(printf HAVE_PRINTF)
check_function_exists(setjmp HAVE_SETJMP)
check_function_exists(signal HAVE_SIGNAL)
check_function_exists(strsignal HAVE_STRSIGNAL)
check_function_exists(strcmp HAVE_STRCMP)
check_function_exists(clock_gettime HAVE_CLOCK_GETTIME)

if (WIN32)
    check_function_exists(_vsnprintf_s HAVE__VSNPRINTF_S)
    check_function_exists(_vsnprintf HAVE__VSNPRINTF)
    check_function_exists(_snprintf HAVE__SNPRINTF)
    check_function_exists(_snprintf_s HAVE__SNPRINTF_S)
    check_symbol_exists(snprintf stdio.h HAVE_SNPRINTF)
    check_symbol_exists(vsnprintf stdio.h HAVE_VSNPRINTF)
else (WIN32)
    check_function_exists(sprintf HAVE_SNPRINTF)
    check_function_exists(vsnprintf HAVE_VSNPRINTF)
endif (WIN32)

find_library(RT_LIBRARY rt)
if (RT_LIBRARY AND NOT LINUX AND NOT ANDROID)
    set(CMOCKA_REQUIRED_LIBRARIES ${RT_LIBRARY} CACHE INTERNAL "cmocka required system libraries")
endif ()

# OPTIONS
check_c_source_compiles("
__thread int tls;

int main(void) {
    return 0;
}" HAVE_GCC_THREAD_LOCAL_STORAGE)

if (WIN32)
check_c_source_compiles("
__declspec(thread) int tls;

int main(void) {
    return 0;
}" HAVE_MSVC_THREAD_LOCAL_STORAGE)
endif(WIN32)

if (HAVE_TIME_H AND HAVE_STRUCT_TIMESPEC AND HAVE_CLOCK_GETTIME)
    if (RT_LIBRARY)
        set(CMAKE_REQUIRED_LIBRARIES ${RT_LIBRARY})
    endif()

    check_c_source_compiles("
#include <time.h>

int main(void) {
    struct timespec ts;

    clock_gettime(CLOCK_REALTIME, &ts);

    return 0;
}" HAVE_CLOCK_REALTIME)

    # reset cmake requirements
    set(CMAKE_REQUIRED_INCLUDES)
    set(CMAKE_REQUIRED_LIBRARIES)
endif ()

# ENDIAN
if (NOT WIN32)
    set(WORDS_SIZEOF_VOID_P ${CMAKE_SIZEOF_VOID_P})
    test_big_endian(WORDS_BIGENDIAN)
endif (NOT WIN32)
C之(10)CMocka-嵌入式环境下的单元测试实战指南 本文详细介绍了CMocka在嵌入式环境下的单元测试实战指南,涵盖从框架简介到高级Mock技术的全面解析。CMocka作为轻量级单元测试框架,特别适合资源受限的嵌入式系统,支持多平台运行和内存泄漏检测。文章还提供了交叉编译配置、内存优化技巧及持续集成实践,帮助开发者高效进行嵌入式单元测试。 阅读详情

相关推荐

c++ 单元测试_嵌入式自动化单元测试(2)-Cmocka

介绍cmocka作为开源的单元测试工具,基于google发布的cmockery工具,目前被libssh、csync等软件所采用。作为源代码单元测试工具,其功能强大,且方便使用。本文结合单元测试中的一些规范,对于cmokca的使用进行分析和说明。cmocka基本使用说明cmocka基于google的单元测试工具cmockery,其主要功能有:内存操作检查模拟函数返回值函数入参检查不同类型的验证宏定义...

weixin_29371981的博客 1275

cmake: CHECK_INCLUDE_FILE_CXX 检查是否存在 codecvt 头文件

今天第一次使用cmake的CHECK_INCLUDE_FILE_CXX 函数检查是否存在 codecvt include文件,然而出错了(编译器使用gcc 5.4.0)。 cmake脚本如下: include(CheckIncludeFileCXX) # 检查是否存在 codecvt header file CHECK_INCLUDE_FILE_CXX(codecvt HAS_CODECVT ) # 检查是否存在 algorithm header file CHECK_INCLUDE_FILE_CXX(al

10km的专栏 4153

实战避坑:示波器测量非隔离开关电源的炸机风险与隔离方案

本文详细分析了使用示波器测量非隔离开关电源时的炸机风险,揭示了地线环路导致的短路问题,并对比了四种防炸机解决方案,包括示波器隔离供电、拔掉电源地线、使用差分探头和被测板隔离供电。重点推荐使用隔离变压器方案,确保测量安全与精度,同时提供了实操建议与经验分享,帮助工程师避免常见测量事故。

weixin_29224309的博客 564

C之(10)CMocka-单元测试框架使用

CMocka 是一个用于 C 语言的单元测试框架,它是 Check 单元测试框架的一个分支。CMocka 的设计哲学是“只做一件事,但做得好”,这使得它成为一个轻量级、易于使用的工具。它为测试 C 代码提供了一种简单、稳定的方法。轻量级和模块化:CMocka 不需要复杂的设置,不依赖于其他库,且不会大幅度地增加你的项目大小。你可以简单地将其添加到你的 C 项目中,然后开始编写测试。模拟函数:在进行单元测试时,我们通常需要模拟一些函数以便在特定条件下测试我们的代码。

梅花香自苦寒来,宝剑锋从磨砺出。 4437

机器学习——径向基函数(RBF)神经网络

目录 一、什么是基函数 二、什么是径向基函数 三、为什么RBF神经网络使用一个径向基函数作为隐含层的激活函数 四、参数训练 五、RBF网络vs BP网络和 SVM 一、什么是基函数 著名的傅里叶变换是指:n个有参(权值)的正、余弦三角函数基的和式可以等价的表示任意一个周期函数,这里的“基”和我们数学中说的坐标基或向量基含义相同,即坐标空间中任意一个向量都可以用基向量的线性和表示出来。 因此,我们引入函数空间的概念,函数空间中的每个连续函数可以表示为基函数的线性组合,就像向量空间中的每..

CHWB2580的博客 6273

k8s部署 普罗米修斯(Prometheus)监控

Prometheus是一个开源的服务监控系统和时序数据库其提供了通用的数据模型和快捷数据采集、存储和查询接口它的核心组件Prometheus服务器定期从静态配置的监控目标或者基于服务发现自动配置的目标中进行拉 取数据新拉取到啊的 数据大于配置的内存缓存区时,数据就会持久化到存储设备当中。

D2961953033的博客 3860

【单元测试】CMocka单元测试框架(支持mock功能)

1. 前言 本文内容涉及单元测试,需要读者具有单元测试的基础知识,如果没有,请移步至我之前的博客文章: 【单元测试】开篇 【单元测试】Test Double简介 2. CMocka概述 官网:https://cmocka.org/ CMocka 是一款支持mock对象、面向C语言的单元测试框架,CMocka 往往是编译成库的形式,供C单元测试程序链接调用。其前身是谷歌开发的 Cmockery,...

许振坪的专栏 1万+

K8s认证文件丢失的应急处理与恢复策略

本文详细介绍了Kubernetes(K8s)认证文件丢失时的应急处理与恢复策略。从快速诊断问题范围到不同场景的临时解决方案,再到深度恢复方案(无损重建、部分重置、完全重建),提供了全面的操作指南。同时强调了生产环境中的防丢失设计、高可用集群的特殊处理以及日常运维建议,帮助运维人员有效应对认证文件丢失的紧急情况。

weixin_33743248的博客 328

cmocka的学习(1)

使用clang编译cmocka,并执行其测试程序

github_19061021的博客 3355

新一代XMOS会议四麦方案主控芯片 XVF3800

2023年,知名的音频芯片制造厂商 XMOS 正式发布了新一代会议麦阵芯片片 XVF3800 ,这款芯片采用最先进的四麦音频算法,可在嘈杂的环境中提供高质量语音,算法支持圆形、条形阵列,可根据应用场景组成不同的产品形态。传统的麦阵解决方案,不仅需要捕捉会议中的人声,也会同时捕捉环境中的其他噪声,而 XMOS 先进的语音算法解决了这一问题。声学回声消除功能可消除麦克风音频输入的回声,同时减少远端回声,使 XVF3800 能提取清晰的语音信号。• 180度拾音条形麦克风阵列。• 360度拾音环形麦克风阵列。

PawPaw_electron的博客 785

OpenClaw插件配置错误修复完全指南

插件文件名是插件目录结构正确package.json配置正确OpenClaw的插件系统还在快速迭代,偶尔会遇到这种配置问题。看错误信息检查配置文件检查实际文件对比差异修复问题大部分问题都能解决。查看官方文档:https://openclaw.ai/docs提Issue:https://github.com/openclaw/openclaw/issues加入Discord社区求助快速修复命令汇总。

Maynor的博客 4099

cmocka入门教程

本文介绍cmocka中,mock的使用。

大草的博客 1890

基于YOLOv5的仪表读数识别系统:从检测到识别的完整解决方案

随着工业自动化水平的不断提高,仪表读数识别技术在电力系统、石油化工、智能制造等领域发挥着越来越重要的作用。本文提出了一种基于YOLOv5的仪表自动读数识别系统,该系统能够有效区分指针式和数字式仪表,并实现高精度的读数识别。我们详细介绍了系统的整体架构、数据集构建、模型训练策略以及用户界面设计,并提供了完整的代码实现。实验结果表明,本系统在仪表检测和读数识别任务上均取得了优异的表现,为工业现场的自动化监控提供了可靠的技术支持。关键词:仪表读数识别;YOLOv5;目标检测;深度学习;工业自动化。

YOLO 681

openvela之开发自测试框架cmocka

通过以上步骤,我们可以使用 openvela 提供的 CMocka 框架开发测试用例,在开发阶段早期发现并解决代码中的缺陷,从而提高代码质量。在实际开发过程中,我们可以根据具体需求对测试用例进行扩展和优化,以确保软件的稳定性和可靠性。

RIVOTEK_OPENVELA的博客 1621

2025年CSP-J初赛真题及答案解析(完整版)

2025年CSP-J初赛真题及答案解析(完整版)

王老师青少年编程 1万+

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

嵌入式测试驱动开发:embedded-resources的Catch2与cmocka单元测试实践

嵌入式测试驱动开发听起来门槛很高,但当你面对一个把单元测试"焊死"进构建体系的开源仓库时,一切都会变得直观起来。**embedded-resources** 是嵌入式领域知名博客 Embedded Artistry 公开的模板、文档与源码示例集合,它最值得新手学习的,正是那套同时集成 **Catch2** 与 **cmocka** 两大单元测试框架的工程实践。无论你是想给单片机代码补测试,还是想搞

gitblog_00893的博客 714

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

cmocka源码编译安装

cmocka源码编译安装 cmocka install and build(for ccn-lite on Ubuntu Mate) 1、cmocka是google开源的单元测试框架 官网网址:https://cmocka.org/ 2、下载源码,如:cmocka-1.1.1.tar.xz 官网网址:https://cmocka.org/files/ 3、解压 QIANZI-BASE:/ho...

2934

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

使用cmocka实现嵌入式单元测试

单元测试是软件开发过程中非常重要的一环,只有“基础”牢固了,系统这座“大厦”才能稳定运行(抄自知乎)。提示:以下是本篇文章正文内容,下面案例可供参考。

qq_39789292的博客 2442

Windows 7 下搭建C语言单元测试框架 Cmocka

Cygwin 简介 首先在 Windows 7 下安装 Cygwin (一个 Windows 环境下的 Linux 仿真操作系统), 然后,接下来所有的操作就跟 Linux 环境下的操作是一模一样的了。 Cygwin 官网 是这么自我介绍的: 1、Cygwin是什么? …is it? Cygwin is: a large collection of GNU and Open Source tools which provide functionality similar to a Linux distri

Spark Lee 1321

cmocka编译安装

1.cmocka简介: 官网:https://cmocka.org/ cmocka是google开源的单元测试框架。 2.编译安装 2.1下载源码 https://cmocka.org/files/ 如:cmocka-1.1.0.tar.xz 2.2解压 xz -d cmocka-1.1.0.tar.xz tar -xvf cmocka-1.1.0.tar 2.

kaka09life的专栏 5554

单元测试:CMocka单元测试框架(支持mock功能)

CMocka概述 官网: https://cmocka.org/ 源码: https://gitlab.com/cmocka/cmocka CMocka 是一款支持 mock 对象、面向C语言的单元测试框架,CMocka 往往是编译成库的形式,供C单元测试程序链接调用。其前身是谷歌开发的Cmockery,由于后者缺少维护,因此 CMocka 继承了 Cmockery 并继续维护。 CMocka 框架的特性: 支持模拟对象,可设置模拟函数的期望返回值,期望输出参数,可检查模拟函数的输入参数、函数调用顺序。

OceanStar的博客 3946

C语言单元检测——Cmocka

Cmocka是一个优雅的C单元测试框架,它只需要标准C库,提供对模拟对象的支持。

qq_64796605的博客 606

简单理解:什么是CMocka ?

核心步骤:下载 CMocka → 编译(主机 / 交叉编译)→ 项目集成(头文件 + 库 + CMake)→ 编写测试用例 → 运行验证;嵌入式关键:交叉编译时指定和 MCU 架构参数,用静态库;简化技巧:新手可先在 Linux 主机完成测试验证,再移植到嵌入式硬件。

DIY 666

cmocka 项目推荐

cmocka 项目推荐 1. 项目基础介绍和主要编程语言 cmocka 是一个优雅的 C 语言单元测试框架,支持模拟对象。该项目是 Google 的 cmockery 单元测试框架的一个分支,旨在修复 bug 并继续支持其未来的发展。cmocka 项目托管在 GitHub 上,由 clibs 组织维护。 2. 项目的核心功能 cmocka 的核心功能包括: 单元测试框架:提供了一个简单而强大的单...

gitblog_00113的博客 326

【ACPI探索】第7章扩展:在 ACPI 测试体系中引入 cmocka Mock全流程

摘要 本文系统介绍了如何在ACPI程序及固件C代码测试中应用cmocka框架。主要内容包括: cmocka在ACPI测试中的必要性:解决平台依赖、多阶段初始化、硬件错误复现、资源泄漏检测等挑战 分层测试策略:从内存分配层到持久区访问层,共7个层级,越基础接口越需要Mock 项目结构建议:独立mock目录存放接口模拟,单元测试与工具分离 核心测试用例:链式资源分配失败场景(如第一次成功第二次失败),验证资源清理逻辑 函数替换技术:比较链接重定向、宏包装和函数指针三种方式 cmocka基础API:will_re

就聊这个了,window/linux 嵌入式驱动 1461

cmocka 单元测试框架使用教程

cmocka 单元测试框架使用教程 1. 项目介绍 cmocka 是一个优雅的 C 语言单元测试框架,支持模拟对象(mock objects)。它仅依赖于标准 C 库,适用于多种计算平台(包括嵌入式系统)和不同的编译器。cmocka 旨在为 C 语言提供一个强大的测试框架,支持在不同平台和操作系统上进行测试。 主要特点 支持模拟对象:模拟对象用于模拟实际对象的实现,有助于在隔离环境中测试接口。 ...

gitblog_00432的博客 802
上一篇: cmocka的学习(1)
下一篇: GoCD使用日记(1)
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值