CheckSmSettings代码注释

///////////////////////////////////////////////////////////////////////////////////////// /** \param maxChannel 被检查的最后一个SM \return 0: 成功或者返回AL的状态码 \brief 这个函数检查所有的SM通道 *//////////////////////////////////////////////////////////////////////////////////////// UINT8 CheckSmSettings(UINT8 maxChannel) { UINT8 i; UINT8 result = 0; TSYNCMAN ESCMEM *pSyncMan; UINT16 SMLength = 0; UINT16 SMAddress = 0; /* 检查接收邮箱的的SM参数(SM0) */ pSyncMan = HW_GetSyncMan(MAILBOX_WRITE); SMLength = pSyncMan->Length; SMAddress = pSyncMan->PhysicalStartAddress; if (!(pSyncMan->Settings[SM_SETTING_ACTIVATE_OFFSET] & SM_SETTING_ENABLE_VALUE)) /* 接收邮箱不能使能 */ result = ALSTATUSCODE_INVALIDMBXCFGINPREOP; else if ( (pSyncMan->Settings[SM_SETTING_CONTROL_OFFSET] & SM_SETTING_DIRECTION_MASK) != SM_SETTING_DIRECTION_WRITE_VALUE) /* 接收邮箱由主站不能写*/ result = ALSTATUSCODE_INVALIDMBXCFGINPREOP; else if ( (pSyncMan->Settings[SM_SETTING_CONTROL_OFFSET] & SM_SETTING_MODE_MASK) != SM_SETTING_MODE_ONE_BUFFER_VALUE ) /* 接收邮箱不是在一个缓存模式 */ result = ALSTATUSCODE_INVALIDMBXCFGINPREOP; else if ( SMLength < MIN_MBX_SIZE ) /* 接收邮箱的大小太小 */ result = ALSTATUSCODE_INVALIDMBXCFGINPREOP; else if ( SMLength > MAX_MBX_SIZE ) /* 接收邮箱大小太大 */ result = ALSTATUSCODE_INVALIDMBXCFGINPREOP; else if ( SMAddress < MIN_MBX_WRITE_ADDRESS ) /* 接收邮箱的地址太小 */ result = ALSTATUSCODE_INVALIDMBXCFGINPREOP; else if ( SMAddress > MAX_MBX_WRITE_ADDRESS) /* 接收邮箱地址太大 */ result = ALSTATUSCODE_INVALIDMBXCFGINPREOP; if ( result == 0 )//则说明接收邮箱通过上面的检查 { /* 检查发送邮箱的SM参数(SM1) */ pSyncMan = HW_GetSyncMan(MAILBOX_READ); SMLength = pSyncMan->Length; SMAddress = pSyncMan->PhysicalStartAddress; if (!(pSyncMan->Settings[SM_SETTING_ACTIVATE_OFFSET] & SM_SETTING_ENABLE_VALUE)) /* 发送邮箱不使能 */ result = ALSTATUSCODE_INVALIDMBXCFGINPREOP; else if ( (pSyncMan->Settings[SM_SETTING_CONTROL_OFFSET] & SM_SETTING_DIRECTION_MASK) != SM_SETTING_DIRECTION_READ_VALUE) /* 接收邮箱不能被主站读*/ result = ALSTATUSCODE_INVALIDMBXCFGINPREOP; else if ( (pSyncMan->Settings[SM_SETTING_CONTROL_OFFSET] & SM_SETTING_MODE_MASK) != SM_SETTING_MODE_ONE_BUFFER_VALUE ) /* 接收邮箱不是一个缓冲区模式 */ result = ALSTATUSCODE_INVALIDMBXCFGINPREOP; else if ( SMLength < MIN_MBX_SIZE ) /* 发送邮箱的大小太小 */ result = ALSTATUSCODE_INVALIDMBXCFGINPREOP; else if ( SMLength > MAX_MBX_SIZE ) /* 发送邮箱的大小太大 */ result = ALSTATUSCODE_INVALIDMBXCFGINPREOP; else if ( SMAddress < MIN_MBX_READ_ADDRESS ) /* 发送邮箱的地址太小 */ result = ALSTATUSCODE_INVALIDMBXCFGINPREOP; else if ( SMAddress > MAX_MBX_READ_ADDRESS ) /* 发送邮箱的地址太大 */ result = ALSTATUSCODE_INVALIDMBXCFGINPREOP; } if ( result == 0 && maxChannel > PROCESS_DATA_IN )//发送邮箱通过上面的检查 { /* 当离开这个函数的时候,b3BufferMode被设置,如果输入和输出运行在3个缓冲区模式 */ b3BufferMode = TRUE; /* 检查SM的参数给输入通道(SM的通道3) */ pSyncMan = HW_GetSyncMan(PROCESS_DATA_IN); SMLength = pSyncMan->Length; SMAddress = pSyncMan->PhysicalStartAddress; if ( (pSyncMan->Settings[SM_SETTING_ACTIVATE_OFFSET] & SM_SETTING_ENABLE_VALUE) != 0 && SMLength == 0 ) /* SM3的大小是等于0和SM3是激活的 */ result = SYNCMANCHSETTINGS+1; else if (pSyncMan->Settings[SM_SETTING_ACTIVATE_OFFSET] & SM_SETTING_ENABLE_VALUE) { /* SM3是激活的,输入大小是大于0的 */ if ( SMLength != nPdInputSize || nPdInputSize == 0 || SMLength > MAX_PD_INPUT_SIZE) /* 大小不想符合sizes don't match */ result = SYNCMANCHSIZE+1; else /* 大小相互符合sizes matches */ if ( (pSyncMan->Settings[SM_SETTING_CONTROL_OFFSET] & SM_SETTING_DIRECTION_MASK) == SM_SETTING_DIRECTION_READ_VALUE ) { /* settings match */ if ( ( ( nAlStatus == STATE_PREOP )&&( SMAddress >= MIN_PD_READ_ADDRESS )&&( SMAddress <= MAX_PD_READ_ADDRESS ) ) ||( ( nAlStatus != STATE_PREOP )&&( SMAddress == nEscAddrInputData ) ) ) { /* 地址符合addresses match */ if ( (pSyncMan->Settings[SM_SETTING_CONTROL_OFFSET] & SM_SETTING_MODE_MASK) == SM_SETTING_MODE_ONE_BUFFER_VALUE ) /* 如果输入输入运行在1个缓冲区的模式,重置b3BufferMode inputs are running in 1-Buffer-Mode, reset flag b3BufferMode */ b3BufferMode = FALSE; } else /* 输入地址是超越了允许的范围,或者已经在SAFEOP和OP之间改变input address is out of the allowed area or has changed in SAFEOP or OP */ result = SYNCMANCHADDRESS+1; } else /* 输入设置不相符合input settings do not match */ result = SYNCMANCHSETTINGS+1; } else if ( SMLength != 0 || nPdInputSize != 0 ) /* 输入大小不等于0,即使SM3的通道是不能使能input size is not zero although the SM3 channel is not enabled */ result = SYNCMANCHSIZE+1; if ( result != 0 )//则出错处理 { result = ALSTATUSCODE_INVALIDSMINCFG; } }//结束result==0&&maxChannel... if ( result == 0 && maxChannel > PROCESS_DATA_OUT ) { /* 检查SM参数给输入(SM2)check the Sync Manager Parameter for the Outputs (Sync Manager Channel 2) */ pSyncMan = HW_GetSyncMan(PROCESS_DATA_OUT); SMLength = pSyncMan->Length; SMAddress = pSyncMan->PhysicalStartAddress; if ( (pSyncMan->Settings[SM_SETTING_ACTIVATE_OFFSET] & SM_SETTING_ENABLE_VALUE) != 0 && SMLength == 0 ) /* SM2的大小是等于0或者SM2是使能the SM2 size is 0 and the SM2 is active */ result = SYNCMANCHSETTINGS+1; else if (pSyncMan->Settings[SM_SETTING_ACTIVATE_OFFSET] & SM_SETTING_ENABLE_VALUE) { /* 如果SM2的通道是激活的,输出的大小是比0大Sync Manager Channel 2 is active, output size has to greater 0 */ if ( SMLength == nPdOutputSize && nPdOutputSize != 0 && SMLength <= ((UINT16)MAX_PD_OUTPUT_SIZE)) { /* 大小相互符合sizes match */ if ( (pSyncMan->Settings[SM_SETTING_CONTROL_OFFSET] & SM_SETTING_DIRECTION_MASK) == SM_SETTING_DIRECTION_WRITE_VALUE ) { /* 设置符合要求settings match */ if ( ( ( nAlStatus == STATE_PREOP )&&( SMAddress >= MIN_PD_WRITE_ADDRESS )&&( SMAddress <= MAX_PD_WRITE_ADDRESS ) ) ||( ( nAlStatus != STATE_PREOP )&&( SMAddress == nEscAddrOutputData ) ) ) { /* 地址符合addresses match */ { /* 检查是否看门狗触发使能check, if watchdog trigger is enabled */ if (pSyncMan->Settings[SM_SETTING_CONTROL_OFFSET] & SM_SETTING_WATCHDOG_VALUE) { bWdTrigger = TRUE; } else { bWdTrigger = FALSE; } if ( (pSyncMan->Settings[SM_SETTING_CONTROL_OFFSET] & SM_SETTING_MODE_MASK) == SM_SETTING_MODE_ONE_BUFFER_VALUE ) /* 输出是运行在1个缓冲区的模式,重置标志位b3BufferMode */ b3BufferMode = FALSE; } } else /* 输出地址已经超越允许的范围或者在SAFEOP和OP里面转变output address is out of the allowed area or has changed in SAFEOP or OP */ result = SYNCMANCHADDRESS+1; } else /* 输出设置不相符合output settings do not match */ result = SYNCMANCHSETTINGS+1; } else /* 输出大小不相符合output sizes don't match */ result = SYNCMANCHSIZE+1; } else if ( SMLength != 0 || nPdOutputSize != 0 ) /* 输出大小不等于0,虽然SM2通道不使能output size is not zero although the SM2 channel is not enabled */ result = SYNCMANCHSIZE+1; if ( result != 0 )//出错状态 { result = ALSTATUSCODE_INVALIDSMOUTCFG; } }//对应上面的result==0&&maxChannel... if ( result == 0 ) { UINT8 SMActivate = 0; /* 其它SM通道的使能字节被读来响应SM-改变-中断the Enable-Byte of the rest of the SM channels has to be read to acknowledge the SM-Change-Interrupt */ for (i = maxChannel; i < nMaxSyncMan; i++) { pSyncMan = HW_GetSyncMan(i); SMActivate = pSyncMan->Settings[SM_SETTING_ACTIVATE_OFFSET]; } } return result; }

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/1167309.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

