野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 10805|回复: 4

第十一章的每课一练

[复制链接]
发表于 2016-2-29 21:47:26 | 显示全部楼层 |阅读模式
捕获.PNG
这个怎么做的?再哪里改参数才能使输出错误?
回复

使用道具 举报

发表于 2016-3-1 09:47:37 | 显示全部楼层
例如GPIO模式可选以下几种:
/**
  * @brief  GPIO Configuration Mode enumeration
  */   
typedef enum
{
  GPIO_Mode_IN   = 0x00, /*!< GPIO Input Mode */
  GPIO_Mode_OUT  = 0x01, /*!< GPIO Output Mode */
  GPIO_Mode_AF   = 0x02, /*!< GPIO Alternate function Mode */
  GPIO_Mode_AN   = 0x03  /*!< GPIO Analog Mode */
}GPIOMode_TypeDef;
#define IS_GPIO_MODE(MODE) (((MODE) == GPIO_Mode_IN)  || ((MODE) == GPIO_Mode_OUT) || \
                            ((MODE) == GPIO_Mode_AF)|| ((MODE) == GPIO_Mode_AN))


假如你赋值了0x04,那么在gpio_init函数的assert会检查出错误。
当然如果赋值0x04,由于它的enum类型,在编译的时候编译器也会提示warning
回复 支持 反对

使用道具 举报

发表于 2016-3-1 09:49:22 | 显示全部楼层
学的这么仔细     

在每个库函数的开头都会对输入的形参进行断言检查,如果你输入的参数跟预先定义好的那些参数不一样的话,就显示为非法参数,
那么这个时候就可以调用断言函数输出你想输出的:错误提示信息,比如输出文件名,行号,或者让一个LED亮来警示这样的错误。      
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-3-1 14:01:52 | 显示全部楼层
flyleaf 发表于 2016-3-1 09:47
例如GPIO模式可选以下几种:
/**
  * @brief  GPIO Configuration Mode enumeration

我试了一下你说的这种方法,编译器并没有warning同时用于提示错误的灯也没有亮。感觉这样改了以后GPIO的模式很混乱导致主函数里的程序全不能正常显示
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-3-1 14:05:26 | 显示全部楼层
fire 发表于 2016-3-1 09:49
学的这么仔细     

在每个库函数的开头都会对输入的形参进行断言检查,如果你输入的参数跟预先定义好的 ...

我不知道应该如何制造一个非法参数
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

联系站长|手机版|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号 ) 大学生ARM嵌入式2群

GMT+8, 2025-1-11 15:05 , Processed in 0.027937 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表