4.7嵌入式课程总结

fprintf函数(格式化输出数据至文件)

表头文件:#include<stdio.h>
定义函数:int fprintf(FILE * stream,constchar * format,…);
函数说明:fprintf()会根据参数format字符串来转换并格式化数据,然后将结果输出到参数stream指定的文件中,直到出现字符串(’\0’)为止。
返回值:成功则返回实际输出的字符数,失败则返回-1,错误原因存于errno中
Linux进程控制编程
进程是一个具有一定独立功能的程序的一次运行活动,同时也是资源分配的最小单元

进程和程序:

进程是动态的,程序是静态的:程序是有序代码的集合;进程是程序的执行。通常进程不可在计算机之间迁移;而程序通常对应着文件、静态和可以复制。
进程是暂时的,程序是长久的:进程是一个状态变化的过程,程序可长久保存。
进程和程序组成不同:进程的组成包括程序、数据和进程控制块(即进程状态信息)。
进程和程序的对应关系:通过多次执行,一个程序可以对应多个进程;通过调用关系,一个进程可以包括多个程序

进程的生命周期:

创建:每个进程都是由其父进程创建,进程可以创建子进程,子进程又可以创建子进程的子进程
运行:多个进程可以同时存在,进程间可以通信
撤销:进程可以被撤销,从而结束一个进程的运行
Linux系统是一个多进程的系统,它的进程之间具有并行性,互不干扰等特点。也就是说,每个进程都是一个独立的运行单位,拥有各自的权利和责任。其中,各个进程都运行在独立的虚拟地址空间,因此,即使一个进程发生异常,它也不会影响到系统中的其他进程。
Linux中的进程包含三个段,分别为“数据段”,”代码段“和“堆栈段”
数据段存放的是全局变量,常数以及动态数据分配的数据空间
代码段存放的是程序代码的数据、
堆栈段存放的是子程序的返回地址、子程序的参数以及程序的局部变量等。
进程ID(PID):标识进程的唯一数字
父进程的ID(PPID)
启动进程的用户ID(UID)
进程互斥是指当有若干进程都要使用某一共享资源时,任何时刻最多允许一个进程使用,其他要使用该资源的进程必须等待,直到占用该资源这释放了该资源为止。
操作系统中将一次只允许一个进程访问的资源称为临界资源
进程同步:一组并发进程按一定的顺序执行的过程称为进程间的同步,具有同步关系的一组并发进程称为合作进程,合作进程间互相发送的信息称为消息或事件
死锁:多个进程因竞争资源而形成一种僵局,若无外力作用,这些进程将永远不能再向前推进

获取ID

#include<sys/types.h>
#include<unistd.h>
pid_t getpid(void)获取本进程ID
pid_t getppid(void)获取父进程ID

进程创建

#include<unistd.h>
pid_t fork(void)
功能:创建子进程,fork的奇妙之处在于它被调用一次,却返回两次,它可能有三种不同的返回值。
返回值为0时是子进程,返回值大于0时是父进程,返回值是-1时是出错
pit_t vfork(void)
vfork()会产生一个新的子进程,其子进程会复制父进程的数据和堆栈空间,并继承父进程的用户代码,组代码,环境变量,已打开文件代码,工作目录和资源限制等。
子进程不会继承父进程的文件锁定和未处理的信号。
注意linux不保证子进程会比父进程先执行或晚执行,因此编写程序时要注意死锁或竞争条件的发生

exec函数族

#include<unistd.h>
int execl(const char * path,const char * arg1…)
参数:path:被执行程序名(含完整路径)
arg1~argn:被执行程序所需的命令行参数

