java16位字符串压缩成8位_在8位UART上发送16位值
首先在中斷例程中使用sprintf是一個(gè)非常糟糕的想法甚至id禁用中斷 . 更糟糕的是將數(shù)據(jù)發(fā)送到那里:)你可能是一個(gè)非常非常初學(xué)者 . 始終保持中斷例程盡可能短 .
將調(diào)試代碼移到中斷之外 .
其次,你只能讀取你在中斷中收到的內(nèi)容(這是一個(gè)字節(jié))而你只讀了兩個(gè) .
最后,我不認(rèn)為 UART_GetByte 被發(fā)明用于中斷例程 . 只需讀取數(shù)據(jù)寄存器即可 .
我個(gè)人更喜歡工會(huì) .
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);
}
}
但請(qǐng)記住 - 當(dāng)您發(fā)送調(diào)試數(shù)據(jù)時(shí) - 許多其他值可能會(huì)出現(xiàn),您可能會(huì)丟失一些東西 . 您需要實(shí)現(xiàn)循環(huán)緩沖區(qū) - 但這超出了此問(wèn)題的范圍 .
總結(jié)
以上是生活随笔為你收集整理的java16位字符串压缩成8位_在8位UART上发送16位值的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: java isodate格式_fmt:f
- 下一篇: mysql查询语句在哪里编写_mysql