32单片机从入门到精通之安全性与可靠性——防护措施(十八)

在人生的道路上,我们会遇到各种困难和挑战。但是,只要我们保持积极的态度和坚定的信念,我们就能够战胜一切困难,实现自己的梦想。不要害怕失败,因为失败是成功的基石。当我们遭遇挫折时,要坚持不懈地努力,相信自己的能力,相信明天会更好。要相信,我们的梦想就在前方等待着我们去追逐。无论遇到什么困难,都要勇敢地面对,永不放弃。记住,成功没有捷径,只有付出和努力才能换来辉煌的成就。相信自己,相信每一次努力都会有回报。无论是在学业、事业还是人际关系上,我们都要坚持不懈地追求进步。我们应该时刻保持积极的心态,相信自己的能力。只有懂得坚持的人,才能真正享受成功的喜悦。无论遇到多少困难,都要坚信,只要我们付出努力,坚持不懈,一定能够战胜一切困难,成就自己的人生!

目录

上一张试卷讲解

一、选择题(每题2分,共20分)

二、简答题(每题10分,共30分)

三、编程题(每题15分,共30分)

 CRC-8校验值计算函数

简单的看门狗定时器管理器

四、设计题(每题15分,共20分)

 监控嵌入式系统状态的框架

基于心跳信号的网络连接健康监测系统

知识点讲解

设置看门狗定时器

知识点讲解:

代码案例(以嵌入式C语言为例):

注释说明:

应用加密技术保护敏感数据

知识点讲解:

代码案例(Python示例,使用Fernet对称加密):

注释说明:

试卷

基础知识部分(选择题)

深入理解部分(简答题)

实践技能部分(编程题)

综合应用部分(案例分析题)


上一张试卷讲解

一、选择题(每题2分,共20分)

  1. 多项式校验方法

    • 正确答案是 B. CRC校验。CRC校验使用了基于二进制多项式的数学运算来生成校验码。
  2. CRC校验中最高位为1的操作

    • 正确答案是 B. 左移一位并异或多项式。当最高位为1时,需要左移一位并将结果与预定义的多项式进行异或操作。
  3. 奇偶校验适用的数据块规模

    • 正确答案是 B. 小规模数据传输。奇偶校验通常用于较小的数据单位,如字符或字节,而不是大型文件或视频流。
  4. 看门狗定时器的主要作用

    • 正确答案是 B. 防止程序陷入无限循环。看门狗定时器用于检测并恢复由于软件故障导致的系统停滞。
  5. 心跳信号用途

    • 正确答案是 A. 检测网络连接状态。心跳信号通常用于确认两个通信端点之间的连接是否正常。
  6. 非常见的系统状态监控手段

    • 正确答案是 D. 手动检查硬件。手动检查硬件不是一种自动化监控手段。
  7. 嵌入式系统的异常处理机制

    • 正确答案是 B. 捕获并处理可能发生的异常情况。正确的异常处理应该包括识别、响应和恢复。
  8. CRC-8初始化寄存器值

    • 正确答案是 B. 0xFF。不同的CRC标准有不同的初始值,但0xFF是一个常见选择。
  9. 奇偶性为奇数时“1”的数量

    • 正确答案是 D. 奇数个。奇偶校验确保整个数据单元中的1的数量符合预定的奇偶规则。
  10. 自我诊断测试时机

    • 正确答案是 A. 启动时。自我诊断测试通常在系统启动时执行,以确保所有组件都正常工作。

二、简答题(每题10分,共30分)

  1. CRC工作原理及可靠性

    • CRC通过将数据块作为二进制多项式对待,并用一个预定义的除数(另一个多项式)去除它。余数即为校验码。相比于简单的奇偶校验,CRC能够检测更多的错误模式,因为它考虑了数据的顺序,而不仅仅是位的数量。
  2. 看门狗定时器的作用和配置

    • 看门狗定时器是一种硬件或软件机制,用于防止程序因死循环或其他问题而停止响应。在一个典型的嵌入式系统中,如果主程序未能在规定时间内喂狗(复位定时器),看门狗会触发系统重启。例如,在汽车电子控制系统中,WDT可以用来保证即使某个子系统出现故障,车辆也能继续安全运行。
  3. 心跳信号在网络通信中的作用

    • 心跳信号是一系列定期发送的小型消息,用于确认两台设备之间的连接仍然活跃。如果接收方未能按时收到心跳包,则认为连接已经断开。这有助于及时发现并修复网络故障,从而提高服务的可用性和稳定性。

