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

sam9x60 USB驱动适配(二)

前文最后说到代码能编译却不能跑。通过单步调试的笨方法查看(毕竟是刚添加usb host layer就跑不动,首先就该怀疑它的初始化嘛)
发现是运行到tpl list初始化的for循环时出错了,第二次运行的时候就卡死了。暂停调试就直接跳到了data_abort_irq_handler。
for 循环的data abort 错误,当然是考虑越界了。那就看看递增上限 hostObj->nTPLEntries 的配置。

 /* Initialize all drivers in TPL List */
for ( tplEntryCount = 0 ; tplEntryCount < hostObj->nTPLEntries ; tplEntryCount++ )
{
tplEntry = &(hostObj->tpl[tplEntryCount]);
(( USB_HOST_CLIENT_DRIVER *)tplEntry->hostClientDriver)->initialize( tplEntry->hostClientDriverInitData );
}

其实就在for循环前面就有一句赋值行为。

hostObj->tpl = hostInit->tplList ;
hostObj->nTPLEntries = (int8_t)hostInit->nTPLEntries;

而 hostInit 的赋值在这整个初始化函数的开头

hostInit = ( USB_HOST_INIT * ) initData ;

而这个initdata的传参,是在initialize.c文件里面给进去的。

sysObj.usbHostObject0 = USB_HOST_Initialize (( SYS_MODULE_INIT *)& usbHostInitData );    

usbHostInitData 这个东西就是罪魁祸首。真正应该先做检查再确定数量的地方是这个结构体的成员 nTPLEntries 。

const USB_HOST_INIT usbHostInitData = 
{.nTPLEntries = 3,  // 错误:应该是1.tplList = (USB_HOST_TPL_ENTRY *)USBTPList,.hostControllerDrivers = (USB_HOST_HCD *)&hcdTable    
};

在 d:/project/FT5426G/src/config/default/usb_host_init_data.c 文件中,
定义了一个TPL(Target Peripheral List)数组 USBTPList[3] ,但实际上只初始化了第一个元素(用于MSD类驱动):

static const USB_HOST_TPL_ENTRY USBTPList[3] = 
{TPL_INTERFACE_CLASS_SUBCLASS_PROTOCOL(USB_MSD_CLASS_CODE, USB_MSD_SUBCLASS_CODE_SCSI_TRANSPARENT_COMMAND_SET, USB_MSD_PROTOCOL, NULL,  USB_HOST_MSD_INTERFACE),// 其余两个元素未初始化
};

可以理解,tpl的全称是 Target Peripheral List 。这个结构体里一般会添加msd(U盘),cdc(usb接口外设)等不同类型的usb接口设备的驱动入口。
但是你直接默认3个不做检查,却又要让我自己添加3个就离谱,万一我不止3个那不还是报错。
而且我回头在mplab的mcc里面找了下,tpl entry数量直接灰色的3,不让更改。what?我还得在代码文件里改,以后每次mcc有所改动并生成代码的时候,都得手动跳过这个冲突以免覆盖。

这就导致在前面提到的 for 循环中,当 tplEntryCount 增加到1和2时,程序尝试访问未初始化的内存,从而触发了 data_abort 异常。
离谱的是它这里就没被编译器发现,这个xc32编译器真是神一下鬼一下的。

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

相关文章:

  • Open-AutoGLM落地实践全攻略(社区智能联动新范式)
  • 2025全场景商用咖啡机选购指南:大型企业办公室、咖啡、餐饮、茶饮连锁、便利店适用机型推荐 - 品牌2026
  • [cs2] 一个文件搞定设置 - autoexec.cfg
  • 2025年12月涂装线生产,静电喷涂线,涂装线设备公司推荐:涂装产线测评与选择指南 - 品牌鉴赏师
  • 北京海淀靠谱交通事故律师事务所排行榜(2025-2026公正测评)专业测评与性价比 - 苏木2025
  • 【独家披露】国家极地项目背后的AI引擎:Open-AutoGLM是如何做到全天候稳定的?
  • 2025脂肪酸值测定仪性价比榜:全自动脂肪酸值测定仪怎么选?这3家靠谱品牌闭眼入 - 品牌推荐大师1
  • 揭秘手机无线调试黑科技:如何3分钟快速连接Open-AutoGLM?
  • MySQL面试题合集!
  • springboot高校教材征订管理系统_2ex65ua5
  • ELK 保姆级部署教学
  • Interactive Brokers全新改版IBKR GlobalTrader应用,移动交易体验更简洁、更智能
  • MySQL相关面试题总结
  • 2025年靠谱工业热能设备企业排行榜,岳阳远大热能实力怎么样? - mypinpai
  • 2025年进口曲轴泵厂商权威推荐榜单:高压清洗机配件/进口高压水泵/进口高压清洗车源头厂家精选 - 品牌推荐官
  • Open-AutoGLM极地适配技术白皮书(仅限内部流出的3大核心算法改进)
  • 2025年南阳热门短视频制作服务公司推荐:如何做好短视频运营? - 工业推荐榜
  • 为什么头部跨境平台都在悄悄接入Open-AutoGLM?真相曝光
  • 【程序员必看】AI能力五阶段演进详解:L1-L5全解析,L3 Agent是当下最重要的突破点
  • 2025年有实力的专项审计专业公司推荐:靠谱的专项审计企业有哪些? - mypinpai
  • 2025鲁南AI搜索优化服务商TOP5权威推荐:看哪家实力强? - myqiye
  • JetBrains2023系列软件安装激活通用教程
  • 实用指南:Java集合大调研
  • 别再手动清洗星载数据了!Open-AutoGLM一键自动化方案已上线
  • 2025一物一码公司推荐指南:再互动一物一码平台领衔适配全行业 - 品牌智鉴榜
  • ​神经医学专家解读:2025甲钴胺精选白皮书,六大品牌谁领先?圣舒养优化修复效能 - 博客万
  • 云手机的兼容性如何
  • 2025昆明婚纱摄影口碑TOP10推荐出炉:综合实力王者领衔,备婚新人必看 - 提酒换清欢
  • 贵阳GEO优化公司怎么选?AI搜索时代,本地企业正在被重新“筛选” - 优质品牌推荐TOP榜
  • 【Open-AutoGLM脑机接口交互革命】:揭秘下一代人机协同核心技术