预处理器的小结


1.对程序作预处理前,编译器会对它进行几次翻译处理。
   。首先把源代码中出现的字符映射到源字符集。
   。编译器查找反斜线后紧跟换行符的实例并删除这些实例。
   。编译器将文本划分成预处理的预言符号序列和空白字符及注释序列。注意的一点是编译器用一个空白字符代替每一个注释。
2.预处理器不进行计算,它只是按照指令进行文字替换操作。
3.宏常量可以用来指定标准数组的大小并作为const值得初始化值。(以下只限在c中,不限在c++中)
   。#define LIMIT 20
   。const int LIM=50;
   。static int data1[LIMIT];//合法
   。static int data2[LIM];  //无效
   。const int LIM2=2*LIMIT;//合法
   。const int LIM3=2*LIM;   //无效
4.在处理主体中的多个空格时,字符型字符串和语言符号类型字符串采用不同的方法。用字符型字符串的观点来看,空格也是主体的一部分;而用语言符号类型字符串的观点看,空格只是分割主体中语言符号的符号。
5.程序运行时,函数调用把参数的值传递给函数。而编译前,宏调用把参数的语言符号传递给程序。
6.在宏中最好不要使用增量或减量运算符。
7.在类函数宏的替换部分中,#符号用作一个预处理运算符,可以把语言符号转换成字符串;##运算符把两个语言符号组合成单个语言符号。
8.头文件stdvar.h提供了创建用户自定义的带可变数量参数的函数的工具。
9.宏与函数之间的选择实际上是时间与空间上的权衡,宏产生内联代码。
### 中断的概念与总结 #### 什么是中断? 中断是一种机制,允许外部设备或内部事件打断处理器当前正在执行的任务,并请求立即处理特定事务。这种机制提高了系统的响应速度和效率[^1]。 #### 中断的工作流程 当一个中断被触发时,CPU会暂停当前的程序运行,保存上下文环境(通常是寄存器状态),跳转到对应的中断服务函数(Interrupt Service Routine, ISR)进行处理,在完成ISR后恢复之前的状态并继续原来的任务[^1]。 #### STM32中的中断配置要素 在STM32微控制器中,配置中断涉及以下几个关键方面: - **使能某个中断**:通过相应的外设控制寄存器开启该外设的中断功能。 - **中断分组**:STM32采用可嵌套向量中断控制器(NVIC),支持抢占优先级和子优先级的划分,用于决定多个中断之间的调度顺序。 - **初始化 NVIC 结构体**:利用 `NVIC_InitTypeDef` 定义所需的参数来设定具体的中断属性。 - **设置中断源**:指定哪个硬件模块或者信号作为引发此中断的原因。 - **设置抢占优先级和子优先级**:定义不同级别的重要性以便合理安排资源分配给各个可能发生的异常情况。 - **配置中断使能/失能**:启用或禁用某类中断的发生效果。 - **编写中断服务函数**:实现具体逻辑操作以应对所期望的行为模式变化[^1]。 以下是简单的代码示例展示如何初始化定时器 TIM2 的更新事件产生的溢出中断: ```c #include "stm32f10x.h" void TIM2_IRQHandler(void){ if(TIM_GetITStatus(TIM2,TIM_IT_Update)!=RESET){ // 清除标志位 TIM_ClearITPendingBit(TIM2,TIM_IT_Update); // 用户自定义动作... } } int main(){ NVIC_InitTypeDef NVIC_InitStructure; RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2 , ENABLE); TIM_TimeBaseInitTypeDef timerInitStructure; timerInitStructure.TIM_Period = 999; /* 自动重装载值 */ timerInitStructure.TIM_Prescaler = 7199; /* 预分频系数 */ ... TIM_ITConfig(TIM2,TIM_IT_Update,ENABLE); NVIC_InitStructure.NVIC_IRQChannel = TIM2_IRQn; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority= 0;// 抢占优先级最高 NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;// 子优先级相同 NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStructure); while(1){} } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值