NRF51822+STM32bootload——typedef void (*Fun) (void) 理解
1、typdef 用法如下所示
typedef unsigned char uint8_t;
typedef unsigned short int uint16_t;
typedef unsigned int uint32_t;
uint8_t i; //定义一个8位无符号字符型变量
2、指针函数形式
//定义一个函数指针pfun,指向一个返回类型为int,有一个参数为int的函数
int (*pfun)(int) ;
//指针层面理解,函数的函数 名是一个指针
//指针指向函数在内存中的首地址
int shiftfun(int a)
{
int temp;
temp = a;
temp<<a;
return a;
}
int main()
{
int temp;
//将函数shiftfun的地址赋值给变量pfun
pfun = shiftfun;
//*pfun ”显然是取pfun 所指向地址的内容,当然也就是取出了函数shiftfun()的内容,然后给定参数为2。
temp = (*pfun)();
}
3、typedef 返回类型(*新类型)(参数表)
typedef char (*PTRFUN)(int);
PTRFUN pFun;
char glFun(int a){ return;}
void main()
{
pFun = glFun;
(*pFun)();
}
由上对typedef void (*Fun) (void);理解
typedef 的作用是把已知的类型定义新类型,所以新类型(*Func)(void)的返回值是void。
定义了一个新类型,该类型是一个函数指针,它指向的函数形参为void,返回值为void。
发现51822中有个SPI从机事件回调函数类型
/** @brief SPI slave event callback function type.
*
* @param[in] event SPI slave driver event.
*/
typedef void (*nrf_drv_spis_event_handler_t)(nrf_drv_spis_event_t event);
上文代码定义了一个新类型,该类型为*nrf_drv_spis_event_handler_t 的函数指针,它指向的函数形参event为nrf_drv_spis_event_t类型的结构体结构体格式如下所示,返回值为void。
/** @brief Structure containing the event context from the SPI slave driver. */
typedef struct
{
nrf_drv_spis_event_type_t evt_type; //!< Type of event.
uint32_t rx_amount; //!< Number of bytes received in last transaction. This parameter is only valid for @ref NRF_DRV_SPIS_XFER_DONE events.
uint32_t tx_amount; //!< Number of bytes transmitted in last transaction. This parameter is only valid for @ref NRF_DRV_SPIS_XFER_DONE events.
} nrf_drv_spis_event_t;
回调示例如下所示:
ret_code_t nrf_drv_spis_init(nrf_drv_spis_t const * const p_instance,
nrf_drv_spis_config_t const * p_config,
nrf_drv_spis_event_handler_t event_handler) //此处该指针函数作为形参
{
......
}
定义了一个函数nrf_drv_spis_init,该函数有一个参数event_handler类型为上面定义的新类型nrf_drv_spis_event_handler_t
APP_ERROR_CHECK(nrf_drv_spis_init(&spis, &spis_config, spis_event_handler)); //调用以上函数传参spis_event_handler
此处调用这个nrf_drv_spis_init函数,传入参数为spis_event_handler
void spis_event_handler(nrf_drv_spis_event_t event)
{
......
}
追踪到参数spis_event_handler,发现它指向的函数形参event 为nrf_drv_spis_event_t类型的结构体,返回值为void。与上面定义函数指针类型相同。
以上便是定义一个新类型的函数指针nrf_drv_spis_event_handler_t 指向的函数spis_event_handler该函数格式为(函数形参event 为nrf_drv_spis_event_t类型的结构体,返回值为void),作为一个参数event_handler,被另一个函数nrf_drv_spis_init调用的全过程!
NRF51822+STM32bootload——typedef void (*Fun) (void) 理解的更多相关文章
- 如何理解typedef void (*pfun)(void)
问题: 在刚接触typedef void (*pfun)(void) 这个结构的时候,存在疑惑,为什么typedef后只有一"块"东西,而不是两"块"东西呢?那 ...
- 函数指针-如何理解typedef void (*pfun)(void)
问题: 在刚接触typedef void (*pfun)(void) 这个结构的时候,存在疑惑,为什么typedef后只有一"块"东西,而不是两"块"东西呢?那 ...
- typedef int(init_fnc_t) (void)的理解
typedef int(init_fnc_t) (void); 这个就是一个取别名的过程. 我们通常情况下会如下使用 typedef :typedef int MyInt;MyInt a; 这个时候我 ...
- typedef interrupt void (*PINT)(void)的分析
今天写程序时,在DSP2833x_PieVect.h看到typedef interrupt void (*PINT)(void)突然一愣,上网查了下发现在这是加了interrupt 中断关键字的函数指 ...
- typedef int (init_fnc_t) (void)和typedef int (*init_fnc_t) (void)
1.typedef int (init_fnc_t) (void);表示定义init_fnc_t为函数类型,该函数返回int型,无参数.而“init_fnc_t *init_sequence[]= ...
- typedef void (*funcptr)(void)
定义一个函数指针类型.比如你有三个函数:void hello(void) { printf("你好!"); }void bye(void) { printf("再见!&q ...
- “typedef int (init_fnc_t) (void);“的含义
在读uboot的lib_arm/board.c中的start_armboot ()函数遇到了"init_fnc_t **init_fnc_ptr;”一句话,后来查看init_fnt_t数据类 ...
- typedef void(*Fun)(void);
typedef void(*Fun)(void); 函数类似于数组,函数名就是它的首地址: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 ...
- typedef void(*Func)(void)的简单用途
typedef void(*Func)(void)的用途 用法的好处: 定义一个函数指针类型. 例子: 有三个类型相似或功能相似的函数: void TASK1(void) { printf(" ...
随机推荐
- 20145101《Java程序设计》第8周学习总结
20145101<Java程序设计>第8周学习总结 教材学习内容总结 第十四章 NIO与NIO2 NIO使用频道(channel)来衔接数据节点,对数据区的标记提供了clear(),rew ...
- uva 1658 Admiral - 费用流
vjudge传送门[here] 题目大意:给一个有(3≤v≤1000)个点e(3≤e≤10000)条边的有向加权图,求1~v的两条不相交(除了起点和终点外没有公共点)的路径,使权值和最小. 正解是吧2 ...
- win7 + MySQL 5.6.35 免安装版部署
之前项目开发一直用的asp.net技术,所以数据库自然而然的就用的Sql Server了,最近想着手看一下MySQL数据库,部署免安装版的MySQL的过程记录一下. 准备工作:window 7 6 ...
- ajax实现highchart与数据库数据结合完整案例分析(三)---柱状折线图
作者原创,未经博主允许,不可转载 在前面分析和讲解了用java代码分别实现饼状图和折线图,在工作当中,也会遇到很多用ajax进行异步请求 实现highchart. 先展示一下实现的效果图: 用ajax ...
- js渐隐渐现透明度变化淡入淡出轮播图
js渐隐渐现透明度变化淡入淡出轮播图.焦点图 一些广告banner展示常见. (附件) <!DOCTYPE html> <html> <head> <meta ...
- 机器学习 MLIA学习笔记(三)之 KNN(二) Dating可能性实例
这是个KNN算法的另一实例,计算Dating的可能性. import numpy as np import os import operator import matplotlib import ma ...
- [ios]ios画线 使用CGContextRef,CGPath和UIBezierPath来绘画
参考 :http://www.mgenware.com/blog/?p=493 这三种东西:CGContextRef,CGPath和UIBezierPath.本质上都是一样的,都是使用Quartz来绘 ...
- McAfee 与 360使用感受
运维给配的 win 10.4G内存 ,装的 McAfee,每次开机啥事不干内存去了55%, 开齐qq.微信.vscode.浏览器就要冲90%,再多开几个网页电脑就卡得很, 最近,卡死机了.. 然后看了 ...
- canvas+js实现荧光字符效果
一个小玩意,代码来源于网络. 效果图如下 代码如下 <html> <head> <style> * { margin: 0; padding: 0; } html, ...
- Codeforces 101628A - Arthur's Language
101628A - Arthur's Language 思路:dp,状态转移见代码. 代码: #include<bits/stdc++.h> using namespace std; #d ...