MPC5744 Data Flash 仿真 EEPROM

2023-05-16

一 、目的
本文主要是使用 MPC5744 中的 Data Flash 仿真 EEPROM 。之前在 《 MPC5744 烧录一直停留在 98% 的解决方法 》 中也简单介绍了 Flash ,所以在这里直接介绍仿真过程 ,注意这里可以使用仿真的块是 Data Flash ,即标有 EEPROM 的块 。在这里使用的开发软件为 S32DS V2.1 ,使用官方 SDK (S32DS_PA_2.1_UP10.zip) 。
二 、仿真 EEPROM
在仿真过程中 ,可以看到有时已经写入的地方会在没擦除时就写入数据 ,此时这不是说写入 Data Flash ,相应的地址就一定会是写入的数据 ,Flash 只有擦除才能使得 0 -> 1 ,写入数据只能将 1 -> 0 ;另外 ,在 MPC5744 的 Data Flash 没擦除就在已经有数据的地方写入数据 ,同样会有 ECC 错误 ,但不会导致 Flash 或程序运行等出问题 。这里不代表其他 Flash 是同样的性质 。
2.1 概述
2.1.1 块指示
在这里 ,使用每个块前 32 个字节指示块的状态 ,共分为 4 个 8 字节 ,每 8 个字节指示块其中一种状态 (这样分是因为 Flash 编程是 8 字节对齐 ,即每一次最少写入 8 字节) 。如下表所示 ,其中偏移量是相对当前编程的块首地址 。
表 1 块指示说明
在这里插入图片描述
SDK 操作说明里面非 0xFFFF FFFF FFFF FFFF 也可以为别的值 ,这里以 SDK 为准 。
以表 1 ,要查看块的状态 ,如以下操作 :

  1. 查看 (3) ,此块处于死块的状态或出现 ECC 读取错误 ,若是 ,此块不能使用 。
  2. 查看 (2) ,查看是否处于擦除或无效块 (出现 ECC 错误也是无效块) ,若是 ,返回相应状态 。
  3. 查看 (1) ,不等于 0xFFFF FFFF FFFF FFFF 或出现读取 ECC 错误 ,则返会此块为积极块 。
  4. 查看 (4) ,不等于 0xFFFF FFFF FFFF FFFF 或出现读取 ECC 错误 ,且 (1) 中的值等于 0xFFFF FFFF FFFF FFFF 且读取不出现 ECC 错误 ,则返回复制成功 。
  5. 若 (1) 和 (4) 读取出来的数据都是 0xFFFF FFFF FFFF FFFF 且无出现 ECC 错误 ,则查看此块除了这 32 个字节以外是否都为 0xFF ,如果不都是 0xFF ,则返回块更新 ,若是 0xFF ,则返回块处于可交替状态 ,即块随时可以存储数据 。若都不是这些 ,返回无效状态 。
    所以如果正常运行 ,在更改状态时 ,应当是 :块处于可交替状态 -> 块更新 -> 复制成功 -> 积极块 。当然 ,如果是最初始的时候 ,即数据都没开始写入的时候 ,会指定其中一块为积极块 ,通常都是所选块中编号最小的块 ,或者最开始运行时期根据块状态的积极块数量比不上指定的积极块数量 ,此时也是直接将块从可交替状态变为积极状态 。不说最初的指定 ,其余正常的块指示都如下 :
  6. 从块可交替状态变为块更新 ,此时块指示不变 ,但块指示以外地区已经在记录数据 。
  7. 更新完成之后 ,将 0x0000 FFFF FFFF FFFF 写入 (4) 中 ,指示数据复制完成 。
  8. 将被复制的块从写满数据到擦除整块 ,若擦除失败 ,此块变为死块 ,擦除成功 ,此块变为块交替状态 ,而复制完成的块将 0x0000 FFFF FFFF FFFF 写入 (1) ,使得其变为积极块 。
    2.1.2 记录指示
    记录即指块指示之下的内容 ,每一条写入的内容都被称为一条记录 。记录的结构如表 3 所示 。表 2 说明的是记录状态指示的含义 ,每一条记录的状态指示都是其前 8 个字节 ,最开始都是 0x FFFF FFFF FFFF FFFF 。
    表 2 记录指示说明
    在这里插入图片描述
    记录指示的数据获取之后 ,将按照以下分析 :
  9. 若为 0xFFFF FFFF FFFF FFFF ,则先检测该记录的记录指示后的 8 个字节 ,即 ID + 数据长度 +数据 ,若 8 字节全为 0xFF ,则此时该记录还未记录数据 ;否则 ,则获取数据长度 ,算出记录长度之后 ,将空白地址的指针加上这个记录长度 。
  10. 若为 0xFFFF 0000 FFFF FFFF ,则该记录为有效数据 。
  11. 若为 0x0000 0000 FFFF FFFF ,则该记录为无效数据 。
    若是更改记录的状态 ,则 :
    将其余数据写入完成后 ,将记录指示更改为 0xFFFF 0000 FFFF FFFF ,在将数据删除之后 ,则记录指示更改为 0x0000 0000 FFFF FFFF 。
    2.2 仿真结构
    如表 3 是 Flash 仿真 EEPROM 的结构 。
    在这里插入图片描述
    如表 3 所示 ,块的前 32 个字节为块指示状态 。之后就是记录 。记录由 记录指示+ID+size+数据 组成 ,其中 size 若是可变的 ,就如上表 3 所示 ,若是固定的 ,则这里不用 size ,数据即是我们实际要写入的数据 。
    需要注意的是 ,如表 3 所示 ,其中红的标定的 ID 中 ,为了更改其中一个数据 (0xF0->0xF1) ,需要将整个记录重新写 ,虽然两个的记录指示可能都指示其为有效数据 ,但这里是以最后一个记录为有效记录 。
    2.3 读取数据
    如图 1 ,是读取的流程 。其中缓存表在这里面就是用数组 ,在此 SDK 中 ,数组名用 table ,存放 ID 对应的有效 Flash 地址 ,相当于建立了一个查找表 ,如 table[0] 代表 ID=0 所在的有效 Flash 地址 , table[1] 代表的是 ID=1 的有效地址 ,依此类推 。
    需要注意的是 ,如果在这里没有找到对应的 ID ,即如果我们有写入 ID=0 和 ID=2 的记录 ,但没有 ID=1 的记录 ,此时就不会从 Flash 读取数据 ,这个应当在此流程有手动处理 。在此 SDK 中 ,返回 STATUS_EEE_ERROR_DATA_NOT_FOUND 表明没有找到该 ID 的有效记录 ,返回 STATUS_EEE_HVOP_INPROGRESS 表明有一个任务不能挂起 。
    在这里插入图片描述
    图 1 读取流程