三、编程题(每题15分,共30分)

  1. CRC-8校验值计算函数

    • 这个题目要求实现一个计算CRC-8校验值的函数。考生需要理解CRC算法,并能正确地应用到给定的数据缓冲区上。
 CRC-8校验值计算函数
#include <stdint.h>
#include <stddef.h>// CRC-8多项式(0x07),这是一个常见的CRC-8多项式。
#define POLYNOMIAL 0x07/*** @brief 计算给定数据缓冲区的CRC-8校验值。** @param data 数据缓冲区指针* @param length 数据缓冲区长度* @return uint8_t 返回计算出的CRC-8校验值*/
uint8_t crc8(const uint8_t *data, size_t length) {uint8_t crc = 0xFF; // 初始化CRC寄存器为0xFFfor (size_t i = 0; i < length; ++i) {crc ^= data[i]; // 将当前字节与CRC进行异或操作for (unsigned char bit = 8; bit > 0; --bit) {if (crc & 0x80) { // 如果最高位是1crc = (crc << 1) ^ POLYNOMIAL; // 左移一位并异或多项式} else {crc <<= 1; // 否则只左移一位}}}return crc; // 返回最终的CRC值
}
  1. 看门狗定时器管理器

    • 要求考生编写代码来模拟看门狗定时器的行为。考生应当展示他们如何设置定时器、在主循环中定期喂狗,以及如何利用看门狗来增强系统的可靠性。
简单的看门狗定时器管理器
#include <avr/io.h>   // 包含AVR单片机I/O定义
#include <avr/wdt.h>  // 包含看门狗定时器库/*** @brief 初始化看门狗定时器,设置超时时间为2秒。*/
void setup_watchdog() {wdt_enable(WDTO_2S); // 启用看门狗定时器,设置超时周期为2秒
}/*** @brief 喂狗函数,必须定期调用以防止系统复位。*/
void feed_watchdog() {wdt_reset(); // 复位看门狗定时器
}int main(void) {setup_watchdog(); // 初始化看门狗定时器while (1) {// 主业务逻辑...// 必须确保此行代码能够被定期执行feed_watchdog(); // 每次迭代都喂狗一次// 模拟处理任务...}return 0;
}

四、设计题(每题15分,共20分)

  1. 嵌入式系统状态监控框架设计

    • 在这个问题中,考生需要设计一个框架,该框架不仅能够实时收集关键参数,还能根据这些参数做出反应。这涉及到硬件传感器的选择、软件架构的设计以及如何优化性能以确保高效运行。
 监控嵌入式系统状态的框架

由于这个题目更偏向于设计而非具体的代码实现,这里提供一个高层次的设计思路以及伪代码示例:

硬件选择:

  • 温度传感器(如DS18B20)
  • 电压监控芯片(如INA219)

软件架构:

+-------------------+
|                   |
|  主程序           |
|                   |
+---------+---------+|v
+---------v---------+
|                   |
|  状态监控模块      |
|                   |
+---------+---------+|v
+---------v---------+
|                   |
|  数据采集子模块   |
|                   |
+---------+---------+|v
+---------v---------+
|                   |
|  参数分析子模块   |
|                   |
+---------+---------+|v
+---------v---------+
|                   |
|  警报/保护措施    |
|                   |
+-------------------+

伪代码示例:

初始化:- 初始化所有传感器- 设置阈值参数循环:- 从各个传感器读取数据- 分析数据是否超出设定范围- 如果超出范围,则触发警报或采取保护措施- 继续循环异常处理:- 捕获可能发生的异常情况- 根据异常类型采取相应措施
  1. 基于心跳信号的网络健康监测系统

    • 此题目关注于构建一个系统,该系统能够通过心跳信号判断网络连接的状态,并采取适当的措施来维护连接的稳定性和可靠性。考生应讨论他们的设计方案如何确保系统在面对网络故障时能够快速响应和恢复。
