0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

分享配置Polyspace分析C代码的方法和简介

MATLAB 来源:djl 作者:龚小平 2019-09-16 16:28 次阅读

Polyspace可以分析C、C++以及Ada代码,本文以嵌入式系统中最为常见的C代码分析为例说明Polyspace配置一个工程的过程和注意事项。

1. 配置语言和处理器类型

C语言由于其灵活性,在不同的编译器中有不同的约束和扩展,会影响最终生成的目标码的行为。Polyspace分析C代码时首先要最大程度和目标编译器的行为保持一致,这样才能保持代码分析的意义。因此在开始创建Polyspace工程时,我们需要配置编译器和处理器类型:

分享配置Polyspace分析C代码的方法和简介

所选用的C语言标准:C90/C99

所用编译器类型:Keil/Tasking/Diab/IAR…

(编译器通常定义了标准C语言之外的扩展,如关键字sfr、sbit等。选定编译器类型相当于告知了Polyspace在遇到此类非标扩展时如何解释其行为。)

目标处理器类型:定义不同数据类型的大小和字节顺序类型,如mpc5xx系列处理器定义如下:

分享配置Polyspace分析C代码的方法和简介

(某些运行时错误检查与此有关,如同一变量在Int定义为16位时会发生溢出,而在Int定义为32位时不会发生溢出。)

其他编译器行为设定:如负除取整方向、有符号数右移逻辑、枚举类型定义方式等。

2.选择验证分析模式

Polyspace有两种基本的验证分析模式:应用级分析和模块级分析,可以分别对应于集成测试和单元测试。

所谓应用级分析指用户待分析的源代码中包含了 main函数,选择应用级分析即分析进程从用户main函数入口,为了更好地模拟实际程序运行和调度情形,有时需要进行多任务(Multitasking)设置,有机会在以后再进一步介绍。

模块级分析通常待分析代码不包含main函数,Polyspace会自动打桩生成main函数并建立待分析函数的调用关系进行分析,并可进一步根据需要细化配置。如对于以下被调函数Function_sub和主调函数Function_top,可以设置为以下两种分析入口形式:

Function_sub(){ ……};

Function_top(){……

Function_sub();

……};

自动生成的main函数中只调用Function_top:在分析Function_top的进程中分析Function_sub,即Function_sub在Function_top的上下文中被分析。

自动生成的main函数中同时调用Function_top和Function_sub:Function_sub除了在Function_top的上下文中被分析,也会在直接在main函数上下文中被分析。对应的可能场景是Function_sub会被其他函数调用,需要更为鲁棒地分析其安全性。

分享配置Polyspace分析C代码的方法和简介

— 总结 —

Polyspace的配置是一个既简单又灵活的过程,通过对编译器行为的模拟和分析模型的选择,我们可以得到更为有意义和更符合需要的结果。

往期 | 代码分析验证

Polyspace应用到软件开发和验证流程

浅谈Polyspace的静态分析

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 处理器
    +关注

    关注

    68

    文章

    19156

    浏览量

    229090
  • 编译器
    +关注

    关注

    1

    文章

    1618

    浏览量

    49047
  • C代码
    +关注

    关注

    1

    文章

    89

    浏览量

    14286
