[程序设计结构体]小结一下设计思想--上次已经找到

这是第二次遇到这种尴尬情况 记录一下

CASE:我做了一个结构体:

typedef struct
{
	UART_HandleTypeDef *huart; //来自HAL的模块
	uint8_t  *rxBuf;//放置数据的-不是数组了这样灵活点儿
	uint16_t rx_len;
	uint8_t  one;//当前过来的HEX
	uint8_t  received2idle;//1空闲中断到了
}GK_USARTBASE_TYPE ;	 

在自己的模块里面是很好的

还有一个思考过的函数:

void GK_usart_clear(GK_USARTBASE_TYPE *myuart)
{
	memset(&myuart->rx_len,0,sizeof(GK_USARTBASE_TYPE)-offsetof(GK_USARTBASE_TYPE,rx_len));
}

现在我遇到一个事情:我希望外面的模块也可以调用这个函数 怎么办?

第一种 直接给出去 

第二种 就是自己调用自己 如下:

typedef struct
{
	UART_HandleTypeDef *huart; //来自HAL的模块
	uint8_t  *rxBuf;//放置数据的-不是数组了这样灵活点儿
    void    (*clear)(void *myuart);//-------------
	uint16_t rx_len;
	uint8_t  one;//当前过来的HEX
	uint8_t  received2idle;//1空闲中断到了
}GK_USARTBASE_TYPE ;
void GK_usart_clear(void *uart)
{
    GK_USARTBASE_TYPE *myuart = (GK_USARTBASE_TYPE *)uart;
	memset(&myuart->rx_len,0,sizeof(GK_USARTBASE_TYPE)-offsetof(GK_USARTBASE_TYPE,rx_len));
}

初始化的时候给他


uint8_t GK_usart_init(GK_USARTBASE_TYPE *myuart,uint8_t usartid,uint8_t * buf)
{
	switch(usartid)//绑定关系
	{
        case 2:myuart->huart=&huart2;break;
		case 3:myuart->huart=&huart3;break;
		default :return 0;	
	}
	myuart->clear = GK_usart_clear;
	myuart->rxBuf=buf;
	HAL_UART_Receive_IT(myuart->huart, &myuart->one, 1);//开启中断接收 1个1个的接收// 对应 下文
	__HAL_UART_ENABLE_IT(myuart->huart,UART_IT_IDLE);//开启空闲中断
	__HAL_UART_CLEAR_IDLEFLAG(myuart->huart);
	return 1;
}

这样饶了一圈 最后调用是:

        GK_USARTBASE_TYPE *puart= GK_usart_read_obj(2);
        puart->clear(puart);

 

 

现在我觉得我的思想需要升级:

凡是结构体需要自己调自己的时候 可以新开一个结构体!

开始吧!操作一下 丝般顺滑

 

typedef struct
{
   void                  (*clear)(GK_USARTBASE_TYPE *myuart);
   GK_USARTBASE_TYPE*    (*read) (uint8_t id);
}GK_USARTBASEFUNCTION_TYPE ;	



GK_USARTBASEFUNCTION_TYPE GKUF,*puf;


void GK_USART_INIT(void)
{
    puf = &GKUF;

    puf->clear = GK_usart_clear;

    puf->read = GK_usart_read_obj;
}

现在调用:

        GK_USARTBASE_TYPE *puart= puf->read(2);

puf->clear(puart);

 

 

 

++++++++++++上次

https://blog.csdn.net/weixin_42381351/article/details/86574210

这个也是分不清 你可以做2个结构体!!!一个节点 + 一个函数结构体

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值