IQuest-Coder-V1-40B-Instruct部署:40B模型在消费级GPU的可行性

IQuest-Coder-V1-40B-Instruct部署&#xff1a;40B模型在消费级GPU的可行性 1. 引言 1.1 模型背景与技术挑战 IQuest-Coder-V1-40B-Instruct 是 IQuest-Coder-V1 系列中面向通用代码辅助和指令遵循优化的指令型大语言模型&#xff0c;参数规模达400亿&#xff08;40B&#x…

BGE-M3实战:智能问答检索模块

BGE-M3实战&#xff1a;智能问答检索模块 1. 引言 在当前信息爆炸的时代&#xff0c;构建高效、精准的智能问答系统已成为企业知识管理、客服自动化和搜索引擎优化的核心需求。传统的关键词匹配方法已难以满足复杂语义理解的需求&#xff0c;而基于深度学习的文本嵌入模型正逐…

Citra模拟器完全指南:从入门到精通的使用教程

Citra模拟器完全指南&#xff1a;从入门到精通的使用教程 【免费下载链接】citra 项目地址: https://gitcode.com/GitHub_Trending/ci/citra 还在为3DS游戏无法在电脑上流畅运行而困扰吗&#xff1f;想要在大屏幕上重温经典游戏体验&#xff1f;本指南将为你详细介绍Ci…

