java16位字符串压缩成8位_在8位UART上发送16位值

首先在中断例程中使用sprintf是一个非常糟糕的想法甚至id禁用中断 . 更糟糕的是将数据发送到那里:)你可能是一个非常非常初学者 . 始终保持中断例程尽可能短 .

将调试代码移到中断之外 .

其次,你只能读取你在中断中收到的内容(这是一个字节)而你只读了两个 .

最后,我不认为 UART_GetByte 被发明用于中断例程 . 只需读取数据寄存器即可 .

我个人更喜欢工会 .

typedef union

{

uint16_t u16;

int16_t i16;

uint8_t b[2];

}data16;

volatile data16 revcb, tb; // tb can be local and not volatile

volatile int pointer = 0;

volatile int flag = 0;

CY_ISR(UART_ISR){

Status_pin_Write(0xFF); //Used for debugging

revcb.b[pointer] = dataregister; // place the appripriate code here

pointer = ! pointer;

if(!pointer) flag = 1;

Status_pin_Write(0x00);

}

//in the main function

while(1)

{

if(flag)

{

ISR_Rx_Disable(); // make it atomic

tb = recv;

flag = 0;

ISR_Rx_Enable();

sprintf(TransmitBufferUSB,"%d\n\r",tb.u16);

UART_USB_PutString(TransmitBufferUSB);

}

}

但请记住 - 当您发送调试数据时 - 许多其他值可能会出现,您可能会丢失一些东西 . 您需要实现循环缓冲区 - 但这超出了此问题的范围 .

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值