RT1052 ENET ENET_GetRxFrameSize kStatus_ENET_RxFrameEmpty问题

问题
编写RT1050的ENET的BSP时, 当接收中断响应时,去读取数据,使用 ENET_GetRxFrameSize 获取接收帧大小,但返回 kStatus_ENET_RxFrameEmpty

具体解决问题的步骤我就不描述,直接给出问题的原因,以及相关疑问

解决
问题原因就在 AT_NONCACHEABLE_SECTION_ALIGN 这个宏中使用了 NonCacheable NonCacheable.init 两个段,但我的链接文件中并没有配置这两个段,从而导致运行出现以上问题。但这个问题与症结点也让我产生了疑惑,这两者之间最深层次原因是什么呢?如果有哪位前辈知道,还请留言告知,非常感谢。也欢迎各位朋友留言讨论。谢谢。

在解决过程中产生了新的理解

  • BSP开发中最重要的一点就是硬件初始化,其中大部分遇到的问题都是硬件初始化不对导致的。
  • 关于硬件初始化,你在参考官方示例中,要严格参照其硬件初始化,在其上删除与修改时要慎重,要明白其中含义才可做删除修改。
  • 如果官方示例中,没有你需求的外设,那这个时候你也要注意,如果你有足够实力可以基于芯片参考手册可以驱动外设,那就不用过多担心。但对于我这种只能基于库开发,勉强看得懂部分寄存器操作的朋友,就得另找SOC,或者看看方案公司是否有相关示例。
  • 如果你编写的BSP出现了问题,那么你只需要那你的BSP与官方示例进行对比,要一行行代码去进行对比,一行行排除,最终你就会找到你的问题,并解决。

代码如下


ENET要用到全局变量与宏

#define ENET_RXBD_NUM (4)
#define ENET_TXBD_NUM (4)
#define ENET_RXBUFF_SIZE (ENET_FRAME_MAX_FRAMELEN)
#define ENET_TXBUFF_SIZE (ENET_FRAME_MAX_FRAMELEN)
#define APP_ENET_BUFF_ALIGNMENT ENET_BUFF_ALIGNMENTAT_NONCACHEABLE_SECTION_ALIGN(enet_rx_bd_struct_t g_rxBuffDescrip[ENET_RXBD_NUM], ENET_BUFF_ALIGNMENT);
AT_NONCACHEABLE_SECTION_ALIGN(enet_tx_bd_struct_t g_txBuffDescrip[ENET_TXBD_NUM], ENET_BUFF_ALIGNMENT);
SDK_ALIGN(uint8_t g_rxDataBuff[ENET_RXBD_NUM][SDK_SIZEALIGN(ENET_RXBUFF_SIZE, APP_ENET_BUFF_ALIGNMENT)],APP_ENET_BUFF_ALIGNMENT);
SDK_ALIGN(uint8_t g_txDataBuff[ENET_TXBD_NUM][SDK_SIZEALIGN(ENET_TXBUFF_SIZE, APP_ENET_BUFF_ALIGNMENT)],APP_ENET_BUFF_ALIGNMENT);

ENET的初始化函数

rt_err_t bsp_enet_init(EthDevice* dev){printf("bsp_enet_init\r\n");enet_config_t config;/* prepare the buffer configuration. */enet_buffer_config_t buffConfig[] = {{ENET_RXBD_NUM,ENET_TXBD_NUM,SDK_SIZEALIGN(ENET_RXBUFF_SIZE, APP_ENET_BUFF_ALIGNMENT),SDK_SIZEALIGN(ENET_TXBUFF_SIZE, APP_ENET_BUFF_ALIGNMENT),&g_rxBuffDescrip[0],&g_txBuffDescrip[0],&g_rxDataBuff[0][0],&g_txDataBuff[0][0],}};/* Get default configuration. */ENET_GetDefaultConfig(&config);printf("bsp_enet_init ENET_GetDefaultConfig ok\r\n");/** config.miiMode = kENET_RmiiMode;* config.miiSpeed = kENET_MiiSpeed100M;* config.miiDuplex = kENET_MiiFullDuplex;* config.rxMaxFrameLen = ENET_FRAME_MAX_FRAMELEN;*/config.interrupt = kENET_TxFrameInterrupt | kENET_RxFrameInterrupt;config.miiSpeed = dev->speed;config.miiDuplex = dev->duplex;printf("clk: %d\r\n", CLOCK_GetFreq(kCLOCK_AhbClk));ENET_Init(dev->enet_base, &dev->enet_handle, &config, &buffConfig[0], &dev->dev_addr[0], CLOCK_GetFreq(kCLOCK_AhbClk));printf("bsp_enet_init ENET_Init ok\r\n");ENET_SetCallback(&dev->enet_handle, bsp_enet_callback, dev);printf("bsp_enet_init ENET_SetCallback ok\r\n");ENET_ActiveRead(dev->enet_base);printf("bsp_enet_init ENET_ActiveRead ok\r\n");ENET_EnableInterrupts(dev->enet_base, kENET_RxFrameInterrupt);bsp_nvic_set_irqn_priority(dev->irqn, Group4_PreemptPriority_0, Group4_SubPriority_0);EnableIRQ(dev->irqn);bsp_eth_device.flags = ETH_DEVICE_FLAGS_INIT;return RT_EOK;
}