基于心跳信号的网络连接健康监测系统
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <arpa/inet.h>
#include <sys/socket.h>#define HEARTBEAT_INTERVAL 5 // 心跳间隔时间(秒)
#define SERVER_IP "192.168.1.1" // 服务器IP地址
#define PORT 12345 // 端口号int sock;/*** @brief 创建TCP客户端并连接到服务器。*/
void connect_to_server() {struct sockaddr_in server_addr;sock = socket(AF_INET, SOCK_STREAM, 0);if (sock == -1) {perror("Socket creation failed");exit(EXIT_FAILURE);}server_addr.sin_family = AF_INET;server_addr.sin_port = htons(PORT);inet_pton(AF_INET, SERVER_IP, &server_addr.sin_addr);if (connect(sock, (struct sockaddr*)&server_addr, sizeof(server_addr)) < 0) {close(sock);printf("Connection failed, retrying...\n");sleep(HEARTBEAT_INTERVAL);connect_to_server();}
}/*** @brief 发送心跳包给服务器。*/
void send_heartbeat() {const char heartbeat_msg[] = "HEARTBEAT";send(sock, heartbeat_msg, sizeof(heartbeat_msg), 0);
}/*** @brief 接收服务器响应。*/
int receive_response() {char buffer[1024] = {0};int bytes_received = recv(sock, buffer, sizeof(buffer)-1, 0);if (bytes_received <= 0) {return 0; // 连接断开或接收失败}return 1;
}int main() {connect_to_server();while (1) {send_heartbeat();if (!receive_response()) {printf("No response from server, reconnecting...\n");close(sock);connect_to_server();}sleep(HEARTBEAT_INTERVAL);}close(sock);return 0;
}

请注意,上述代码示例假定你在一个支持POSIX API(如Linux)的环境中工作,并且有适当的权限来创建套接字和进行网络通信。对于实际部署,你需要根据具体平台调整代码,并添加更多的错误处理和安全措施。

知识点讲解

下面我将详细讲解设置看门狗定时器和应用加密技术的防护措施,并提供相应的代码案例和注释。

设置看门狗定时器

知识点讲解:

看门狗定时器(Watchdog Timer, WDT) 是一种硬件或软件机制,用于监控程序的运行状态。如果程序因为某些原因(如死循环、卡顿等)未能在规定时间内复位看门狗定时器,定时器到期后会触发一个系统重置或其他恢复操作,从而帮助系统从故障中恢复。

代码案例(以嵌入式C语言为例):
#include <avr/io.h> // 包含AVR单片机I/O定义
#include <avr/wdt.h> // 包含看门狗定时器库// 初始化看门狗定时器,设置为2秒超时
void watchdog_init(void) {// 启用看门狗定时器,设置超时周期为2秒wdt_enable(WDTO_2S);
}// 喂狗函数,必须定期调用以防止系统复位
void watchdog_feed(void) {// 复位看门狗定时器wdt_reset();
}int main(void) {// 初始化看门狗定时器watchdog_init();while (1) {// 主循环中的代码逻辑// ...// 必须确保此行代码能够被定期执行watchdog_feed();// 模拟处理任务// ...}return 0;
}
注释说明:
  • #include:引入必要的头文件。
  • watchdog_init():初始化看门狗定时器,设置超时时间为2秒。
  • watchdog_feed():喂狗函数,用来复位看门狗定时器,防止其触发复位。
  • wdt_enable(WDTO_2S):启用看门狗定时器并设定超时周期。
  • wdt_reset():复位看门狗定时器,表明程序正在正常运行。

应用加密技术保护敏感数据

知识点讲解:

加密技术 可以分为对称加密和非对称加密两大类。对称加密使用相同的密钥进行加密和解密,而非对称加密则使用一对公私钥。此外,还有散列函数,用于创建固定长度的数据指纹,常用于验证数据完整性。

对于密钥存储,应该利用安全元件(Secure Element)、可信平台模块(TPM)或者操作系统提供的安全服务来保护密钥不被非法访问。

通信安全方面,通常采用SSL/TLS协议来加密传输的数据,确保数据在传输过程中不会被窃听或篡改。

代码案例(Python示例,使用Fernet对称加密):
from cryptography.fernet import Fernet# 生成密钥并保存到文件
def generate_key():key = Fernet.generate_key()with open("secret.key", "wb") as key_file:key_file.write(key)# 加载密钥
def load_key():return open("secret.key", "rb").read()# 加密消息
def encrypt_message(message):key = load_key()f = Fernet(key)encrypted_message = f.encrypt(message.encode())print("Encrypted:", encrypted_message)return encrypted_message# 解密消息
def decrypt_message(encrypted_message):key = load_key()f = Fernet(key)decrypted_message = f.decrypt(encrypted_message).decode()print("Decrypted:", decrypted_message)return decrypted_message# 示例用法
if __name__ == "__main__":# 首次运行时生成密钥generate_key()# 加密一条消息original_message = "This is a secret message."encrypted = encrypt_message(original_message)# 解密消息decrypt_message(encrypted)
注释说明:
  • generate_key():生成一个新的Fernet密钥,并将其保存到文件中。
  • load_key():从文件加载之前生成的密钥。
  • encrypt_message():使用加载的密钥加密给定的消息。
  • decrypt_message():使用加载的密钥解密给定的加密消息。
  • Fernet.generate_key():生成适合Fernet算法使用的密钥。
  • Fernet(key):创建一个Fernet对象,用于加密和解密。
  • f.encrypt() 和 f.decrypt():分别用于加密和解密字符串。

通过这些代码示例,你可以了解如何在实际编程中实现看门狗定时器以及如何使用加密技术来保护敏感数据。根据你的具体需求和技术栈,可能需要调整代码以适应特定环境。

试卷

基础知识部分(选择题)
  1. 看门狗定时器的主要作用是什么? a) 提高程序运行速度 b) 防止程序陷入死循环或卡顿 c) 加密通信数据 d) 减少内存占用

  2. 下列哪一项不是加密技术的应用场景? a) 保护静态数据的安全性 b) 确保通信数据的保密性和完整性 c) 增加程序执行效率 d) 存储和传输敏感信息

  3. Fernet加密算法属于哪种类型的加密? a) 对称加密 b) 非对称加密 c) 散列函数 d) 流加密

  4. 在嵌入式系统中,喂狗操作指的是什么? a) 定期重启系统 b) 定期复位看门狗定时器 c) 定期更新密钥 d) 定期备份数据

  5. SSL/TLS协议主要用于保障什么? a) 文件系统的安全性 b) 数据库管理系统的性能 c) 网络通信的安全性 d) 应用层的逻辑正确性

