feat(esp8266): Add "putc" and "vprintf" of version "ets_"

This commit is contained in:
Dong Heng
2018-05-25 17:01:50 +08:00
parent 316a44f3c3
commit e15f211d46
5 changed files with 45 additions and 87 deletions

View File

@ -12,83 +12,11 @@
// See the License for the specific language governing permissions and
// limitations under the License.
#include <string.h>
#include "esp_attr.h"
#include "esp_libc.h"
#include "esp8266/ets_sys.h"
#include "esp8266/eagle_soc.h"
#include "esp8266/uart_register.h"
#include "freertos/portmacro.h"
/*
* Todo: panic output UART ID, we may add it to 'kconfig' to select target UART.
*/
#define PANIC_UART 0
/*
* @brief output a character
*
* @param c a character
*
* @return none
*/
static IRAM_ATTR void panit_putc(char c)
{
while (1) {
uint32_t fifo_cnt = READ_PERI_REG(UART_STATUS(PANIC_UART)) & (UART_TXFIFO_CNT << UART_TXFIFO_CNT_S);
if ((fifo_cnt >> UART_TXFIFO_CNT_S & UART_TXFIFO_CNT) < 126)
break;
}
WRITE_PERI_REG(UART_FIFO(PANIC_UART) , c);
}
/*
* @brief output a left-aligned string
*
* @param s string pointer
* @param left_aligned left-aligned bytes
*
* @return none
*/
static IRAM_ATTR void panic_puts(const char *s, int left_aligned)
{
int bytes = left_aligned - strlen(s);
while (bytes-- > 0)
panit_putc(' ');
while (*s)
panit_putc(*s++);
}
/*
* @brief output a hex value string of 32-bites data
*
* @param hex 32-bites data
*
* @return none
*/
static IRAM_ATTR void panic_puthex(int hex)
{
char buf[8];
int bytes = 0;
while (bytes < 8) {
char c = (uint32_t)hex % 16;
if (c < 10)
c = c + '0';
else
c = c - 10 + 'a';
buf[bytes++] = c;
hex >>= 4;
}
while (bytes)
panit_putc(buf[--bytes]);
}
#include "esp8266/ets_sys.h"
/*
* @brief output xtensa register value map when crash
@ -114,12 +42,9 @@ void IRAM_ATTR panicHandler(void *frame)
for (x = 0; x < 20; x += 4) {
for (y = 0; y < 4; y++) {
panic_puts(sdesc[x + y], 8);
panic_puts(": 0x", 0);
panic_puthex(regs[x + y + 1]);
panic_puts(" ", 0);
ets_printf("%8s: 0x%08x ", sdesc[x + y], regs[x + y + 1]);
}
panit_putc('\n');
ets_printf("\n");
}
/*