当前位置: 首页 > news >正文

sam9x60 tcp协议栈 小记

将TCPIP_STACK_DRAM_SIZE调来调去,还是串口信息报错
TCP/IP Stack: HHeap creation failed, type: 1

错误代码"type: 1"对应的是TCPIP_STACK_HEAP_TYPE_INTERNAL_HEAP,

而实际的错误是TCPIP_STACK_HEAP_RES_SYNCH_ERR

查看代码发现,在TCP/IP堆创建过程中,会调用OSAL_SEM_Create创建一个信号量用于同步访问堆:

if(OSAL_SEM_Create(&hDcpt->_heapSemaphore, OSAL_SEM_TYPE_BINARY, 1, 1) != OSAL_RESULT_TRUE)
{(*pHeapConfig->free_fnc)(allocatedHeapBuffer);hInst = 0;res = TCPIP_STACK_HEAP_RES_SYNCH_ERR;break;
}

根据配置文件FreeRTOSConfig.h中的设置,增大系统配置的堆大小。
#define configTOTAL_HEAP_SIZE ( ( size_t ) 40960 )

但是调大了也没用。最后发现跟大小没关系,我是反复鞭策ai找到了原因。
因为目前TCP/IP堆使用的是标准C库的malloc/free函数:

#define TCPIP_STACK_MALLOC_FUNC                     malloc
#define TCPIP_STACK_FREE_FUNC                       free

但在FreeRTOS环境中,更好的选择是使用FreeRTOS的内存管理函数pvPortMalloc/vPortFree,这已经在OSAL中封装为OSAL_Malloc/OSAL_Free。
所以要修改TCP/IP堆使用的内存分配函数,从标准C库的malloc/free改为使用OSAL提供的OSAL_Malloc/OSAL_Free

#define TCPIP_STACK_MALLOC_FUNC                     OSAL_Malloc
#define TCPIP_STACK_FREE_FUNC                       OSAL_Free

因为在FreeRTOS环境中:

标准C库的malloc/free可能与RTOS的内存管理不兼容
OSAL提供的内存分配函数(OSAL_Malloc/OSAL_Free)专门针对FreeRTOS环境进行了优化
这些函数内部使用FreeRTOS的pvPortMalloc/vPortFree,与RTOS的内存管理机制完全兼容
这个方法确实成功创建了tcp的heap,成功过了这一步初始化。但是我回头看了下网络例程里用到了rtos的例程是怎么配置的configuration的,发现人家例程就没这么改。暂时搁置,先用我自己的方法跑通。谁让这个mhc配置的代码自己都没法初始化。

接下来马上就遇到了DRV_PHY operation error: -2 DRV PHY init failed: -2
可以的,虽然是巧合,但是刚好到error 2 。错误代码-2对应的是DRV_ETHPHY_RES_DTCT_TMO,即PHY检测超时。
说明预期时间内没发现设备。在设置超时的宏隔壁就找到了与例程不一样的配置,

#define DRV_ETHPHY_KSZ8081_RESET_CLR_TMO           500
#define DRV_KSZ8081_PHY_ADDRESS                    1//应该为0

只要把1改成0就行了。大概是因为这个ksz8081对应的应该是emac0.这个开发板只有一个emac。

error 1和2解决了,下一个是 DRV_PHY operation error: -4 DRV PHY init failed: -4 。很好的考公数字推理[doge]
错误码-4对应的是DRV_ETHPHY_RES_CFG_ERR,表示硬件配置与请求的模式不匹配。
分析发现:

EMAC0配置为RMII模式(DRV_EMAC0_RMII_MODE = 1)
ksz8081 PHY也配置为RMII接口(KSZ8081RNB = 1)
但是PHY配置标志DRV_KSZ8081_PHY_CONFIG_FLAGS设置为0,没有明确指定接口模式

#define DRV_KSZ8081_PHY_CONFIG_FLAGS       ( 0 \| DRV_ETHPHY_CFG_RMII \)

所以加上DRV_ETHPHY_CFG_RMII就ok。

总算是初始化成功了。而且都是驱动没有自动配置好的原因。挺好,让我多了解一下底层细节。。

http://www.gsyq.cn/news/134367.html

相关文章:

  • 【Open-AutoGLM输入法异常处理指南】:99%开发者忽略的5大切换故障根源揭秘
  • LangFlow中的条件分支节点如何配置?逻辑控制进阶教学
  • LangFlow在高校教学中的应用前景:AI课程实验平台搭建
  • 2025年高性价比短视频代运营公司排行榜,专业服务商推荐 - 工业推荐榜
  • 毕业设计项目 python小游戏设计 吃豆人小游戏
  • 2025年机油供应商靠谱推荐,口碑好的汽轮机油机油源头厂家有哪些? - myqiye
  • LangFlow支持哪些LangChain模块?兼容性与扩展性测试报告
  • LangFlow未来发展方向预测:是否会成为标准开发工具?
  • 2025年年终成都管道疏通推荐:专业评测、用户评价与排名指南 - 十大品牌推荐
  • Open-AutoGLM长按功能卡顿问题全解析(一线工程师实战经验曝光)
  • LangFlow中的变量传递机制详解:上下文共享原理
  • 2025年五大常州泽尔达机械同行对比排行榜,常州泽尔达机械的节能效果如何? - mypinpai
  • 揭秘Open-AutoGLM滑动无响应之谜:5个关键修复方案立即生效
  • LangFlow与向量数据库(如Pinecone)集成实战教程
  • 2025年品牌命名公司联系方式汇总:全国主流服务机构官方联系通道与合作价值解析 - 十大品牌推荐
  • Redis 零基础到进阶,Redis 集群,笔记 74-92
  • 怎么免费降AI检测率,2个一键降低论文AI率,不超过20%
  • LangFlow自动代码生成功能测评:输出质量与可读性分析
  • LangFlow构建远程办公效率监测仪表盘
  • LangFlow本地部署与云端部署对比分析,哪种更适合你?
  • 架构师必备:后端程序员需要了解的数仓知识
  • LangFlow是否支持批量数据处理?大规模推理任务尝试
  • 半导体设备互锁管理程序技术方案
  • LangFlow错误排查手册:常见报错原因及解决方案汇总
  • LangFlow可视化界面优化建议汇总,提升用户体验的关键点
  • 2025年总结
  • LangFlow支持Docker一键部署吗?容器化运行实测记录
  • vxe-gantt 如何自定义依赖线的宽度,连接线的宽度大小
  • LangFlow创建地域偏好分析与洞察平台
  • 开发者福音!LangFlow让复杂AI工作流设计变得简单直观