硬汉嵌入式论坛

 找回密码
 立即注册
查看: 1234|回复: 18
收起左侧

[以太网] STM32H7新版HAL库1.11以太网驱动将HAL库API换了,这给软件升级带来极大的不便

  [复制链接]

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106746
QQ
发表于 2023-12-19 10:22:42 | 显示全部楼层 |阅读模式


之前是这两个:

[C] 纯文本查看 复制代码
    while (HAL_ETH_GetRxDataBuffer(&heth, RxBuff) == HAL_OK)
    {
        HAL_ETH_GetRxDataLength(&heth, &framelength);



现在换成了这个,函数HAL_ETH_GetRxDataLength没有了

[C] 纯文本查看 复制代码
  while (HAL_ETH_ReadData(ð_handle, (void **)&received_packet_ptr) == HAL_OK)
  {





回复

使用道具 举报

13

主题

192

回帖

231

积分

高级会员

积分
231
发表于 2023-12-19 10:30:50 | 显示全部楼层
这是自动帮你申请空间吗?空间不够咋办?
回复

使用道具 举报

4

主题

160

回帖

172

积分

初级会员

积分
172
发表于 2023-12-19 10:39:47 | 显示全部楼层
长度在回调里有
回复

使用道具 举报

610

主题

3051

回帖

4901

积分

至尊会员

积分
4901
发表于 2023-12-19 10:41:47 | 显示全部楼层
不知道他们为何需要更换这些函数啊 ?

难道是新版本的使用方面上会更好吗 ??

还是他们吧底层的驱动也有相应的修改 ??
回复

使用道具 举报

75

主题

684

回帖

909

积分

金牌会员

积分
909
发表于 2023-12-19 10:42:56 | 显示全部楼层
看来用HAL还是无法完全解决兼容的问题
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106746
QQ
 楼主| 发表于 2023-12-19 10:59:17 | 显示全部楼层
zhang0352505 发表于 2023-12-19 10:30
这是自动帮你申请空间吗?空间不够咋办?

对,手动分配空间。

/**
  \brief       Rx Allocate callback.
  \param[in]   buff  pointer to allocated buffer
  \return      None
*/
void HAL_ETH_RxAllocateCallback(uint8_t **buff) {
  /* Allocate one of the RX-DMA buffers sequentially */
  *buff = &Rx_Buff[Emac.alloc_idx][ETH_MAX_PACKET_SIZE];
  if (++Emac.alloc_idx >= ETH_RX_DESC_CNT) {
    Emac.alloc_idx = 0;
  }
}
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106746
QQ
 楼主| 发表于 2023-12-19 10:59:48 | 显示全部楼层
fyyxxm 发表于 2023-12-19 10:39
长度在回调里有

对,在回调里面了

[C] 纯文本查看 复制代码
/**
  \brief       Rx Link callback.
  \param[in]   pStart  pointer to packet start
  \param[in]   pStart  pointer to packet end
  \param[in]   buff    pointer to received data
  \param[in]   Length  received data length
  \return      None
*/
void HAL_ETH_RxLinkCallback(void **pStart, void **pEnd, uint8_t *buff, uint16_t Length) {
  (void)pStart;
  (void)pEnd;

  Emac.rx_buf.buffer = buff;
  Emac.rx_buf.len    = Length;
}
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106746
QQ
 楼主| 发表于 2023-12-19 11:00:25 | 显示全部楼层
hpdell 发表于 2023-12-19 10:41
不知道他们为何需要更换这些函数啊 ?

难道是新版本的使用方面上会更好吗 ??

实现方式做了修改,导致API都换了。
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106746
QQ
 楼主| 发表于 2023-12-19 11:01:18 | 显示全部楼层
庄永 发表于 2023-12-19 10:42
看来用HAL还是无法完全解决兼容的问题

HAL库修改比较随意,几乎没有考虑过兼容问题。
回复

使用道具 举报

3

主题

49

回帖

58

积分

初级会员

积分
58
发表于 2023-12-19 14:29:57 | 显示全部楼层
F4的也改了,硬件驱动的数据结构直接砍掉一半,
回复

使用道具 举报

3

主题

1223

回帖

1232

积分

至尊会员

积分
1232
发表于 2023-12-19 21:18:10 | 显示全部楼层
回复

使用道具 举报

75

主题

684

回帖

909

积分

金牌会员

积分
909
发表于 2023-12-19 22:36:21 | 显示全部楼层
eric2013 发表于 2023-12-19 11:01
HAL库修改比较随意,几乎没有考虑过兼容问题。

初看在不同芯片上对应的API是一样的,代码复用性应该还不错,我还以为兼容性也不还不错
回复

使用道具 举报

610

主题

3051

回帖

4901

积分

至尊会员

积分
4901
发表于 2023-12-20 11:15:33 | 显示全部楼层
eric2013 发表于 2023-12-19 11:00
实现方式做了修改,导致API都换了。

貌似太不像话了呀  
回复

使用道具 举报

2

主题

25

回帖

31

积分

新手上路

积分
31
发表于 2023-12-20 11:29:07 | 显示全部楼层
这样看因为LL库是直接和寄存器打交道,没那么多结构体,反而改动最小
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106746
QQ
 楼主| 发表于 2023-12-20 11:33:09 | 显示全部楼层
Dazen35 发表于 2023-12-20 11:29
这样看因为LL库是直接和寄存器打交道,没那么多结构体,反而改动最小

以太网没有LL库。
回复

使用道具 举报

3

主题

122

回帖

131

积分

初级会员

积分
131
发表于 2023-12-20 13:18:00 | 显示全部楼层
Dazen35 发表于 2023-12-20 11:29
这样看因为LL库是直接和寄存器打交道,没那么多结构体,反而改动最小

Flash之类的是没有LL库的,只有hal库。LL库的缺点就是stm32不同系列西片外设寄存器都有差异,换芯片就得重新写代码。高级一点的外设要么用hal库要么照着hal库重写,效率不高
回复

使用道具 举报

4

主题

160

回帖

172

积分

初级会员

积分
172
发表于 2023-12-20 17:34:04 | 显示全部楼层
eric2013 发表于 2023-12-19 10:59
对,手动分配空间。

/**

HAL_ETH_RxAllocateCallback
这个必须要有的吗?必须要给rx malloc一块空间?
回复

使用道具 举报

4

主题

46

回帖

58

积分

初级会员

积分
58
发表于 2023-12-21 14:25:42 | 显示全部楼层
速度快一点不多,但是实现上麻烦很多,总不能在中断回调里面动态申请内存,就只能做一个专用于以太网的空内存块链表,耗费空间.
我改完之后还是搞回来了旧版本的.
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106746
QQ
 楼主| 发表于 2023-12-21 15:24:56 | 显示全部楼层
fyyxxm 发表于 2023-12-20 17:34
HAL_ETH_RxAllocateCallback
这个必须要有的吗?必须要给rx malloc一块空间?

我看的这个是CMSIS Driver里面得H7驱动,他这里搞了这个接口函数使用。
回复

使用道具 举报

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

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-5-3 22:32 , Processed in 0.393218 second(s), 25 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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