鸣潮自动化工具深度解析:如何实现智能后台自动战斗

鸣潮自动化工具深度解析&#xff1a;如何实现智能后台自动战斗 【免费下载链接】ok-wuthering-waves 鸣潮 后台自动战斗 自动刷声骸上锁合成 自动肉鸽 Automation for Wuthering Waves 项目地址: https://gitcode.com/GitHub_Trending/ok/ok-wuthering-waves 你是否曾经…

鸣潮自动化工具完整使用指南:从安装到精通

鸣潮自动化工具完整使用指南&#xff1a;从安装到精通 【免费下载链接】ok-wuthering-waves 鸣潮 后台自动战斗 自动刷声骸上锁合成 自动肉鸽 Automation for Wuthering Waves 项目地址: https://gitcode.com/GitHub_Trending/ok/ok-wuthering-waves 鸣潮自动化工具是一…

123云盘功能解锁技术方案:基于用户脚本的会员特权模拟实现

123云盘功能解锁技术方案&#xff1a;基于用户脚本的会员特权模拟实现 【免费下载链接】123pan_unlock 基于油猴的123云盘解锁脚本&#xff0c;支持解锁123云盘下载功能 项目地址: https://gitcode.com/gh_mirrors/12/123pan_unlock 对于需要频繁使用123云盘进行文件存储…

