_IO 变量的作用

什么是_IO变量:
_IO为volatile变量,volatile 影响编译器编译的结果, 指出:volatile 变量是随时可能发生变化的,与volatile变量有关的运算,不要进行编译优化,以免出错。
volatile(即__IO) 告诉编译器变量是随时可能发生变化的,每次使用它的时候必须从变量的地址中读取,因而编译器生成的可执行码会重新变量的地址读取数据。而如果没有使用__IO,编译器优化做法是,由于编译器发现两次从i中读数据的代码之间的代码没有对i进行过操作,它会自动把上次读的数据放在k中,而不是重新从i里面读。

使用volatile(即__IO)的情况:

1、中断服务程序中修改的供其它程序检测的变量需要加volatile;
2、多任务环境下各任务间共享的标志应该加volatile;
3、存储器映射的硬件寄存器通常也要加volatile说明,因为每次对它的读写都可能由不同意义。

加深理解:
例如:volatile表明的是该对象可能会有意想不到的改变,例如从一个寄存器读取温度值,它就会不断的改变,频繁的改变一个变量,C编译器会对其做何种优化?
这段代码的目的是用来返指针ptr指向值的平方,但是,由于ptr指向一个volatile型参数,编译器将产生类似下面的代码:

int square(volatile int *ptr)
{
int a,b;
a = *ptr;
b = ptr;
return a * b;
// 中间
ptr的值可能会被寄存器所改变进而导致a,b两个变量不同,得不到a^2这样的结果
}

由于ptr的值可能被意想不到地该变,因此a和b可能是不同的例如可能开始ptr=1,过会*ptr=2了这就会导致a,b两个变量不相同。结果,这段代码可能返不是你所期望的平方值!正确的代码如下:

int square(int *ptr)
{
int a,b;
a = ptr;
b = ptr;
return a * b;
// 这样即使
ptr在函数体内发生相应改变编译器也会进行优化使得
ptr在函数内不会发生改变,最终a,b值相同,这也就是我们所期望的a^2
}
这样的返回值就永远是一个定值的平方了,也就符合本意了。

  • 12
    点赞
  • 57
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
### 回答1: __io_putchar() is a low-level function in C programming language that is used to output a character to a stream. It is typically used in embedded systems where standard input/output libraries are not available. The function takes a single argument, which is the character to be outputted. The output location is system-dependent and may be redirected to a console or another output device. Here is an example implementation of the __io_putchar() function: ``` int __io_putchar(int ch) { // Implementation specific code to output 'ch' to a stream return ch; } ``` It is worth noting that this function is not part of the standard C library, and its usage may vary depending on the target system. ### 回答2: __io_putchar()是一个在嵌入式系统中用于输出字符的函数。在编写嵌入式程序的过程中,我们经常需要在终端或者其他输出设备上显示一些提示信息、调试信息或者其他相关内容。__io_putchar()函数允许我们将字符输出到指定的设备上。 这个函数的功能比较简单,它接受一个字符作为参数,并将该字符输出到预先设置好的输出设备中。输出设备可以是终端、串行通信口、LCD显示屏等等,具体取决于系统的设计和需求,使用者可以根据自己的需要去实现这个函数。 在很多嵌入式系统中,为了方便调试和查看程序的运行情况,通常会将__io_putchar()函数与printf()函数结合使用。我们可以在程序中使用printf()函数输出一些需要显示的信息,而printf()函数内部会调用__io_putchar()函数将每个字符逐个输出到设备上。这样,我们就可以通过终端或者其他设备实时地查看程序的输出结果,从而进行问题排查和调试工作。 总的来说,__io_putchar()是一个嵌入式系统中用于输出字符的函数,它能够将指定的字符输出到预先设置好的输出设备中,方便我们在开发和调试过程中查看程序输出的结果。 ### 回答3: __io_putchar()是一个用于输出单个字符的函数,通常在嵌入式系统中使用。它可以将一个字符写入到标准输出设备,如终端窗口或串行端口。 该函数的原型可能类似于以下形式: void __io_putchar(uint8_t ch) 其中,ch是要输出的字符的ASCII码或Unicode码。该函数将字符输出到与系统标准输出设备相连的硬件接口。 __io_putchar()函数在编写驱动程序或系统初始化代码时非常有用。嵌入式系统通常没有标准的终端窗口,因此需要使用特定的IO函数来进行串口或显示屏的输出。 例如,当我们需要在嵌入式系统的串口上输出一个字符时,可以使用__io_putchar()函数。该函数将字符写入串口数据寄存器,从而将其发送到串口线路上。 在使用__io_putchar()函数时,需要根据具体的嵌入式系统和编译器进行相应的配置和适配。这可能包括定义硬件接口、初始化串口等操作。 总之,__io_putchar()是一个用于在嵌入式系统中输出单个字符的函数,它可以通过特定的IO操作将字符发送到标准输出设备。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值