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,那么就有断言失败的可能,因此,这里把断言失败的函数声明写上,即可避免编译错误。

再看断言失败的处理:

相关文章
|
6月前
|
JavaScript Java 测试技术
基于Java的城投公司企业人事管理系统的设计与实现(源码+lw+部署文档+讲解等)
基于Java的城投公司企业人事管理系统的设计与实现(源码+lw+部署文档+讲解等)
51 0
|
6月前
|
JavaScript Java 测试技术
基于Java的中医+养老服务平台的设计与实现(源码+lw+部署文档+讲解等)
基于Java的中医+养老服务平台的设计与实现(源码+lw+部署文档+讲解等)
45 0
|
架构师 Cloud Native Java
GitHub竟开源阿里内部java架构师涨薪充电路线图,3小时标星28k+
一份java架构师涨薪充电路线图,内容从Java核心讲起,包含经典框架源码、分布式微服务架构筑基、微服务架构之NetFilx体系、微服务架构之Alibaba体系、微服务架构下的性能优化、云原生以及虚拟化技术、Spring Cloud Alibaba项目实战,跟LZ一起看下去。
|
新零售 大数据 云计算
泰山众筹商城系统开发案例详细/方案程序/成熟技术/开发项目/源码平台
  新零售指的就是线上、线下和物流必须结合在一起。也就是说,线下的企业必须走到线上去,线上的企业必须走到线下来,线上、线下同现代物流结合在一起,才能真正创造出新的销售方式。
|
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阿凡达模式系统开发技术方案
105 0
|
区块链 C++ 芯片
泰山众筹系统!区块链泰山众筹DAPP模式系统开发流程逻辑分析详情
泰山众筹系统!区块链泰山众筹DAPP模式系统开发流程逻辑分析详情
262 0
|
区块链
逻辑泰山众筹系统丨方案泰山众筹系统开发技术概念代码分析结果介绍
逻辑泰山众筹系统丨方案泰山众筹系统开发技术概念代码分析结果介绍
泰山众筹系统丨泰山众筹系统开发(详细及案例)丨泰山众筹源码案例开发
solidity合约内调用合约 ChainMaker evm虚拟机支持solidity合约动态调用solidity合约,solidity合约动态调用solidity合约,以及solidity合约动态调用其他类型合约。
下一篇
无影云桌面