3步搞定微信QQ消息防撤回:完整操作指南

3步搞定微信QQ消息防撤回&#xff1a;完整操作指南 【免费下载链接】RevokeMsgPatcher :trollface: A hex editor for WeChat/QQ/TIM - PC版微信/QQ/TIM防撤回补丁&#xff08;我已经看到了&#xff0c;撤回也没用了&#xff09; 项目地址: https://gitcode.com/GitHub_Trend…

Sigma:轻量快速的代码安全“侦察兵”

在瞬息万变的软件开发世界里,安全问题如同潜伏的暗礁。传统深度安全扫描往往耗时耗力,与追求快速迭代的现代开发节奏格格不入。这时,一款名为Sigma的工具悄然登场,它如同一位敏捷的“侦察兵”,旨在用速度与轻量为开发团队提供第一道安全防线。 Sigma是Black Duck旗下的一…

Whisper-large-v3实战:多语言转录云端部署,10分钟出结果

Whisper-large-v3实战&#xff1a;多语言转录云端部署&#xff0c;10分钟出结果 你是不是也遇到过这样的情况&#xff1f;团队拿到了一段海外客户的访谈录音&#xff0c;可能是英语、西班牙语甚至日语&#xff0c;但没人能快速听懂内容&#xff0c;更别说做客户洞察分析了。传…

国家中小学智慧教育平台电子课本解析工具:一键下载全套PDF教材

国家中小学智慧教育平台电子课本解析工具&#xff1a;一键下载全套PDF教材 【免费下载链接】tchMaterial-parser 国家中小学智慧教育平台 电子课本下载工具 项目地址: https://gitcode.com/GitHub_Trending/tc/tchMaterial-parser 还在为教材资源分散而烦恼吗&#xff1…

鸣潮自动化助手:解放双手的游戏体验革命