收藏 人收藏

    评论

    相关推荐

    闪电定位仪的日常维护方法简介

    闪电定位仪的日常维护方法简介
    发表于 11-13 16:32 0次下载

    一种简单高效配置FPGA的方法

    本文描述了一种简单高效配置FPGA的方法,该方法利用微处理器从串行外围接口(SPI)闪存配置FPGA设备。这种方法减少了硬件组件、板空间和成
    的头像 发表于 10-24 14:57 368次阅读
    一种简单高效<b class='flag-5'>配置</b>FPGA的<b class='flag-5'>方法</b>

    Linux环境变量配置方法

    Linux上环境变量配置分为设置永久变量和临时变量两种。环境变量设置方法同时要考虑环境Shell类型,不同类型的SHELL设置临时变量方法和设置永久变量对应的配置文件不同。Linux环
    的头像 发表于 10-23 13:39 121次阅读

    hex文件如何查看原c语言代码

    是处理器可以直接执行的指令,而 C 语言代码则是人类可读的高级编程语言代码。 然而,如果你想要从 .hex 文件中获取一些有用的信息或者对程序进行分析,你可以考虑以下几种
    的头像 发表于 09-02 10:37 1498次阅读

    如何使用Polyspace Code Prover来统计堆栈

    前一篇文章介绍了堆栈和内存的一些背景知识。本次介绍如何使用 Polyspace Code Prover来统计堆栈,如何使用这些数据为软件优化服务。
    的头像 发表于 07-25 14:06 445次阅读
    如何使用<b class='flag-5'>Polyspace</b> Code Prover来统计堆栈

    欧姆龙EtherCAT配置方法

    欧姆龙EtherCAT配置方法
    的头像 发表于 06-13 16:03 915次阅读
    欧姆龙EtherCAT<b class='flag-5'>配置</b><b class='flag-5'>方法</b>

    TSMaster VLAN配置方法

    ,以太网目录Catalog1.VLAN的配置方法2.TCP/IP通讯带VLAN测试1.TSMaster配置VLANVLAN配置流程如下:1)VLAN
    的头像 发表于 05-18 08:21 436次阅读
    TSMaster VLAN<b class='flag-5'>配置</b><b class='flag-5'>方法</b>

    手柄控制代码及使用方法

    手柄控制代码及使用方法
    的头像 发表于 05-15 10:19 1583次阅读

    雅特力AT32F423时钟配置

    介绍如何结合雅特力提供的V2.x.x的板级支持包(BSP)来配置时钟。以下介绍时钟配置方法主要分两种:1、以手动编写代码调用BSP中提供的驱动函数接口来进行时钟配
    的头像 发表于 02-19 13:26 552次阅读
    雅特力AT32F423时钟<b class='flag-5'>配置</b>

    GD32固件库里时钟配置时的神秘代码?高频切低频时芯片会发生什么

    在GD固件库的时钟配置函数里看到这样一段神秘代码,研究分析后不得不佩服原厂固件库里的细节处理
    的头像 发表于 02-19 09:44 630次阅读
    GD32固件库里时钟<b class='flag-5'>配置</b>时的神秘<b class='flag-5'>代码</b>?高频切低频时芯片会发生什么

    BQ3588C_代码下载

    BQ3588C_代码下载
    的头像 发表于 01-10 15:09 487次阅读

    雅特力AT32WB415时钟配置

    介绍如何结合雅特力提供的V2.x.x的板级支持包(BSP)来配置时钟。以下介绍时钟配置方法主要分两种:1、以手动编写代码调用BSP中提供的驱动函数接口来进行时钟配
    的头像 发表于 12-20 08:14 455次阅读
    雅特力AT32WB415时钟<b class='flag-5'>配置</b>

    FPGA通过SPI对ADC配置简介(二)-4线SPI配置时序分析

    本篇将以德州仪器(TI)的高速ADC芯片—ads52j90为例,进行ADC的4线SPI配置时序介绍与分析
    的头像 发表于 12-11 09:05 1774次阅读
    FPGA通过SPI对ADC<b class='flag-5'>配置</b><b class='flag-5'>简介</b>(二)-4线SPI<b class='flag-5'>配置</b>时序<b class='flag-5'>分析</b>

    EMC计算方法和EMC仿真(1) ——计算方法简介

    EMC计算方法和EMC仿真(1) ——计算方法简介
    的头像 发表于 12-05 14:56 1332次阅读
    EMC计算<b class='flag-5'>方法</b>和EMC仿真(1) ——计算<b class='flag-5'>方法</b><b class='flag-5'>简介</b>

    如何在代码配置DDS编程示例

    DDS编程示例 我们尝试在代码配置DDS,以之前Hello World话题通信为例。 运行效果 启动两个终端,分别运行发布者和订阅者节点: $ ros2 run learning_qos
    的头像 发表于 11-24 18:08 983次阅读
    如何在<b class='flag-5'>代码</b>中<b class='flag-5'>配置</b>DDS编程示例