RT1052 ENET ENET_GetRxFrameSize kStatus_ENET_RxFrameEmpty问题相关推荐

  1. RT1052 ENET ENET_SendFrame调用 未发送帧

    RT1052 ENET ENET_SendFrame调用 未发送帧 问题描述 遇到的问题:再调试ICMP协议栈时, 另外一台嵌入式主机 ping 出现了掉包 time达到几千毫秒 以及 (DUP!) ...

  2. 轻量级语义分割网络:ENet

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 作者:石文华 作者&编辑:石文华 章节目录 介绍 网络结构 ...

  3. 实时语义分割ENet

    参考: https://blog.csdn.net/qq_14845119/article/details/90646360 https://blog.csdn.net/Hanghang_/artic ...

  4. 神经网络架构演进史:全面回顾从LeNet5到ENet十余种架构

    from: http://www.dataguru.cn/article-9865-1.html 摘要: LeNet5 诞生于 1994 年,是最早的卷积神经网络之一,并且推动了深度学习领域的发展.自 ...

  5. 【图像分割模型】快速道路场景分割—ENet

    这是专栏<图像分割模型>的第4篇文章.在这里,我们将共同探索解决分割问题的主流网络结构和设计思想. 有了空洞卷积,这篇文章我们通过ENet看看在实际任务中,该怎么用好空洞卷积. 作者 | ...

  6. 深度学习(十九)——FCN, SegNet, DeconvNet, DeepLab, ENet, GCN

    前DL时代的语义分割(续) Grab cut Grab cut是微软剑桥研究院于2004年提出的著名交互式图像语义分割方法.与N-cut一样,grab cut同样也是基于图划分,不过grab cut是 ...

  7. eNet 软件发布要求多多

    今天打算把新版本FreeEIM 发出去给大家免费试用,可惜做好事还真是不容易啊,哈哈. 看看eNet 伟大的规定吧: 用户必读:有关软件发布的注意事项! 提示:每天最多只能录入20个软件,请认真选择软 ...

  8. 通向码农的道路(enet开源翻译计划 二)

    QQ 324186207群 enet交流技术,主要是为了研究tcp内部执行机制.欢迎大家增加探讨.小弟水平有限,翻译难免有误. . http://enet.bespin.org  解析enet 双向链 ...

  9. 随想录(学习nxp rt1052 soc)

    [ 声明:版权所有,欢迎转载,请勿用于商业用途. 联系信箱:feixiaoxing @163.com] 在国内市场上,stm32是谜一样的存在.工控领域,除了51单片机,大概就是stm32的应用最广. ...

最新文章

  1. ViewPager的缓存机制
  2. vscode 显示最近打开的folder_vscode报错Module #x27;pygal#x27; has no #x27;Bar#x27; Member...
  3. 不会真有人国庆都不打王者吧?
  4. Leetcode每日必刷题库第4题,如何寻找两个正序数组的中位数?
  5. 电子产品设计流程_产品设计“学习、就业、留学”全攻略
  6. SpringBoot的日志管理(输出级别,输出到文件)
  7. 天勤数据结构:树与二叉树(图解二叉树的三种遍历方式执行流程,超详细)
  8. 微软正式发布Azure Functions 2.0
  9. C++中const关键字的使用总结
  10. r语言rank降序_R语言rank函数详细解析
  11. resultJP在Java中_java result是如何直接变为对象的
  12. 推理接口的调用过程(欢迎讨论,希望这是一个大坑~~~)
  13. 显卡煲机测试软件,不用再煲机!这款耳机可自动调音给你提供定制化音频
  14. JESD 样本量 选择 可靠性 45 77样本量
  15. ubuntu的pycharm或程序卡主,强制关闭方法
  16. 【历史上的今天】3 月 11 日:谷歌推出 Google Voice;互联网先驱诞生日;Foursquare 上线
  17. FFmpeg给视频添加水印
  18. Android如何计算View的深度
  19. Linux(CentOS 7)、Windows双系统安装图文教程(超详细)适合初学者
  20. 知识库递归编程java和prolog代码;逻辑语言Prolog简介(附24555字PDF发“递归prolog简介”下载)

热门文章

  1. 高一计算机课程教案,高中信息技术《信息及其特征1》优质课教学设计、教案...
  2. tushare +talib 三指标筛选股票
  3. 数据分析:旅游景点销售门票和消费情况分析
  4. Eclipse导入EPF配置文件
  5. 计算机考试都是60分合格吗,bim考试显示考评结果通过是达到60分了吗?
  6. Autocad经验 CAD2018怎么设置打印的纸张尺寸和方向?
  7. Arduino云台,关键是可以调角度!!!基于MPU6050,用卡尔曼滤波进行角度处理,保证你能一次过学会从硬件到软件的制做!!!(第一节)
  8. C语言实现PING功能
  9. 闽南歌歌词有一句电子计算机,抖音wow you can really dance下一句是什么歌 歌词全文...
  10. 位置环与速度环的串级PID