当前位置: 首页 > 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.jsqmd.com/news/122205/

相关文章:

  • Open-AutoGLM输入法频繁崩溃?3步精准定位并修复切换异常
  • 2025年靠谱宁波农家乐厨房装修、厨房装修翻新公司排行榜 - myqiye
  • 【Open-AutoGLM输入法异常处理指南】:99%开发者忽略的5大切换故障根源揭秘
  • 揭秘Open-AutoGLM缩放卡顿真相:5个常被忽略的触发条件与解决方案
  • 如何选择靠谱的全球市场证明公司?2025年最新避坑指南及五大权威机构推荐 - 十大品牌推荐
  • 风琴过滤纸生产商哪家好?多维度为你剖析 - mypinpai
  • 揭秘Open-AutoGLM特殊符号输入失败:99%开发者忽略的底层机制
  • 2025年年终济南家电搬运公司推荐:服务排行深度解读与关键指标对比 - 十大品牌推荐
  • Open-AutoGLM输入法切换卡顿问题深度剖析(工程师私藏排错手册)
  • 2025年年终济南家电搬运公司推荐:专业榜单排行与多维度服务对比分析 - 十大品牌推荐
  • 深度学习——神经网络 - 实践
  • LangFlow中的条件分支节点如何配置?逻辑控制进阶教学
  • LangFlow在高校教学中的应用前景:AI课程实验平台搭建
  • 2025年高性价比短视频代运营公司排行榜,专业服务商推荐 - 工业推荐榜
  • 【Open-AutoGLM文本修复终极指南】:5步彻底解决输入重复顽疾
  • Open-AutoGLM输入异常终极解决方案(工程师私藏修复手册)
  • 2025年资深技术顾问推荐:当前最值得关注的五大AI智能客服机器人品牌全景报告 - 十大品牌推荐
  • 2025年机油供应商靠谱推荐,口碑好的汽轮机油机油源头厂家有哪些? - myqiye
  • 2025年年终成都管道疏通推荐:专业排行解析与多维度服务对比评测 - 十大品牌推荐
  • 毕业设计项目 python小游戏设计 吃豆人小游戏
  • 2025年北京靠谱UPS系统服务商排行榜,UPS系统哪家好? - mypinpai
  • LangFlow与Streamlit、Gradio等前端框架如何协同工作?
  • 2025年辽宁公安联考上岸攻略:本地靠谱的公安联考培训公司有哪些? - myqiye
  • LangFlow与Notion、Airtable等工具的数据互通方案
  • LangFlow支持哪些LangChain模块?兼容性与扩展性测试报告
  • LangFlow未来发展方向预测:是否会成为标准开发工具?
  • Open-AutoGLM长按功能卡顿问题全解析(一线工程师实战经验曝光)
  • 2025年年终成都管道疏通推荐:专业评测、用户评价与排名指南 - 十大品牌推荐
  • LangFlow中的变量传递机制详解:上下文共享原理
  • LangFlow与主流GPU云服务商的兼容性适配情况说明