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 的相关文章

  • 如何获取IE中sIFR嵌入标签的点击事件?

    我已经实施了可扩展的 Inman 闪存更换 http en wikipedia org wiki Scalable Inman Flash Replacement sIFR 转换文本 问题是 我无法做到onClickiSFR 嵌入标签上的事
  • Flash,ActionScript 3:获取影片剪辑中包含的所有影片剪辑

    以免说我有一个 movieClip A 其中包含 movieClip B1 B2 B3 B4 B5 我在 A 中编写代码来接收 a 包含的所有影片剪辑并打印名称 我尝试了这个但没有成功 for each a MovieClip in thi
  • 显示精灵的另一个实例

    是否可以显示精灵的另一个实例 我想做的是反射动画精灵 到目前为止 我得到的是我的 Sprite 称为 canvas 它内部有使用 AS3 进行动画处理的内容 我想要做的是显示它翻转的副本 在它下面看起来像倒影 我尝试了以下代码 但没有运气
  • Flash/ActionScript 3.0 中的 StackTrace

    我想在代码的任何函数中查看堆栈跟踪 因此我做了类似的事情来调用它并打印堆栈跟踪 public function PrintStackTrace try throw new Error StackTrace catch e Error tra
  • C++ 通用回调实现

    我有一段代码 它以 XML 的形式从 flash 播放器获取消息 将它们解析为函数和参数 并调用该函数的已注册回调 我想要替换的代码片段是做得很好 几乎 的通用回调机制 flashSDK 的通用回调实现代码 ASInterface inl
  • 如何让FlashDevelop使用32位JRE?

    我需要为 Android Studio 安装 64 位 JDK 这也意味着JAVA HOME设置为 64 位 JDK 我还安装了 32 位 JRE 和 Flex SDKjvm config文件我指定了它的路径 我知道 Flex SDK 使用
  • 如何通过http打开远程sqlite数据库?

    是否可以通过 http 打开 sqlite 文件 我只需要读取数据库 并希望我可以做类似的事情 var dbFile File new File http 10 1 1 50 project db sqlite sqlConnection
  • 如何添加链接到 Flash 横幅

    我主要是一名开发人员 不知道如何使用 Adob e Flash CS4 有没有一种简单的方法可以将链接添加到 Flash 横幅 我有 flv 文件 其中包含库和两层中的一些项目 请给我一步一步的指示 编辑 我找到简单的解决方案 步骤如下 G
  • Adobe Flash Builder 能否用于调试和分析 OpenLaszlo SWF10/SWF11 应用程序?

    我读过 Adob e 的Flash Builder 4 0 支持 ActionScript 3 的分析 http help adobe com en US flashbuilder using WS6f97d7caa66ef6eb1e63e
  • Flash 安全错误 #2048:是否有解决方法,或者 Twilio 是否必须更改其元策略?

    我的 Flash Flex 应用程序出现问题 几个月来 它可以从 Twilio 下载文件 但现在我收到以下错误 我不得不删除超链接 所以想象 ttp 实际上是 http 安全错误事件 类型 安全错误 气泡 false 可取消 假事件阶段 2
  • Flash / Java Applet 的 NPAPI 插件替代方案

    我的问题是关于 2014 年 12 月后 chrome 宣布不支持 NPAPI 插件 Firefox 也遵循同样的规定 我的一个旧应用程序中有一个基于 NPAPI 的插件 到目前为止该插件运行良好 但在 Chrome 和 Firefox 发
  • Html5 视频和 Flash 方法

    研究 HTML5 视频标签 并研究哪些浏览器支持哪些视频文件类型 我最初的想法是事情变得比仅仅使用 Flash 更困难 我想知道是否有人已经找到一些骨架代码 与视频的开发方法相结合 来执行以下操作 如果闪光灯可用 请使用它 如果没有 请尝试
  • 在 ActionScript 中移动数组中的对象,产生体育场波浪效果

    我想移动数组中的所有对象 产生体育场波浪效果 我想根据舞台上的 y 值移动对象 我所有的方块大小都是 50x50 我想将它们向上移动然后向下移动 下面是我的代码 import fl transitions Tween import fl t
  • 为什么 ActionScript 中没有记录 drawRoundRectComplex() ?

    在研究actionscript 3的图形类时 我遇到了未记录的drawRoundRectComplex 方法 它是一个变种drawRoundRect 但有 8 个参数 最后四个是每个角的直径 x y 宽度 高度 左上 右上 左下 右下 ex
  • Flash AS3 - 将多个对象拖放到一个目标?

    标题或多或少是不言自明的 我一直在学习许多不同的教程 而且说实话 我对 AS3 不太擅长 上图显示了我的目标 无论如何 我在我看到的大多数在线教程中注意到 拖放教程要么基于一个对象到一个目标 要么基于多个对象到多个目标 所以我想知道是否有人
  • ReferenceError:错误#1065:变量 JSON 未定义

    我快要爆炸了 想弄清楚如何解决这个问题 所以在我这样做之前 也许你可以帮助我 我正在 flash builder 4 5 1 21328 中的 flash Player 11 下开发一个游戏 我想尝试一下新功能 例如本机 JSON 支持 但
  • Flash 点击时不打开链接

    我用 Flash 创建了这个横幅 我需要单击它来打开一个网页 我使用了这个 Actionscript 3 0 代码 link btn addEventListener MouseEvent CLICK openurl function op
  • 在 Flash 对象上方显示图像

    我在这里面临着一个棘手的情况 这就是问题 我有一个 Flash 对象 我想在其上显示图像这些是我尝试过的技巧 1 玩转z index 没用 2 将wmode参数设置为透明 不透明 同样没有用 3 使用javascript并仅在页面加载后显示
  • 在android中加载swf文件时出现问题

    当我在 Android 模拟器中加载交互式 SWF 文件时遇到问题 我使用2 3 1 AVD 这是代码 package com androidpeople view import android app Activity import an
  • 如何在 AS3 中设置 swf 的宽度和高度?

    如何在 AS3 中设置 swf 的宽度和高度 到目前为止 这是我的代码 package import flash display Sprite public class Game extends Sprite 现在 加载时它处于任意默认大小

随机推荐

  • 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 注意这里可以