sun4.0泰山众筹模式项目系统开发技术讲解放哪(Demo)

简介: sun4.0泰山众筹模式项目系统开发技术讲解放哪(Demo)

STM32 一种参数检查用法介绍
assert_param()是一个在代码中很常见的写法,这个函数的功能一般是对函数参数的合法性进行检查,这里以一个例子进行分析:

assert_param(IS_GPIO_ALL_PERIPH(GPIOx))
函数的参数是IS_GPIO_ALL_PERIPH(GPIOx),原型为:

define IS_GPIO_ALL_PERIPH(PERIPH) (((PERIPH) == GPIOA) || \

                                ((PERIPH) == GPIOB) || \
                                ((PERIPH) == GPIOC) || \
                                ((PERIPH) == GPIOD) || \
                                ((PERIPH) == GPIOE) || \
                                ((PERIPH) == GPIOF) || \
                                ((PERIPH) == GPIOG) || \
                                ((PERIPH) == GPIOH) || \
                                ((PERIPH) == GPIOI) || \
                                ((PERIPH) == GPIOJ) || \
                                ((PERIPH) == GPIOK))

复制
这个宏定义的作用就是检查参数PERIPH,判断参数PERIPH是否为GPIOX(A...G)基址中的一个,只要有一个为真则其值为真,否则为假。由于这个是宏定义,因此并不是在编译的时候进行判断上的简化,而是将多行代码用宏定义代替了。

下面再看看assert_param:

assert_param
函数原型如下:

ifdef USE_FULL_ASSERT

/**

  • @brief The assert_param macro is used for function's parameters check.
  • @param expr: If expr is false, it calls assert_failed function
  • which reports the name of the source file and the source
  • line number of the call that failed.
  • If expr is true, it returns no value.
  • @retval None

*/

#define assert_param(expr) ((expr) ? (void)0 : assert_failed((uint8_t *)__FILE__, __LINE__))

/ Exported functions ------------------------------------------------------- /

void assert_failed(uint8_t* file, uint32_t line);

else

#define assert_param(expr) ((void)0)

endif / USE_FULL_ASSERT /

复制
这里有一个判断,如果是FULL ASSERT,则宏定义被展开为:((expr) ? (void)0 : assert_failed((uint8_t *)__FILE__, __LINE__)),否则则被展开为((void)0)。

先看第二种:
如果被展开为((void)0),则相当于什么也没做,那么看第一种,如果expr为真,则跟第二种的处理一样,什么也不做,如果expr为假,则执行断言失败assert_failed((uint8_t *)__FILE__, __LINE__))

既然如果选择了FULL ASSERT,那么就有断言失败的可能,因此,这里把断言失败的函数声明写上,即可避免编译错误。

再看断言失败的处理:

相关文章
|
新零售 大数据 云计算
泰山众筹商城系统开发案例详细/方案程序/成熟技术/开发项目/源码平台
  新零售指的就是线上、线下和物流必须结合在一起。也就是说,线下的企业必须走到线上去,线上的企业必须走到线下来,线上、线下同现代物流结合在一起,才能真正创造出新的销售方式。
|
JavaScript 前端开发 Java
泰山众筹sun4.0开发系统DAPP模式
双方的合同代码被上传到区块链,以检查合同的有效性并启用所需的步骤。从初始化开始,智能合约将自动执行。智能合约与传统合约的主要区别在于,智能合约不依赖于第三方,加密代码自动执行。
泰山众筹sun4.0开发系统DAPP模式
|
数据格式 JSON
泰山众筹4.0开发案例源码丨泰山众筹4.0系统开发(详细规则及功能)丨泰山众筹4.0系统源码模式
contract ERC721 { function balanceOf(address _owner) external view returns (uint256); function ownerOf(uint256 _tokenId) external view returns (address); function safeTransferFrom(address _from, address _to, uint256 _tokenId, bytes data) external payable;
SUN4.0众筹模式系统开发模式丨SUN4.0阿凡达模式系统开发技术方案
SUN4.0众筹模式系统开发模式丨SUN4.0阿凡达模式系统开发技术方案
109 0
|
IDE Oracle Java
【软件创新实验室2021年寒假集训】Java技术培训——Java前置知识学习
【软件创新实验室2021年寒假集训】Java技术培训——Java前置知识学习
【软件创新实验室2021年寒假集训】Java技术培训——Java前置知识学习
|
Java 程序员
【软件创新实验室2021年寒假集训】Java技术培训——Java基础(二)
【软件创新实验室2021年寒假集训】Java技术培训——Java基础(二)
【软件创新实验室2021年寒假集训】Java技术培训——Java基础(二)
|
区块链 C++ 芯片
泰山众筹系统!区块链泰山众筹DAPP模式系统开发流程逻辑分析详情
泰山众筹系统!区块链泰山众筹DAPP模式系统开发流程逻辑分析详情
265 0
|
安全 区块链
泰山众筹源码系统开发(全合约)泰山众筹系统开发语言讲解丨泰山众筹商城系统开发技术方案
泰山众筹源码系统开发(全合约)泰山众筹系统开发语言讲解丨泰山众筹商城系统开发技术方案
|
存储 区块链 索引
合约版&泰山众筹项目DAPP开发技术介绍*智能合约众筹模式开发理念
合约版&泰山众筹项目DAPP开发技术介绍*智能合约众筹模式开发理念
130 0
|
区块链
逻辑泰山众筹系统丨方案泰山众筹系统开发技术概念代码分析结果介绍
逻辑泰山众筹系统丨方案泰山众筹系统开发技术概念代码分析结果介绍
下一篇
DataWorks