鸣潮自动化助手&#xff1a;解放双手的游戏体验革命 【免费下载链接】ok-wuthering-waves 鸣潮 后台自动战斗 自动刷声骸上锁合成 自动肉鸽 Automation for Wuthering Waves 项目地址: https://gitcode.com/GitHub_Trending/ok/ok-wuthering-waves 还在为重复刷图、单调…

Zotero插件Ethereal Style终极解决方案:从文献管理混乱到高效研究

Zotero插件Ethereal Style终极解决方案&#xff1a;从文献管理混乱到高效研究 【免费下载链接】zotero-style zotero-style - 一个 Zotero 插件&#xff0c;提供了一系列功能来增强 Zotero 的用户体验&#xff0c;如阅读进度可视化和标签管理&#xff0c;适合研究人员和学者。 …

终极指南:快速掌握ab-download-manager的极速下载技巧

终极指南&#xff1a;快速掌握ab-download-manager的极速下载技巧 【免费下载链接】ab-download-manager A Download Manager that speeds up your downloads 项目地址: https://gitcode.com/GitHub_Trending/ab/ab-download-manager 还在为下载速度慢、文件管理混乱而烦…

123云盘完全解锁教程:5步获得永久会员特权

123云盘完全解锁教程&#xff1a;5步获得永久会员特权 【免费下载链接】123pan_unlock 基于油猴的123云盘解锁脚本&#xff0c;支持解锁123云盘下载功能 项目地址: https://gitcode.com/gh_mirrors/12/123pan_unlock 还在为123云盘的下载速度和文件限制而困扰吗&#xf…

Zotero Style插件:让文献管理更智能高效的终极指南

Zotero Style插件&#xff1a;让文献管理更智能高效的终极指南 【免费下载链接】zotero-style zotero-style - 一个 Zotero 插件&#xff0c;提供了一系列功能来增强 Zotero 的用户体验&#xff0c;如阅读进度可视化和标签管理&#xff0c;适合研究人员和学者。 项目地址: ht…

重庆包装设计怎么做才合理?3个关键点让产品销量翻倍

重庆包装设计怎么做才合理&#xff1f;3个关键点让产品销量翻倍在竞争日益激烈的消费品市场&#xff0c;包装早已不只是“容器”&#xff0c;而是品牌与消费者沟通的第一触点。尤其在重庆这样兼具山城特色与消费活力的城市&#xff0c;本地企业对包装设计的需求正从“好看”转向…

OpCore Simplify:3分钟解决黑苹果配置难题的智能神器

OpCore Simplify&#xff1a;3分钟解决黑苹果配置难题的智能神器 【免费下载链接】OpCore-Simplify A tool designed to simplify the creation of OpenCore EFI 项目地址: https://gitcode.com/GitHub_Trending/op/OpCore-Simplify 还在为复杂的OpenCore配置而苦恼&…

微信消息防撤回工具:彻底告别信息丢失的烦恼

微信消息防撤回工具&#xff1a;彻底告别信息丢失的烦恼 【免费下载链接】RevokeMsgPatcher :trollface: A hex editor for WeChat/QQ/TIM - PC版微信/QQ/TIM防撤回补丁&#xff08;我已经看到了&#xff0c;撤回也没用了&#xff09; 项目地址: https://gitcode.com/GitHub_…

Zotero文献管理神器:5分钟掌握智能进度追踪与标签分类

Zotero文献管理神器&#xff1a;5分钟掌握智能进度追踪与标签分类 【免费下载链接】zotero-style zotero-style - 一个 Zotero 插件&#xff0c;提供了一系列功能来增强 Zotero 的用户体验&#xff0c;如阅读进度可视化和标签管理&#xff0c;适合研究人员和学者。 项目地址:…

Playnite终极游戏库管理器:一站式免费整合所有游戏平台的完整解决方案

Playnite终极游戏库管理器&#xff1a;一站式免费整合所有游戏平台的完整解决方案 【免费下载链接】Playnite Video game library manager with support for wide range of 3rd party libraries and game emulation support, providing one unified interface for your games. …