2.4 写入数据
2.4.1 写入流程图

如图 2 ,是写入的流程图 。在这里面 ,主要是 (1) 和 (2) 。注意 :积极块索引指向我们正在操作的块 。
对于 (1) ,具体操作如下 :

  1. 根据积极块索引 ,读取当前积极块的状态 ,
  2. 当前积极块的状态是复制完成状态 (此时是交换块后 ,旧的积极块没有被擦除 ,新的块就还未被改为积极状态) ,若此块剩余的空间此时能存储此次的数据 ,则返回 EEE_WRITE_ON_COPY_DONE ,否则返回 EEE_WRITE_NO_ENOUGH_SPACE ,表明没有足够空间写入数据 。
  3. 当前积极块不是复制完成状态 ,则若有足够空间存储此次的数据 ,返回 EEE_WRITE_NORMAL ;否则 ,读取每个块存在块前 32 字节的状态 ,计算积极块的数量 ,若此数量与规定的积极块数量一致 ,则返回 EEE_WRITE_SWAP ,意思是需要进行交换块 ,将旧的积极块擦除作为可交替的块 ,将可交替的块作为新的积极块 ;否则 (数量不一致) ,返回 EEE_WRITE_ON_NEW_ACTIVE ,即意思是需要从可交替块中找出一块作为积极块 ,旧的积极块不必擦除 。
    在这里插入图片描述
    图 2 写入流程
    对于 (2) ,具体操作如下 :
  4. 从 (1) 中获取的写入操作中 ,如果为 EEE_WRITE_ON_NEW_ACTIVE ,则更新当前积极块索引 , 然后将当前块的块状态更改为积极状态 ,最后更新 blank addr 位为 32 字节之后的地址 。
  5. 此时 ,(1) 中获取的写入操作 ,如果为 EEE_WRITE_NORMAL 、EEE_WRITE_ON_NEW_ACTIVE 和 EEE_WRITE_ON_COPY_DONE ,则根据积极块索引获取当前块的 blank addr ,然后将数据根据格式写入 ,如果有使能缓存表 ,则更新缓存表 。
  6. 若 (1) 中的状态为 EEE_WRITE_SWAP ,则将数据写入到下一个块中 (即写入下一个要成为积极块的块中 ,在擦除时或初始化时已经将 blank addr 设置为 32 个字节之后 ,注意此时积极块索引还没更新) ,如果写入成功 ,启动块交换 。
  7. 若不是以上写入操作 ,则返回 EEE_WRITE_NO_ENOUGH_SPACE 。
    2.4.2 块交换
    根据当前积极块索引找出下一个积极块索引和当前最久的积极块 (即当前积极块中存在时间最久的 ,注意 :是可以有多个积极块的和可交替块的) 。
    若使用缓存表 ,则检索缓存表内所有 ID 的地址是否在最久的积极块中 ,若是 ,读取 ID 和 size 之后 ,然后用这个作为参数 ,将这些有效数据写入到下一个积极块中 。
    为防止有些 ID 太大 ,超出在缓存表允许的最大 ID ,此时使用交替表 (是一个 uint32_t 的变量) 。此时先以缓存表最大 ID + 1 的 ID (在后文就称为 searchID) 在最久的积极块中搜索 ,此时同时获取超过大于 searchID 中最小的 ID (在后文称为 nextID) :
  8. 查找后 ,若 searchID 和 nextID 都没有 ,则搜索完毕 ;
  9. 查找后 ,若 searchID 存在而 nextID 不存在 ,则在其他积极块和下一个要成为积极块的块 (复制最久的积极块中有效记录的块) 搜索 searchID 有效记录是否存在 ,如果不存在这些块中 ,将该记录进行复制 ,存在就不必 ,如果出现复制失败退出复制数据的过程 ;这过程完成后搜索完毕 。
  10. 查找后 ,若 searchID 不存在而 nextID 存在 ,则将 nextID 作为 searchID ,继续 2 或 4 过程 。
  11. 查找后 ,若 searchID 不存在而 nextID ,则在其他积极块和下一个要成为积极块的块 (复制最久的积极块中有效记录的块) 搜索 searchID 有效记录是否存在 ,如果不存在这些块中 ,将该记录进行复制 ,存在就不必 ,如果出现复制失败退出复制数据的过程 ,然后将nextID 作为 searchID ,继续 2或 4 过程 。
    完成后 ,将下一个要成为积极块的块状态变为复制完成状态 ,然后更改积极块索引至该块 。对于最久的积极块 ,先读出其擦除次数并加一 ,然后执行擦除操作 ,等待擦除成功之后将擦除次数写入最久的积极块当中 ,即该块就是变为可交替块 ,并将 blank addr 改到正确的地方 (块首地址偏移 32 的地方) ,然后可以将刚刚改为复制完成状态的块改为积极块状态 。
    在这里需要注意的是 ,仿真块最好用那些块大小一致的 EEPROM 块 ,因为假设交换的块是从 32KB 的块将有效内容复制至 16KB 的块 ,且有效内容超过 16KB ,此时此 SDK 只会返回 EEE_WRITE_NO_ENOUGH_SPACE ,此时是需要我们进行处理 ,虽然也可以处理 ,就是将要编程积极块的这个块重新擦除 ,并将它的编号和块大小更大的块的编号进行交换 ,很明显 ,要尽量避免这些操作 。
    2.4.3 死块
    一般可以用于如真实擦除次数大于最小 Flash 擦除次数或者块擦除失败时 ,具体过程如下 :
  12. 将 0x0000 FFFF FFFF FFFF 写入 Dead indicator 。
  13. 如果成功写入 ,增加死块的数量 ,其余非死块索引大于此死块索引 (每个块都有索引 ,所以积极块索引才能找到对应的块) 的索引都减一 ,死块索引移动至最后 ,即索引最大的数是死块索引 。块数量减一 。
  14. 积极块索引大于没改变前死块索引的 ,积极块索引减一 ,这是因为对应的块索引减一了 。
  15. 检查积极块数量是否大于等于块总体数量 ,如果是就返回STATUS_EEE_ERROR _NO_ENOUGH_BLOCK ,因为此时没有可交替的块进行块交换 。

