void init_uart_buffer(void) c30_cbuf_init(&uart_rx, uart_rx_buf, 64);
// Interrupt-safe get inline int c30_cbuf_get(c30_cbuf_t *cb, unsigned char *data) if (cb->head == cb->tail) return -1; // empty
// ------------------------------------------------------------ // 3. ISR MACRO (fixes C30's verbose/error-prone vector syntax) // ------------------------------------------------------------ #define INTERRUPT(vector, priority) void ((interrupt, auto_psv)) _ ## vector (void)
cb->buffer[cb->head] = data; cb->head = next_head; return 0;
int main() init_uart_buffer(); unsigned char ch; while (1) if (c30_cbuf_get(&uart_rx, &ch) == 0) // process byte
void init_uart_buffer(void) c30_cbuf_init(&uart_rx, uart_rx_buf, 64);
// Interrupt-safe get inline int c30_cbuf_get(c30_cbuf_t *cb, unsigned char *data) if (cb->head == cb->tail) return -1; // empty
// ------------------------------------------------------------ // 3. ISR MACRO (fixes C30's verbose/error-prone vector syntax) // ------------------------------------------------------------ #define INTERRUPT(vector, priority) void ((interrupt, auto_psv)) _ ## vector (void)
cb->buffer[cb->head] = data; cb->head = next_head; return 0;
int main() init_uart_buffer(); unsigned char ch; while (1) if (c30_cbuf_get(&uart_rx, &ch) == 0) // process byte