Example #1
0
void dump_code_vars()
{
  int i;
  GtkTextIter aniter;
  GtkTextMark *mark;
  GdkRectangle coderect;
  int vbuf_start, vbuf_end;

  printf("+++ CODE +++\n");
  printf("selected_code_line=%d, Selected_Code_Addr=%04X, Code_Selected=%d\n",
         selected_code_line, Selected_Code_Addr, Code_Selected);
  printf("ram=%04X, SP=%04X, PC=%04X\n",
	(WORD)ram, (WORD)(STACK - ram),
	(WORD)(PC - ram));
  do_break("\n");
//  printf("Codeline table\n"); 
//  for (i = 0; i < 4; i++) 
//    printf("addr=%04X line=%d\n", i, codelines[i]);
  gtk_text_view_get_visible_rect(GTK_TEXT_VIEW(codetext), &coderect);
  gtk_text_view_get_line_at_y(GTK_TEXT_VIEW(codetext),
		&aniter, coderect.y, NULL);
  vbuf_start = gtk_text_iter_get_line(&aniter);
  gtk_text_view_get_line_at_y(GTK_TEXT_VIEW(codetext),
		&aniter, coderect.y+coderect.height, NULL);
  vbuf_end = gtk_text_iter_get_line(&aniter);

  printf("coderect: x=%d y=%d width=%d height=%d\n",
	coderect.x, coderect.y, coderect.width, coderect.height);
  printf("visible: start=%d end=%d\n", vbuf_start, vbuf_end);
  printf("--- CODE ---\n");
}
Example #2
0
/*
void bluetooth(void) {
  unsigned int redata,Ddata,choice;
  if(identityset==1)
  {
    redatah=LPLD_UART_GetChar(UART4);
    if(redatah==255)
    {
      identityset=0;
    }
  }
  
  if(identityset==2)
  {
    identityset=0;
    redata=LPLD_UART_GetChar(UART4)+redatah*256;
    choice=redata/4096;
    redata=redata%4096;
    Ddata=redata/256*100+redata/16%16*10+redata%16;
    
    switch(choice)
    {        
    case 0:  turnleft_time_set=Ddata*10;break;
    case 1:  testvalue1=Ddata;break;//将想要实时修改的全局变量替换掉null 在串口调试助手中  
    case 2:  PID_KP=Ddata;break;//输入四位的十六进制字符串 当做十进制的输入就可以了
    case 3:  testvalue3=Ddata;break;//第一个数位你想要改变的变量对应编号
    case 4:  testvalue4=Ddata;break;
    case 5:  testvalue5=Ddata;break;
    case 6:  haoswitch=Ddata;break;
    //case 7:  kd1=Ddata;break;
    //case 8:  kd2=Ddata;break;
    //case 9:  kd3=Ddata;break;
    //case 10:  kd4=Ddata;break;
    //case 11:  kd5=Ddata;break;
    //case 12:  kd6=Ddata;break;
    //case 13:  jiuzheng=Ddata;break;
    //case 14:  null=Ddata;break;
    //case 15:  null=Ddata;break;
    default : break;
    }
    
  }
  identityset++;
}

void sendblue(int a,int b)
{
  char sendbluedata[2];
  
  sendbluedata[0]=a*16+b/256;
  
  sendbluedata[1]=b%256;  
  LPLD_UART_PutCharArr(UART4,(char*)sendbluedata,2);
}

*/
void do_control(void)
{
	switch (routechoice) {
	case C_AHEAD:
		do_goahead();		break;
	case C_GETCORNER:
		do_getcorner();		break;
	case C_LEFT:
		do_turnleft();		break;
	case C_RIGHT:
		do_turnright();		break;
	case C_STOP:
		do_stop();			break;
	case C_AROUND:
		do_turnaround();	break;
	case C_BREAK:
		do_break();			break;
	case C_START:
		do_start(); 		break;
	case C_LETSWIN:
		do_letswin(); 		break;
	default:
		do_stop();
  }
}
Example #3
0
void erts_do_break_handling(void)
{
    /*
     * Most functions that do_break() calls are intentionally not thread safe;
     * therefore, make sure that all threads but this one are blocked before
     * proceeding!
     */
    erts_smp_thr_progress_block();
    /* call the break handling function, reset the flag */
    do_break();

    ResetEvent(erts_sys_break_event);
    ERTS_UNSET_BREAK_REQUESTED;

    erts_smp_thr_progress_unblock();
}
Example #4
0
File: sys.c Project: weisslj/otp
void erts_do_break_handling(void)
{
    struct termios temp_mode;
    int saved = 0;

    /*
     * Most functions that do_break() calls are intentionally not thread safe;
     * therefore, make sure that all threads but this one are blocked before
     * proceeding!
     */
    erts_smp_thr_progress_block();

    /* during break we revert to initial settings */
    /* this is done differently for oldshell */
    if (using_oldshell && !replace_intr) {
      SET_BLOCKING(1);
    }
    else if (isatty(0)) {
      tcgetattr(0,&temp_mode);
      tcsetattr(0,TCSANOW,&initial_tty_mode);
      saved = 1;
    }

    /* call the break handling function, reset the flag */
    do_break();

    ERTS_UNSET_BREAK_REQUESTED;

    fflush(stdout);

    /* after break we go back to saved settings */
    if (using_oldshell && !replace_intr) {
      SET_NONBLOCKING(1);
    }
    else if (saved) {
      tcsetattr(0,TCSANOW,&temp_mode);
    }

    erts_smp_thr_progress_unblock();
}
Example #5
0
/*
 *	The function "mon()" is the dialog user interface, called
 *	from the simulation just after program start.
 */