2.5 数据恢复
首先 ,先计算所有积极块数量 ,复制完成块数量 ,更新块数量 ,擦除块数量 ,有效块数量和无效块数量 。这是通过读取块状态来决定的 ,然后设置积极块索引 ,并尝试了解掉电之前运行的状态 :

  1. 如果积极快和复制完成块的数量都为 0 ,或者擦除块数量是总块数减一且第一块状态是复制完成块或积极块状态 ,则这可能是第一次运行或上次运行时没完成初始化 (第一次运行时会将所有块的擦除次数默认为 1 写入) ,不涉及其他块 。
  2. 如果不是 1 中条件 ,如果第一块 (索引为零) 是积极块 ,且擦除次数为 1 ,则若第一块是无任何记录 ,且其余块是可交替块 ,可交替块擦除次数为 1 ,此时是正常运行 ;若交替块数量没有那么多或擦除次数不为 1 ,则若块数量只有 2 或 擦除数量大于 0 或第二块是可交替块 ,则这是第一次运行没完成初始化 。
  3. 如果不是以上条件 ,则若积极块数量达到预定的积极块数量且更新块数量不为 0 ,则表明上次运行状态在块更新状态 。
  4. 如果不是以上条件 ,如果复制完成示例大于等于 1 ,上次运行状态在复制完成状态 。
  5. 如果不是以上条件 ,则正常运行 。
    在这个过程 ,积极块索引已经设置好 ,是从索引 0 开始往后第一次积极块索引相连的最后一个索引 (如块 0 、1 是积极块状态 ,块 3 、4 、5 、6 是可交替块 ,块 7 、8 是积极块状态 ,则积极块索引为 1) ,但如果有复制完成块 ,就用已经给的复制完成块索引作为积极块索引 (复制完成块一般是未在块首地址更新未积极块 ,当确实当前要操作的块 ,必须等到旧块擦除之后才在块首地址正式更新) ,复制完成块索引规则是如 :从索引 0 开始 ,第一个确定为复制完成块的索引确定为复制完成块索引 (这是在仅有一个复制完成块的情况下) ,但如果之后有上一个块是积极块的复制完成块出现 ,复制完成块索引更新为此复制完成块的索引 ,再遇到上一个块同样是复制完成块且预定的积极块数量只有 1 时 ,复制完成块索引更新为此复制完成块的索引 。
    完成掉电前积极块索引和运行状态的确定后 ,开始恢复 :
    如果是第一次运行或第一次运行未完成初始化 ,则将擦除次数 (默认 1) 给所有没写上的块写上 ,然后将索引 0 的块标为积极块 ,
    如果掉电前运行状态是有块更新 ,则重新启动块交换 。
    如果掉电前是有复制完成块 ,则检查被复制的块 (即最久的积极块) 的状态 ,如果是可交替状态 ,则找出最久积极块索引 + 1 的块 (如果索引超出索引最大数则该索引为零) 的擦除次数 ,通过对比擦除次数 ,如果次数不正确 ,则重新擦除 ;如果不是可交替或是擦除块状态 ,则擦除最久积极块 。然后最久积极块擦除的要重新写入擦除次数 ,然后让复制完成块变为积极块状态 。
    三 、参考资料
    ① NXP 官网 :《MPC5744PRM》
    下载链接 :
    https://www.nxp.com/products/processors-and-microcontrollers/power-architecture/mpc55xx-5xxx-mcus/ultra-reliable-mpc57xx-mcus/ultra-reliable-mpc574xp-mcu-for-automotive-industrial-safety-applications:MPC574xP?tab=Documentation_Tab

