不可以。不能传递任何参数并从 ISR 返回值。 ISR 不返回任何内容,并且不允许传递任何参数。 当硬件或软件事件发生时调用 ISR,而代码不会调用它。 这就是为什么不向 ISR 传递参数的原因。 由于代码不调用 ISR,因此没有调用代码来读取 ISR 的返回值。 这就是 ISR 不返回任何值的原因。
在C语言中,修饰符extern用在变量或者函数的声明前,用来说明此函数/变量是在别处定义,但是要再此处引用。注意extern不能用来修饰局部变量。具体应用示例:
在a.c文件中
unsignedcharkey;voidfunc(void){...}
在main.c文件中
#include"a.h"
externunsignedcharkey;externvoidfunc(void);intmain(){if(key=="a")func();return0;}
能,局部会屏蔽全局。
局部变量可以与全局变量同名,在函数内引用这个变量时,会用到同名的局部变量,而不会用到全局变量。
对于有些编译器而言,在同一个函数内可以定义多个同名的局部变量,比如在两个循环体内都定义一个同名的局部变量,而那个局部变量的作用域就在那个循环体内。
中断延迟是处理器响应中断请求所需的时钟周期数。 这个时钟周期数是中断请求的断言和中断处理程序的第一条指令之间的计数。
Cortex-M 处理器系列的中断延迟:
Cortex-M 处理器的中断延迟非常低。 下表显示了具有零等待状态存储器系统的 Cortex-M 处理器的中断延迟。
处理器 | 零等待状态内存的周期 |
Cortex-M0 | 16 |
Cortex-M0+ | 15 |
Cortex-M3 | 12 |
Cortex-M4 | 12 |
Cortex-M7 | 12 |
函数和变量的声明不会分配内存,但定义会分配相应的内存空间。
函数和变量的声明可以有很多次,但定义只有一次。
函数的定义和声明方式都是默认extern的,即函数默认是全局的。可以采用static实现对函数的隐藏。
变量的声明和定义默认都是局部的,在当前编译单元或者文件中可用。
答:
1) 引用必须被初始化,指针不必。
2) 引用初始化以后不能被改变,指针可以改变所指的对象。
3) 不存在指向空值的引用,但是存在指向空值的指针。
有几种方法可以减少 Embedded C 中的中断延迟。中断延迟取决于许多因素。 以下是一些因素的列表:
平台和中断控制器
CPU时钟速度
定时器频率
缓存配置
应用程序等
因此,可以使用正确选择平台和处理器来轻松降低中断延迟。还可以通过缩短 ISR 并避免在 ISR 中调用函数来减少中断延迟。
(1) C语言变量的基本类型有哪些?
五种基本类型:char, int, float, double, void. void是空类型,一般用于限制函数的返回和参数以及用来定义空指针。
(2) 局部变量和全局变量区别?
- 生存周期不同:局部变量存在于模块中,生存期从模块开始到结束。
- 存储位置不同:局部变量保存在栈空间内,栈地址是不固定的,由编译器自动分配和释放,全局变量保存在静态存储区的数据段中。
(3) 局部变量和全局变量是否可以重名?
可以,但是局部变量会屏蔽全局变量,如果在程序中使用因为重名被屏蔽的全局变量,需要在变量前加::。
inta=10;intmain(){inta=9;printf("%d\n",a);//输出局部变量
printf("%d\n",::a);//输出全局变量
return0;}