深入理解部分(简答题)
  1. 请解释为什么在计算机系统中需要使用看门狗定时器,并说明其工作原理。

  2. 描述对称加密与非对称加密之间的主要区别,并举例说明它们各自的适用场景。

  3. 什么是Fernet加密?它的工作机制是什么?

  4. 解释如何利用硬件安全模块(如TPM)来增强密钥存储的安全性。

实践技能部分(编程题)
  1. 编写一段C语言代码,实现一个简单的看门狗定时器初始化和喂狗功能,确保程序不会因为死循环而停止响应。(提示:可以参考AVR单片机的例子)

  2. 使用Python编写一个程序,该程序能够生成一个Fernet密钥,将一段文本消息加密后保存到文件中,并能够从文件读取加密的消息并解密显示出来。

综合应用部分(案例分析题)
  1. 假设你正在为一家公司开发一款嵌入式设备软件,要求包括防止程序崩溃和保护用户数据不被窃取的功能。请详细描述你会采取哪些措施来满足这些需求,并解释每个措施的作用。

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

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

相关文章

gesp(C++五级)(1)洛谷:B3941:[GESP样题 五级] 小杨的锻炼

gesp(C五级)&#xff08;1&#xff09;洛谷&#xff1a;B3941&#xff1a;[GESP样题 五级] 小杨的锻炼 题目描述 小杨的班级里共有 n n n 名同学&#xff0c;每位同学都有各自的锻炼习惯。具体来说&#xff0c;第 i i i 位同学每隔 a i a_i ai​ 天就会进行一次锻炼&#x…

