void hal_diag_write_char(char c) { #ifdef CYGDBG_DIAG_BUF diag_putc(c); if (!enable_diag_uart) return; #endif // CYGDBG_DIAG_BUF hal_diag_write_char_serial(c); }
static ssize_t diag_write(struct idesc *data, const void *buf, size_t nbyte) { char *cbuf = (char *) buf; while (nbyte--) { diag_putc(*cbuf++); } return (void *) cbuf - buf; }
static size_t diag_write(const void *buff, size_t size, size_t count, void *file) { size_t cnt = 0; char *b = (char*) buff; while (cnt != count * size) { diag_putc(b[cnt++]); } return cnt; }
void main(void) { ulong cnt = 0; while (1) { cnt++; timer(HZ, timer_action, &cnt); idle(); diag_putc('.'); } }
void diag_hexval(unsigned long val) { int n; for (n = sizeof(val)*2; n--;) { unsigned int d = (val >> (4*n)) & 0xf; if (d > 9) d += 'A' - 10; else d += '0'; diag_putc(d); } }
int main() { uint8_t r = 0; diag_init(); BSP_PB_Init(0, 0); new_task(0, led_handler, NULL); while (1) { int state = BSP_PB_GetState(0); if (state) { r++; r %= 8; } ksleep(100); diag_putc(r); ksleep(100); } return 0; }
void hal_diag_write_char(char c) { static char line[100]; static int pos = 0; #ifdef CYGDBG_DIAG_BUF diag_putc(c); if (!enable_diag_uart) return; #endif // CYGDBG_DIAG_BUF // No need to send CRs if( c == '\r' ) return; line[pos++] = c; if( c == '\n' || pos == sizeof(line) ) { CYG_INTERRUPT_STATE old; // Disable interrupts. This prevents GDB trying to interrupt us // while we are in the middle of sending a packet. The serial // receive interrupt will be seen when we re-enable interrupts // later. #ifdef CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS CYG_HAL_GDB_ENTER_CRITICAL_IO_REGION(old); #else HAL_DISABLE_INTERRUPTS(old); #endif while(1) { static char hex[] = "0123456789ABCDEF"; cyg_uint8 csum = 0; int i; hal_diag_write_char_serial('$'); hal_diag_write_char_serial('O'); csum += 'O'; for( i = 0; i < pos; i++ ) { char ch = line[i]; char h = hex[(ch>>4)&0xF]; char l = hex[ch&0xF]; hal_diag_write_char_serial(h); hal_diag_write_char_serial(l); csum += h; csum += l; } hal_diag_write_char_serial('#'); hal_diag_write_char_serial(hex[(csum>>4)&0xF]); hal_diag_write_char_serial(hex[csum&0xF]); #ifndef CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT // only gobble characters if no interrupt handler to grab ^Cs // is installed (which is exclusive with device driver use) // Wait for the ACK character '+' from GDB here and handle // receiving a ^C instead. This is the reason for this clause // being a loop. c = cyg_hal_plf_serial_getc(eppc); if( c == '+' ) break; // a good acknowledge #if 0 if( c1 == 3 ) { // Ctrl-C: breakpoint. breakpoint(); break; } #endif // otherwise, loop round again #else break; #endif } pos = 0; // And re-enable interrupts #ifdef CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS CYG_HAL_GDB_LEAVE_CRITICAL_IO_REGION(old); #else HAL_RESTORE_INTERRUPTS(old); #endif }