① NXP 官网 :《AN4868》
下载链接 :
https://www.nxp.com.cn/docs/en/application-note/AN4868.pdf

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

MPC5744 Data Flash 仿真 EEPROM 的相关文章

  • AS3 是否可以复制 Shape 对象?

    我正在尝试制作一个可用于复制的形状 这是我所做的 我正在尝试做的以及我陷入困境的解释 在 Flash IDE 画笔 中手动绘制形状 创建了一个包含形状的新影片剪辑 作为一个类导出 实例化该类 var mc MovieClip new sha
  • 是否可以使用 S3 进行 Flash 伪流?

    我一直在使用 S3 来存储和提供 FLV 和 MP4 视频 它效果很好 但内容是渐进下载的 我想知道是否有可能让所谓的 伪流 与 S3 一起使用 伪流允许观看者在下载完整视频之前在视频中向前搜索 并仅将必要的位发送到 Flash 播放器 我
  • Flex 与 ActionScript

    我正在尝试构建 实现一个 Flash 视频播放器来播放视频 我研究了 Flex 并仅使用 VideoElement 构建了一个基本应用程序 它在没有静态链接库的情况下编译为 41k 在链接库时编译为 300k 我生成了报告 但仍然不确定为什
  • 使用 Flash 在本地托管游戏?

    我只是找不到合适的谷歌搜索词 是否可以使用 Flash 或 Flash 兼容服务 来允许游戏中的玩家通过 Web 浏览器托管自己的游戏 使用自己的带宽 在某种程度上 从他们的计算机运行他们自己的游戏服务器 对于 Flash 浏览器内游戏 但
  • 更改由 AS3 添加到舞台的影片剪辑中的动态文本字段不起作用?

    当我更改动态文本字段的文本值时 文本字段只是变为空白 而不显示新值 我有一个名为 game board 的 MovieClip 由 AS3 动态添加到舞台上 舞台一开始是空白的 我有另一个名为 stage 2 的 MovieClip 它作为
  • 如何通过命令行将Flash .fla编译为.swf? [复制]

    这个问题在这里已经有答案了 如何在基于 Windows 的操作系统上通过命令行将 Flash fla 文件编译为 swf 需要安装的命令行工具就可以了 谁能建议我该怎么做 以直接的方式 谢谢 您可以使用JSFL为 Flash IDE 编写脚
  • 我们可以在 Actionscript 中将编译后的 Haxe swf 的 SWC 用作普通库吗?

    我们可以在 Actionscript 中将编译后的 Haxe swf 的 SWC 用作普通库吗 我有一个从haxe代码编译的swf 我可以尝试将它编译成其他SWC 我想将它用作AS3中的lib 是否可以 如果是的话怎么办 是的 可以 性能提
  • 如何打开/关闭 iPhone 相机闪光灯 swift 2?

    我正在寻找如何打开 关闭 iPhone 的相机闪光灯 我发现了这个 IBAction func didTouchFlashButton sender AnyObject let avDevice AVCaptureDevice defaul
  • 为什么我不应该使用 Flash?

    我多次听说我的网站应该避免使用 Flash 但没有人告诉我这样做的充分理由 我搜索了原因 发现很多不真实的情况 例如 Flash 中的文本无法被搜索引擎索引 或者不一定是真实的或足够重要的 占用更多带宽 JS 等效项会更大还是更小 我的网站
  • 带有嵌入 Flash 视频的 PDF 示例?

    有谁知道我在哪里可以查看嵌入 Flash 视频的 PDF 示例 我知道问这个问题很愚蠢 因为你会认为任何面向技术的用户都应该能够使用谷歌找到一个 但我真的找不到 我的另一个问题是 使用 C 中的 API 将 Flash 视频嵌入 PDF 文
  • 如何从 Adob​​e AIR 中的文件流获取字节数组?

    我阅读的内容有限 小 15 500 mb 文件 我需要能够将所有文件字节放入一个字节数组中 所以我有一个功能 Bindable public var ba ByteArray new ByteArray code protected fun
  • 自定义上下文菜单未显示,因为显示对象位于“顶部”

    作为这里另一个问题的后续 我已经在 Flash 应用程序中构建了一个自定义上下文菜单项 但遇到了有时不显示的问题 我发现问题是另一个精灵位于带有自定义上下文菜单的项目的 顶部 然而 即使将 mouseEnabled 和 mouseChild
  • 我可以将 Pepper Flash 捆绑在 Electron.js 应用程序中以在 2021 年以后运行 Flash 吗?

    所以 我已经关注了https www electronjs org docs tutorial using pepper flash plugin https www electronjs org docs tutorial using p
  • Adobe Air 与 Flash Player 10.1 运行时

    Adobe Flash Player 是一个浏览器 插件提供的优势 用户和内容创作者 浏览器 包括能够 在浏览器中交付 RIA Adobe AIR 融合了最初的技术 在 Flash Player 中开发并启用 丰富的互联网应用 桌面 Ado
  • 使用 Javascript 自定义上下文菜单?

    有没有办法使用 Javascript 将自定义字段添加到内置浏览器上下文菜单中 我知道 flash actionscript 可以做到这一点 他们是如何做到的 示例 右键单击http josephjewell com http joseph
  • Javascript 桥接到 Flash 以在 Flash 中存储 SO“cookie”

    读完这个问题后如何唯一地识别访问我网站的计算机 https stackoverflow com questions 216542 how do i uniquely identify computers visiting my web si
  • 初学者 Actionscript 参考

    我八岁的儿子要求 教他 Flash 编程 有人可以参考好的在线 Actionscript 学习资源吗 我们拥有的 Flash 版本是 Flash MX 先感谢您 看看这是否符合您的要求 http www scribd com doc 940
  • 移动影片剪辑时的视觉错误

    在我尝试创建一个简单的类似乒乓球的游戏时 我遇到了一个非常奇怪的 有时甚至是严重的视觉错误 当我设置球 Flash CS 5 5 库 MovieClip 以相当快的速度在屏幕上移动时 我注意到有时球的边缘会在其移动方向上被短暂切断 当它发生
  • flash 10 正交投影

    我一直在尝试新的 flash 10 3d 可能性 发现在 3d 中旋转精灵相当容易 var card Sprite new MyCard card x 100 card y 100 card z 200 card rotationX 60
  • 在 Flash 中动态更改视频播放速率

    我正在寻找一种方法 让 Flash 视频能够平滑地改变速度 从比原始帧速率慢到快 它只需要在Windows PC上运行 并且可以使用最新版本的Flash 10 2 with Stage Video Flash Media Server 提供