void mon(void)
{
	register int eoj = 1;
	static char cmd[LENCMD];

	tcgetattr(0, &old_term);

	if (x_flag) {
		if (do_getfile(xfn) == 0)
			do_go();
	}
	while (eoj) {
		next:
		printf(">>> ");
		fflush(stdout);
		if (fgets(cmd, LENCMD, stdin) == NULL) {
			putchar('\n');
			goto next;
		}
		switch (*cmd) {
		case '\n':
			do_step();
			break;
		case 't':
			do_trace(cmd + 1);
			break;
		case 'g':
			do_go();
			break;
		case 'd':
			do_dump(cmd + 1);
			break;
		case 'l':
			do_list(cmd + 1);
			break;
		case 'm':
			do_modify(cmd +	1);
			break;
		case 'f':
			do_fill(cmd + 1);
			break;
		case 'v':
			do_move(cmd + 1);
			break;
		case 'x':
			do_reg(cmd + 1);
			break;
		case 'p':
			do_port(cmd + 1);
			break;
		case 'b':
			do_break(cmd + 1);
			break;
		case 'h':
			do_hist(cmd + 1);
			break;
		case 'z':
			do_count(cmd + 1);
			break;
		case 'c':
			do_clock();
			break;
		case 's':
			do_show();
			break;
		case '?':
			do_help();
			break;
		case 'r':
			do_getfile(cmd + 1);
			break;
		case '!':
			do_unix(cmd + 1);
			break;
		case 'q':
			eoj = 0;
			break;
		default:
			puts("what??");
			break;
		}
	}
}
Example #6
0
 void hook_line(lua_State* L, lua_Debug* ar)
{
	dict* file_dictionary = NULL;

	if (L == NULL || ar == NULL)
	{
		return;
	}

	lua_getinfo(L, "Sn", ar);

	if (ar->currentline <= 0)
	{
		return;
	}

	if (debugger_step_count > 0)
	{
		// 避免总在同一行打转
		if (last_breaked.currentline != ar->currentline || last_breaked.source != ar->source)
		{
			--debugger_step_count;
			if (debugger_step_count <= 0)
			{
				do_break(L, ar);
				return;
			}
		}
	}

	if (debugger_next_count > 0)
	{
		// 避免总在同一行打转
		if (last_breaked.currentline != ar->currentline || last_breaked.source != ar->source)
		{
			lua_Debug caller;
			int frame = debugger_next_start_frame;
			int ok = 0;
			int be_checked = 0;
			int be_called = 0;

			// 检查整个栈判断是否走到当前函数内部
			while ((ok = lua_getstack(L, frame, &caller)) == 1 && lua_getinfo(L, "S", &caller))
			{
				be_checked = 1;
				if (debugger_next_linedefined == caller.linedefined && strcmp(debugger_next_source, caller.source) == 0)
				{
					be_called = 1;
					break;
				}
				++frame;
			}

			// 此时ok == 0,表示自己已经是顶层调用,next应该被取消
			if (be_checked == 0)
			{
				debugger_next_count = 0;
			}
			else
			{
				if (be_called == 0)
				{
					--debugger_next_count;
					debugger_next_linedefined = ar->linedefined;
					strncpy(debugger_next_source, ar->source, sizeof(debugger_next_source) - 1);
				}

				if (debugger_next_count <= 0)
				{
					do_break(L, ar);
					return;
				}
			}
		}

	}

	file_dictionary = dictFetchValue(breakpoint_dictionary, (const void*)ar->currentline);
	if (file_dictionary != NULL)
	{
		int needBreak = 0;
		const char* file_name = trim_path(ar->source);
		breakpoint_info* bp = dictFetchValue(file_dictionary, file_name);
		if (bp == NULL)
		{
			return;
		}

		if (bp->type & breakpoint_type_condition)
		{
			int n = lua_gettop(L);

			lua_rawgeti(L, LUA_REGISTRYINDEX, bp->conditionFunction);
			if (lua_type(L, -1) == LUA_TFUNCTION)
			{
				// 测试条件是否为true
				if (lua_pcall(L, lua_gettop(L) - 1 - n, LUA_MULTRET, 0) == 0)
				{
					int resultAmount = lua_gettop(L) - n;
					if (resultAmount > 0 && lua_type(L, -resultAmount) == LUA_TBOOLEAN)
					{
						if (lua_toboolean(L, -resultAmount))
						{
							needBreak = 1;
						}
					}
				}
			}

			lua_pop(L, lua_gettop(L) - n);
		}
		else
		{
			needBreak = 1;
		}

		// 释放临时断点
		if (bp->type & breakpoint_type_temp)
		{
			dictDelete(file_dictionary, file_name);
			luaL_unref(L, LUA_REGISTRYINDEX, bp->conditionFunction);
			free(bp);
		}

		if (needBreak)
		{
			do_break(L, ar);
		}

	}
}