MIUI显示/隐藏5G开关的方法,信号弱时开启手机Wifi通话方法

5G网速虽快&#xff0c;手机功耗也大。 1.取消MIUI强制的5G&#xff0c;手动设置4G的方法&#xff01; 【小米澎湃OS, Xiaomi HyperOS显示/隐藏5G开关的方法】 1.1.小米MIUI系统升级后&#xff0c;被强制连5G&#xff0c;手动设置开关被隐藏&#xff0c;如下图&#xff1a; 1…

Gateway 网关

1.Spring Cloud Gateway Spring cloud gateway是spring官方基于Spring 5.0、Spring Boot2.0和Project Reactor等技术开发的网关&#xff0c;Spring Cloud Gateway旨在为微服务架构提供简单、有效和统一的API路由管理方式&#xff0c;Spring Cloud Gateway作为Spring Cloud生态…

python 轮廓 获取环形区域

目录 效果图&#xff1a; 代码&#xff1a; 效果图&#xff1a; 代码&#xff1a; import cv2 import numpy as np# 读取图像 image cv2.imread(rE:\project\jijia\tools_jijia\img_tools\ground_mask.jpg, cv2.IMREAD_GRAYSCALE) # 二值化图像 # 二值化图像 _, binary cv…

MySQL主从复制

文章目录 1.主从复制1.1 概念和原理1.2 案例&#xff1a;一主一从1&#xff09;准备工作2&#xff09;master3&#xff09;slave4&#xff09;测试 1.主从复制 1.1 概念和原理 1.2 案例&#xff1a;一主一从 1&#xff09;准备工作 同步时间 # 安装 ntpdate yum -y install…

网络应用技术 实验七:实现无线局域网

一、实验简介 在 eNSP 中构建无线局域网&#xff0c;并实现全网移动终端互相通信。 二、实验目的 1 、理解无线局域网的工作原理&#xff1b; 2 、熟悉无线局域网的规划与构建过程&#xff1b; 3 、掌握无线局域网的配置方法&#xff1b; 三、实验学时 2 学时 四、实…

51c大模型~合集104

我自己的原文哦~ https://blog.51cto.com/whaosoft/13076849 #Deepfake Detection ACM Computing Surveys | 港大等基于可靠性视角的深度伪造检测综述&#xff0c;覆盖主流基准库、模型 本文作者包括香港大学的王天一、Kam Pui Chow&#xff0c;湖南大学的廖鑫 (共同通讯…

人工智能实验(四)-A*算法求解迷宫寻路问题实验

零、A*算法学习参考资料 1.讲解视频 A*寻路算法详解 #A星 #启发式搜索_哔哩哔哩_bilibili 2.A*算法学习网站 A* 算法简介 一、实验目的 熟悉和掌握A*算法实现迷宫寻路功能&#xff0c;要求掌握启发式函数的编写以及各类启发式函数效果的比较。 二、实验要求 同课本 附录…

Web开发(一)HTML5

Web开发&#xff08;一&#xff09;HTML5 写在前面 参考黑马程序员前端Web教程做的笔记&#xff0c;主要是想后面自己搭建网页玩。 这部分是前端HTML5CSS3移动web视频教程的HTML5部分。主要涉及到HTML的基础语法。 HTML基础 标签定义 HTML定义 HTML(HyperText Markup Lan…

LabVIEW水位监控系统

LabVIEW开发智能水位监控系统通过集成先进的传感技术与控制算法&#xff0c;为工业液体存储提供精确的水位调控&#xff0c;保证了生产过程的连续性与安全性。 项目背景 在化工和饮料生产等行业中&#xff0c;水位控制的准确性对保证生产安全和提高产品质量至关重要。传统的水…

【Rust】结构体定义域实例化

