嵌入式C基础知识(7)

本文讨论了嵌入式C编程中的关键概念,包括ISR的参数与返回值、extern关键字的作用、局部变量与全局变量的重名处理、中断延迟的解释以及减少中断延迟的方法。此外,还讲解了C语言中的声明与定义的区别,引用与指针的差异,以及C语言变量的基础知识。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

是否可以传递任何参数并从 ISR 返回值

不可以。不能传递任何参数并从 ISR 返回值。 ISR 不返回任何内容,并且不允许传递任何参数。 当硬件或软件事件发生时调用 ISR,而代码不会调用它。 这就是为什么不向 ISR 传递参数的原因。 由于代码不调用 ISR,因此没有调用代码来读取 ISR 的返回值。 这就是 ISR 不返回任何值的原因。

extern 关键字的作用

在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

C语言中的声明和定义

函数和变量的声明不会分配内存,但定义会分配相应的内存空间。

函数和变量的声明可以有很多次,但定义只有一次。

函数的定义和声明方式都是默认extern的,即函数默认是全局的。可以采用static实现对函数的隐藏。

变量的声明和定义默认都是局部的,在当前编译单元或者文件中可用。

引用与指针有什么区别?

答:

1) 引用必须被初始化,指针不必。

2) 引用初始化以后不能被改变,指针可以改变所指的对象。

3) 不存在指向空值的引用,但是存在指向空值的指针。

如何减少中断延迟?

有几种方法可以减少 Embedded C 中的中断延迟。中断延迟取决于许多因素。 以下是一些因素的列表:

  • 平台和中断控制器

  • CPU时钟速度

  • 定时器频率

  • 缓存配置

  • 应用程序等

因此,可以使用正确选择平台和处理器来轻松降低中断延迟。还可以通过缩短 ISR 并避免在 ISR 中调用函数来减少中断延迟。

C语言的变量

(1) C语言变量的基本类型有哪些?

五种基本类型:char, int, float, double, void. void是空类型,一般用于限制函数的返回和参数以及用来定义空指针。

(2) 局部变量和全局变量区别?

- 生存周期不同:局部变量存在于模块中,生存期从模块开始到结束。

- 存储位置不同:局部变量保存在栈空间内,栈地址是不固定的,由编译器自动分配和释放,全局变量保存在静态存储区的数据段中。

(3) 局部变量和全局变量是否可以重名?

可以,但是局部变量会屏蔽全局变量,如果在程序中使用因为重名被屏蔽的全局变量,需要在变量前加::。

inta=10;intmain(){inta=9;printf("%d\n",a);//输出局部变量

printf("%d\n",::a);//输出全局变量

return0;}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

xiaoyi9812

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值