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);
}
}
但請記住 - 當您發送調試數據時 - 許多其他值可能會出現,您可能會丟失一些東西 . 您需要實現循環緩沖區 - 但這超出了此問題的范圍 .
總結
以上是生活随笔為你收集整理的java16位字符串压缩成8位_在8位UART上发送16位值的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java isodate格式_fmt:f
- 下一篇: java改变this指向_$.on()方