目录 思维导图 1. 结构体的定义与实例化 1.1 结构体的基本概念 1.2 定义结构体 1.3 创建结构体实例 1.4 结构体的定义与实例化示例 2. 访问与修改结构体字段 2.1 访问字段 2.2 修改字段 3. 结构体实例的构造函数 3.1 构造函数的定义 3.2 使用字段初始化简写 4. 结…

013:深度学习之神经网络

本文为合集收录&#xff0c;欢迎查看合集/专栏链接进行全部合集的系统学习。 合集完整版请参考这里。 深度学习是机器学习中重要的一个学科分支&#xff0c;它的特点就在于需要构建多层且“深度”的神经网络。 人们在探索人工智能初期&#xff0c;就曾设想构建一个用数学方式…

Java 将RTF文档转换为Word、PDF、HTML、图片

RTF文档因其跨平台兼容性而广泛使用&#xff0c;但有时在不同的应用场景可能需要特定的文档格式。例如&#xff0c;Word文档适合编辑和协作&#xff0c;PDF文档适合打印和分发&#xff0c;HTML文档适合在线展示&#xff0c;图片格式则适合社交媒体分享。因此我们可能会需要将RT…

【2024年华为OD机试】(C卷,100分)- 攀登者1 (Java JS PythonC/C++)

一、问题描述 题目描述 攀登者喜欢寻找各种地图&#xff0c;并且尝试攀登到最高的山峰。 地图表示为一维数组&#xff0c;数组的索引代表水平位置&#xff0c;数组的元素代表相对海拔高度。其中数组元素0代表地面。 例如&#xff1a;[0,1,2,4,3,1,0,0,1,2,3,1,2,1,0]&…

day06_Spark SQL

文章目录 day06_Spark SQL课程笔记一、今日课程内容二、DataFrame详解&#xff08;掌握&#xff09;5.清洗相关的API6.Spark SQL的Shuffle分区设置7.数据写出操作写出到文件写出到数据库 三、Spark SQL的综合案例&#xff08;掌握&#xff09;1、常见DSL代码整理2、电影分析案例…

Copula算法原理和R语言股市收益率相依性可视化分析

阅读全文&#xff1a;http://tecdat.cn/?p6193 copula是将多变量分布函数与其边缘分布函数耦合的函数&#xff0c;通常称为边缘。在本视频中&#xff0c;我们通过可视化的方式直观地介绍了Copula函数&#xff0c;并通过R软件应用于金融时间序列数据来理解它&#xff08;点击文…

Spring Boot 支持哪些日志框架

Spring Boot 支持多种日志框架&#xff0c;主要包括以下几种&#xff1a; SLF4J (Simple Logging Facade for Java) Logback&#xff08;默认&#xff09;Log4j 2Java Util Logging (JUL) 其中&#xff0c;Spring Boot 默认使用 SLF4J 和 Logback 作为日志框架。如果你需要使…

OpenCV基础:视频的采集、读取与录制

从摄像头采集视频 相关接口 - VideoCapture VideoCapture 用于从视频文件、摄像头或其他视频流设备中读取视频帧。它可以捕捉来自多种源的视频。 主要参数&#xff1a; cv2.VideoCapture(source): source: 这是一个整数或字符串&#xff0c;表示视频的来源。 如果是整数&a…

Uniapp仿ChatGPT Stream流式输出(非Websocket)

Uniapp仿ChatGPT Stream流式输出&#xff08;非Websocket&#xff09; 前言&#xff1a;流式输出可以使用websocket也可以使用stream来实现EventSource是 HTML5 中的一个接口&#xff0c;用于接收服务器发送的事件流&#xff08;Server - Sent Events&#xff0c;SSE&#xff…

《自动驾驶与机器人中的SLAM技术》ch2:基础数学知识

目录 2.1 几何学 向量的内积和外积 旋转矩阵 旋转向量 四元数 李群和李代数 SO(3)上的 BCH 线性近似式 2.2 运动学 李群视角下的运动学 SO(3) t 上的运动学 线速度和加速度 扰动模型和雅可比矩阵 典型算例&#xff1a;对向量进行旋转 典型算例&#xff1a;旋转的复合 2.3 …