时间触发嵌入式系统设计模式 第18章 笔记 通过RS-232与 PC通信

时间触发嵌入式系统设计模式 第18章 笔记

在这里插入图片描述

在这里插入图片描述

PC上 软件 例子:
参考 : Axelson(1998)
Serial Port Complete: Programming and Circuits for Rs-232 and Rs-485 Links and Networks

在这里插入图片描述

在这里插入图片描述

E:\Nu_LB_Nuc140\Nu_LB_NUC140_BSP\SampleCode\Nu-LB-NUC140\Sched_PC_UART_Menu

代码:

2 实现方式 用到了 循环缓冲区

没有用到 串口中断,
是通过轮询的方式,将缓冲区中的数据通过串口一个一个发送出去的。

static unsigned char Recv_buffer[RECV_BUFFER_LENGTH];
static unsigned char Tran_buffer[TRAN_BUFFER_LENGTH];
//PC_LINK_Get_Char的返回值,如果缓冲区中没有字符

/*------------------------------------------------------------------*-

  PC_LINK_IO_Update()

 在 UART (硬件)接收缓冲区中检查字符发送软件,发送缓冲区中的下一个字符
  
-*------------------------------------------------------------------*/
void PC_LINK_IO_Update(void)
{


	// 这里处理发送字节
   // 是否有数据准备发送 ?
   if (Out_written_index_G < Out_waiting_index_G)
   {				
			if( UART_IS_TX_EMPTY(UART0) == 1){
				
				  PC_LINK_IO_Send_Char(Tran_buffer[Out_written_index_G]); 							
					Out_written_index_G++;
			}
			   
   }
   else
   {
      // 没有数据需要发送- 仅仅复位缓冲区指针
      Out_waiting_index_G = 0;
      Out_written_index_G = 0;
   }

   // 这里只处理接收字节
   // -> 检查 RI 标志
   if (UART_IS_RX_READY(UART0) == 1)
      {
      // 只有当接收到一个有效的停止位时 ,接收标志RI才置1 
      // -> 已有数据需要被读取到接收缓冲区中,

      // 如果旧的数据已经读取,希望读取指针 0
      // (简单的循环缓冲区)
      if (In_waiting_index_G == In_read_index_G)
         { 
         In_waiting_index_G = 0;
         In_read_index_G = 0;
         } 
      
      // 从USART 缓冲区中读取数据   
      Recv_buffer[In_waiting_index_G] = UART_READ(UART0);

      if (In_waiting_index_G < RECV_BUFFER_LENGTH)
         {
         // 加1 且缓冲区不溢出
         In_waiting_index_G++;
         }
    

      }
			

			
   }

In_waiting_index_G 进入buffer的字符索引
In_read_index_G 从buffer读出的索引
循环缓冲区,当In_waiting_index_G == In_read_index_G 的时候,设置为0

(稍后补充)— 需要针对 循环缓冲区的实现 整理一个文档

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值