/** * @ingroup gdb_stub * * This function will get GDB stubs started, with a proper environment */ void gdb_start() { if (gdb_dev == RT_NULL) rt_kprintf("GDB: no gdb_dev found,please set it first\n"); else gdb_breakpoint(); }
//Init function void ICACHE_FLASH_ATTR user_init() { // uart_init(BIT_RATE_115200, BIT_RATE_115200); os_printf("Blinky, SDK version:%s\n", system_get_sdk_version()); gdb_stub_init(); // Initialize the GPIO subsystem. gpio_init(); //Set GPIO2 to output mode PIN_FUNC_SELECT(PERIPHS_IO_MUX_GPIO2_U, FUNC_GPIO2); //Set GPIO2 low gpio_output_set(0, BIT2, BIT2, 0); //Disarm timer os_timer_disarm(&some_timer); //Setup timer os_timer_setfn(&some_timer, (os_timer_func_t *)some_timerfunc, NULL); //Arm the timer //&some_timer is the pointer //1000 is the fire time in ms //0 for once and 1 for repeating os_timer_arm(&some_timer, 1000, 1); //Start os task system_os_task(user_procTask, user_procTaskPrio,user_procTaskQueue, user_procTaskQueueLen); gdb_breakpoint(); }
enum mi_cmd_result mi_cmd_break_insert (char *command, char **argv, int argc) { char *address = NULL; enum bp_type type = REG_BP; int temp_p = 0; int thread = -1; int ignore_count = 0; char *condition = NULL; enum gdb_rc rc; struct gdb_events *old_hooks; enum opt { HARDWARE_OPT, TEMP_OPT /*, REGEXP_OPT */ , CONDITION_OPT, IGNORE_COUNT_OPT, THREAD_OPT }; static struct mi_opt opts[] = { {"h", HARDWARE_OPT, 0}, {"t", TEMP_OPT, 0}, {"c", CONDITION_OPT, 1}, {"i", IGNORE_COUNT_OPT, 1}, {"p", THREAD_OPT, 1}, 0 }; /* Parse arguments. It could be -r or -h or -t, <location> or ``--'' to denote the end of the option list. */ int optind = 0; char *optarg; while (1) { int opt = mi_getopt ("mi_cmd_break_insert", argc, argv, opts, &optind, &optarg); if (opt < 0) break; switch ((enum opt) opt) { case TEMP_OPT: temp_p = 1; break; case HARDWARE_OPT: type = HW_BP; break; #if 0 case REGEXP_OPT: type = REGEXP_BP; break; #endif case CONDITION_OPT: condition = optarg; break; case IGNORE_COUNT_OPT: ignore_count = atol (optarg); break; case THREAD_OPT: thread = atol (optarg); break; } } if (optind >= argc) error ("mi_cmd_break_insert: Missing <location>"); if (optind < argc - 1) error ("mi_cmd_break_insert: Garbage following <location>"); address = argv[optind]; /* Now we have what we need, let's insert the breakpoint! */ old_hooks = set_gdb_event_hooks (&breakpoint_hooks); switch (type) { case REG_BP: rc = gdb_breakpoint (address, condition, 0 /*hardwareflag */ , temp_p, thread, ignore_count); break; case HW_BP: rc = gdb_breakpoint (address, condition, 1 /*hardwareflag */ , temp_p, thread, ignore_count); break; #if 0 case REGEXP_BP: if (temp_p) error ("mi_cmd_break_insert: Unsupported tempoary regexp breakpoint"); else rbreak_command_wrapper (address, FROM_TTY); return MI_CMD_DONE; break; #endif default: internal_error (__FILE__, __LINE__, "mi_cmd_break_insert: Bad switch."); } set_gdb_event_hooks (old_hooks); if (rc == GDB_RC_FAIL) return MI_CMD_CAUGHT_ERROR; else return MI_CMD_DONE; }