【电力系统】单机无穷大电力系统短路故障暂态稳定Simulink仿真(带说明文档)内容概要:本文档围绕“单机无穷大电力系统短路故障暂态稳定Simulink仿真”展开,提供了完整的仿真模型与说明文档,重点研究电力系统在发生短路故障后的暂态稳定性问题。通过Simulink搭建单机无穷大系统模型,模拟不同类型的短路故障(如三相短路),分析系统在故障期间及切除后的动态响应,包括发电机转子角度、转速、电压和功率等关键参数的变化,进而评估系统的暂态稳定能力。该仿真有助于理解电力系统稳定性机理,掌握暂态过程分析方法。; 适合人群:电气工程及相关专业的本科生、研究生,以及从事电力系统分析、运行与控制工作的科研人员和工程师。; 使用场景及目标:①学习电力系统暂态稳定的基本概念与分析方法;②掌握利用Simulink进行电力系统建模与仿真的技能;③研究短路故障对系统稳定性的影响及提高稳定性的措施(如故障清除时间优化);④辅助课程设计、毕业设计或科研项目中的系统仿真验证。; 阅读建议:建议合电力系统稳定性理论知识进行学习,先理解仿真模型各模块的功能与参数设置,再运行仿真并仔细分析输出果,尝试改变故障类型或系统参数以观察其对稳定性的影响,从而深化对暂态稳定问题的理解。
<think>好的,我现在需要帮助用户找到嵌入式温度传感器相关的实验源码。首先,用户明确提到了嵌入式系统、温度传感器、实验源码、代码示例,所以我要围绕这些关键词来整理信息。 首先,我应该回忆一下常见的温度传感器类型,比如DS18B20、LM35、NTC热敏电阻等。这些传感器在Arduino和STM32等平台上应用广泛,所以可能需要提供不同平台的代码示例。根据用户提供的引用,引用1提到DS18B20,引用2是NTC,引用3和4是LM35和STM32的ADC应用,所以这些应该作为重点。 接下来,我需要考虑用户可能的实际需求。他们可能是在做课程设计、毕业设计或者个人项目,需要具体的代码示例和硬件连接说明。因此,我应该分不同传感器和平台来组织内容,比如分为Arduino和STM32两部分,每种传感器给出代码片段和简要说明。 然后,我需要确保代码的正确性。例如,DS18B20需要单总线协议,可能需要使用OneWire库和DallasTemperature库。LM35是模拟输出,直接接ADC引脚,转换公式需要注意。NTC热敏电阻则需要分压电路和Steinhart-Hart方程来计算温度,这部分可能需要用户根据具体电阻参数调整。 另外,用户可能需要了解如何连接硬件,所以每个示例都需要硬件连接步骤,比如引脚连接、是否需要上拉电阻等。同时,注意事项也很重要,比如供电电压、传感器的线性范围、代码中的延迟是否影响实时性等。 还要考虑扩展应用,比如用户可能希望将温度数据上传到服务器或连接显示屏,所以在总部分可以提到这些可能性,引导用户进一步开发。 最后,生成相关问题,帮助用户深入理解,比如不同传感器的优缺点、如何提高精度、多传感器使用等。这些问题需要与用户的实际应用相关,能够帮助他们解决后续可能遇到的问题。 现在需要检查是否有遗漏的部分,比如代码是否完整,语法是否正确,是否遵循了用户要求的格式,比如行内公式用$...$,独立公式用$$...$$。例如,NTC部分中的Steinhart-Hart方程可能需要用独立公式,而ADC转换可能需要行内变量说明。 总之,我需要将信息构化,分平台和传感器类型,提供清晰的代码和说明,并附上相关的问题,确保用户能够顺利找到所需的源码并理解其实现。</think>根据您的需求,我整理了嵌入式系统中常见的温度传感器实验源码示例,涵盖DS18B20、LM35和NTC热敏电阻三种传感器,涉及Arduino和STM32平台。 --- ### 一、DS18B20数字温度传感器(Arduino) ```cpp #include <OneWire.h> #include <DallasTemperature.h> #define ONE_WIRE_BUS 2 // 数据线接数字引脚2 OneWire oneWire(ONE_WIRE_BUS); DallasTemperature sensors(&oneWire); void setup() { Serial.begin(9600); sensors.begin(); } void loop() { sensors.requestTemperatures(); float temp = sensors.getTempCByIndex(0); Serial.print("Temperature: "); Serial.print(temp); Serial.println("°C"); delay(1000); } ``` **硬件连接**: - DS18B20的VDD接5V - GND接GND - DQ引脚接数字引脚2+4.7KΩ上拉电阻 --- ### 二、LM35模拟温度传感器(STM32 HAL库) ```c // 在main.c中添加 float Read_Temperature() { HAL_ADC_Start(&hadc1); // 启动ADC转换 HAL_ADC_PollForConversion(&hadc1, 100); // 等待转换完成 uint32_t adc_value = HAL_ADC_GetValue(&hadc1); return (adc_value * 3.3 / 4095) * 100; // LM35输出电压与温度关系:10mV/°C } int main(void) { while (1) { float temp = Read_Temperature(); printf("Temperature: %.2f°C\n", temp); HAL_Delay(1000); } } ``` **配置要点**: 1. 在CubeMX中配置ADC通道(如PA0) 2. 设置ADC分辨率为12位(0-4095) 3. 参考电压需与实际供电电压一致[^4] --- ### 三、NTC热敏电阻(Arduino) ```cpp const int NTC_PIN = A0; const float BETA = 3950.0; // B值参数 const float R0 = 10000.0; // 25℃时的电阻值 void setup() { Serial.begin(9600); } void loop() { int raw = analogRead(NTC_PIN); float voltage = raw * 5.0 / 1023.0; float R = (5.0 - voltage) * 10000.0 / voltage; // 分压电路计算 // 使用Steinhart-Hart方程 float tempK = 1 / (1/(25+273.15) + (1/BETA)*log(R/R0)); float tempC = tempK - 273.15; Serial.print("Temperature: "); Serial.print(tempC); Serial.println("°C"); delay(1000); } ``` **计算公式**: $$ \frac{1}{T} = \frac{1}{T_0} + \frac{1}{B} \ln\left(\frac{R}{R_0}\right) $$ 其中$T_0=298.15K$(25℃)[^2] --- ### 四、注意事项 1. DS18B20需要严格遵循单总线时序 2. LM35输出电压范围0-1.5V(0-150℃) 3. NTC需要根据实际参数调整B值和R0 4. ADC采样时建议做滑动平均滤波 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值