55-第八章 IO库

本文详细介绍了C++中的标准IO库,包括iostream用于标准输入输出,fstream用于文件读写,以及sstream用于字符串流操作。重点讲解了istream、ostream、cin、cout、cerr的基本使用,以及如何利用>>和<<进行数据读写。同时,还提到了getline函数在读取字符串时的作用。通过学习,读者将掌握C++中IO流的基本操作和应用场景。
摘要由CSDN通过智能技术生成

前面章节已经在用的IO库设施

  • istream:输入流类型,提供输入操作。
  • ostream:输出流类型,提供输出操作。
  • cin:一个istream对象,从标准输入读取数据。
  • cout:一个ostream对象,向标准输出写入数据。
  • cerr:一个ostream对象,向标准错误写入消息。
  • >>运算符:用来从一个istream对象中读取输入数据。
  • <<运算符:用来向一个ostream对象中写入输出数据。
  • getline函数:从一个给定的istream对象中读取一行数据,存入到一个给定的string对象中。

IO类

标准库定义的IO类型

  • iostream头文件:从标准流中读写数据,istreamostream等。
  • fstream头文件:从文件中读写数据,ifstreamofstream等。
  • sstream头文件:从字符串中读写数据,istringstreamostringstream

IO对象不可复制或赋值

  • IO对象不能存在容器里。
  • 形参和返回类型也不能是流类型。
  • 形参和返回类型一般是流的引用。
  • 读写一个IO对象会改变其状态,因此传递和返回的引用不能是const的。
以下是一个基本的Verilog代码,用于实现以0xFF为头包,波特率为9600,接收并发送四个字节的操作: ``` module uart_tx_rx( input clk, input rstn, input rx, output reg tx, inout [7:0] io_data ); reg [2:0] bit_count; reg [7:0] rx_data; reg rx_start; reg rx_done; reg [1:0] tx_state; reg [7:0] tx_data; reg [4:0] tx_bit_count; reg tx_done; // RX always @(posedge clk) begin if (!rstn) begin bit_count <= 0; rx_data <= 8'h00; rx_start <= 0; rx_done <= 0; end else if (rx_start) begin if (bit_count < 8) begin rx_data[bit_count] <= rx; bit_count <= bit_count + 1; end else begin rx_done <= 1; rx_start <= 0; bit_count <= 0; end end else if (rx && !rx_done && !rx_start) begin rx_start <= 1; end end // TX always @(posedge clk) begin if (!rstn) begin tx_state <= 0; end else begin case(tx_state) 0: begin if (rx_done && (rx_data == 8'hFF)) begin // 接收头包 tx_state <= 1; tx_data <= 8'h55; // 发送0x55 tx_done <= 0; tx_bit_count <= 0; end end 1: begin if (tx_bit_count < 8) begin tx <= tx_data[tx_bit_count]; tx_bit_count <= tx_bit_count + 1; end else begin tx_bit_count <= 0; tx_state <= 2; end end 2: begin if (tx_bit_count < 8) begin tx <= io_data[tx_bit_count]; tx_bit_count <= tx_bit_count + 1; end else begin tx_bit_count <= 0; tx_state <= 3; end end 3: begin if (tx_bit_count < 8) begin tx <= io_data[tx_bit_count]; tx_bit_count <= tx_bit_count + 1; end else begin tx_bit_count <= 0; tx_state <= 4; end end 4: begin if (tx_bit_count < 8) begin tx <= io_data[tx_bit_count]; tx_bit_count <= tx_bit_count + 1; end else begin tx_bit_count <= 0; tx_state <= 5; end end 5: begin if (tx_bit_count < 8) begin tx <= io_data[tx_bit_count]; tx_bit_count <= tx_bit_count + 1; end else begin tx_done <= 1; tx_state <= 6; end end 6: begin if (tx_done) begin tx_state <= 0; end end endcase end end endmodule ``` 该代码使用了两个状态机:一个用于接收四个字节的数据包,另一个用于发送接收到的数据包。其中,发送状态机的第一个状态用于检测头包。如果接收头包,发送状态机将进入第二个状态,发送0x55。然后,它将进入三个连续的状态,将接收到的四个字节写入IO口。最后,它将进入一个完成状态,并在下一个时钟周期中返回状态机的起始状态。 请注意,这是一个基本版本的代码,实际上可能需要进行一些更改以实现特定的应用程序要求(例如,数据包结构可能需要更改或波特率可能需要更改)。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

liufeng2023

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

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

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

打赏作者

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

抵扣说明:

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

余额充值