![](/media/cache/img/default_profile.jpg.50x50_q85.jpg)
For test
ESP8266.cpp
- Committer:
- shennongmin
- Date:
- 2015-01-30
- Revision:
- 4:962bf18523f4
- Parent:
- 1:44f2f0e5d685
File content as of revision 4:962bf18523f4:
#include "ESP8266.h" static Serial uart(p28, p27); static ring_buffer rx_buffer = { { 0 }, 0, 0}; static void write_char(unsigned char c) { int i = (unsigned int)(rx_buffer.head + 1) % SERIAL_BUFFER_SIZE; // if we should be storing the received character into the location // just before the tail (meaning that the head would advance to the // current location of the tail), we're about to overflow the buffer // and so we don't write the character or advance the head. if (i != rx_buffer.tail) { rx_buffer.buffer[rx_buffer.head] = c; rx_buffer.head = i; } } static void uart_irq_callback() { // Note: you need to actually read from the serial to clear the RX interrupt while(uart.readable()) { write_char(uart.getc()); } } int read_char(void) { // if the head isn't ahead of the tail, we don't have any characters if (rx_buffer.head == rx_buffer.tail) { return -1; } else { unsigned char c = rx_buffer.buffer[rx_buffer.tail]; rx_buffer.tail = (unsigned int)(rx_buffer.tail + 1) % SERIAL_BUFFER_SIZE; return c; } } int available(void) { return (unsigned int)(SERIAL_BUFFER_SIZE + rx_buffer.head - rx_buffer.tail) % SERIAL_BUFFER_SIZE; } /** * 使用uart.printf或者uart.puts方法时, 当发送数据大于14个字符时, 就会出现异常(串口不断的输出不可显示的字符) * 因此, 相关字符串的打印使用下面的函数来完成, 虽然很简陋, 但是很管用! */ void uart_send_string(const char *str) { if (!str) return; while(*str) uart.putc(*str++); } void ESP8266_init(void) { uart.attach(&uart_irq_callback); }