随机推荐

  • XXX测试用例设计?XXX怎么测试?(行李箱、电梯、水杯、笔、椅子)

    首先要知道 xff0c 答案要从下面6个方向考虑 xff1a 功能测试 界面测试 易用性测试 兼容性测试 安全性测试 性能测试 其次 xff0c 在回答问题前要向面试官表明 xff1a 我不知道XXX的具体需求 xff0c 所以会以我认知的
  • 面试——测试基础理论

    测试先导性知识 测试是什么 xff1f 在规定的条件下对程序进行操作去发现错误 xff0c 然后对软件质量进行评估的一个过程 需要注意的是 xff0c 软件是由文档 数据以及程序组成的 xff0c 所以对软件测试应该包括 xff1a 软件形
  • 【ubuntu16.04 LTS】 ping www.baidu.com不通

    想更新一个软件包 xff0c 发现ubuntu不能正常更新 xff0c 结果ping www baidu com不通 xff0c 但是ping ip 可能 xff0c 所以认为是DNS没有配置 解决方法 xff1a 1 xff0c 既然能p
  • 小鼠试毒问题(二进制)

    1000桶酒 xff0c 其中1桶有毒 而一旦吃了 xff0c 毒性会在1周后发作 问最少需要多少只老鼠可在一周内找出毒酒 如题 分析思路 xff1a 要用尽可能少的老鼠完成相对大的任务量 xff0c 要想到把问题进行对数分解 从而不难想到
  • wsl,Ubuntu,关于解决E: Could not read response to hello message from hook [ ! -f /usr/bin/snap ] || /usr/

    大坑 出现问题 xff1a 今天安装mysql xff0c sudo apt span class token operator span get install mysql span class token operator span s
  • wsl,win10子系统Ubuntu,安装mysql过程及坑

    一 安装 sudo apt span class token operator span get install mysql span class token operator span server 二 启动服务 注意 xff1a 先停止
  • 外接显示器调亮度解决方案(最低亮度后还是很亮)

    出现的问题 xff1a 手动调显示屏调亮度的键 xff0c 发现调到最低亮度后还是很亮 解决方案 xff1a 使用显卡设置来调整 win10 xff1a 桌面右键 英特尔显卡设置 显示器 颜色设置 选择显示器 应用
  • Java-线程,多线程同步安全案例,多窗口卖票一共有 50张票 ,4个窗口出售,打印出票售出的顺序。

    一共有 50张票 xff0c 4个窗口出售 xff0c 打印出票售出的顺序 span class token keyword package span com span class token punctuation span proble
  • tcp连接的select

    tcp的socket不同于udp tcp xff1a 建立socket的fd xff1b bind xff1b listen xff1b accept xff1b send or recv 另一端connect xff08 客户端 xff0
  • ROS NOETIC 思岚激光雷达A2M8启动历程

    Ubuntu20 04系统 xff0c 装的ROS对应为NOETIC版本 第一个bug 一直在catkin make这里出错 xff0c 我的工作空间 xff08 我也命名为catkin ws xff09 在catkin make之后 xf
  • 解决ubuntu网络调节助手之后打不开

    解决ubuntu安装deb文件之后打不开问题 xff08 安装libqtgui4 amd64 xff09 安装Ubuntu网络调试助手 链接 xff1a https pan baidu com s 1GSq pi1FOZxHFnY7PMBh
  • VSCODE中运行C语言(从安装到运行详细版)

    VSCODE中运行C语言 xff08 从插件安装到运行详细版 xff09 一 下载安装MinGW w64 官方下载网站 xff1a MinGW 64 往下来进入下一张页面图 xff0c 选择要下载的文件 二 环境变量配置 按照上面的步骤全部
  • 【ubuntu16.04 LTS】ping百度通,但浏览器打不开百度网页

    典型的DNS配置问题 1 xff0c 执行如下命令 span class token function sudo span span class token function vi span etc resolv conf 在文件最后添加
  • VLAN类型

    大家好呀 xff0c 我是请假君 xff0c 今天又来和大家一起学习数通了 xff0c 今天要分享的知识是VLAN类型 一 基于端口的VLAN xff1a 基于端口的VLAN是最简单 最有效的VLAN划分方法 xff0c 它按照设备端口来定
  • STM32开发(三) 使用printf 重定位到串口输出|CSDN创作打卡

    上一篇 主目录 下一篇 文章目录 背景 KEIL MDK环境下printf重定位串口输出 第一步 在KEIL MDK中使用MicroLIB如图中勾选 第二步 STM32Cube MX异步配置 第三步 KEIL代码演示 代码使用Cube 注意
  • 总线(二)CAN通讯协议介绍

    文章目录 CAN xff08 Controller Area Network xff09 是什么 xff1f 总线拓扑图CAN特征CAN协议数据帧遥控帧遥控帧和数据帧相关 xff1f 仲裁优先级决定数据帧和遥控帧的优先级标准格式和扩展格式的
  • CAN 简介

    1 目的 本文主要介绍一部分 CAN 协议层 2 CAN 简介 这里的内容参考的是 1991 9 的 2 0 版本的官方 CAN 规格书 2 1 概述 CAN 控制器局域网 是一种串行通讯协议 xff0c 传输速度可达 1Mbit s 总线
  • I2C 简介

    1 I2C 简介 这里的内容参考的是 2014 4 4 的 V 6 版本的官方 I2C Bus 规格书 xff0c 第六章有给出相应的链接 1 1 引脚 I2C 一般而言是一种同步半双工的通信方式 xff0c 所以除了电源引脚之外 xff0
  • MPC5744 烧录一直停留在 98% 的解决方法

    1 目的 本人在调试一块主控为 MPC5744 的板子时 xff0c 有时候在烧录时 xff0c 发现烧录总是停在 98 xff0c 卡在 CRC 这里 xff0c 在查找和看资料之后 xff0c 发现了几种解决方法 xff1a 使用 pe
  • MPC5744 Data Flash 仿真 EEPROM

    一 目的 本文主要是使用 MPC5744 中的 Data Flash 仿真 EEPROM 之前在 MPC5744 烧录一直停留在 98 的解决方法 中也简单介绍了 Flash xff0c 所以在这里直接介绍仿真过程 xff0c 注意这里可以