⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 avr_simulator.c

📁 linux上实现的多种型号的AVR模拟器
💻 C
📖 第 1 页 / 共 4 页
字号:
/* File        : avr_simulator.c Author      : Sergiy Uvarov - Copyright (C) 2001 Description : This is the main file. Copyright notice: avr_simulator - A GNU/Linux simulator for the Atmel AVR series of microcontrollers. Copyright (C) 2001 Sergiy Uvarov This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version.  This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more details.  You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.  Sergiy Uvarov E-mail : colonel@ff.dsu.dp.ua*/#include <stdio.h>#include <inttypes.h>#include <string.h>#include <errno.h>#include <stdlib.h>#include <libintl.h>#include <locale.h>#include <pthread.h>#include <signal.h>#include <Xm/XmAll.h>#include <X11/Xmu/Editres.h>#include <X11/xpm.h>#define AVR_SIMULATOR#define MAIN#include "types.h"#include "avr_simulator.h"#include "global.h"/*  #include "auto_step.xpm" *//*  #include "breakpoint.xpm" *//*  #include "current.xpm" *//*  #include "empty.xpm" *//*  #include "load.xpm" *//*  #include "multi_step.xpm" *//*  #include "reload.xpm" *//*  #include "reset.xpm" *//*  #include "run.xpm" *//*  #include "step_out.xpm" *//*  #include "step_over.xpm" *//*  #include "stop.xpm" *//*  #include "trace_into.xpm" */#define _(x) gettext(x)void init();int create_listing(FILE *file);int read_word_gen(int *command,int *address,FILE *file);int read_word_intel(int *command,int *address,FILE *file);int read_word_motorola(int *command,int *address,FILE *file);void fill_zero(char *string,int number_sym);int load_flash(char *name);int load_eeprom(char *name);void draw();void create_main();void update_main();Pixmap CreatePixmap(Window window,unsigned int width,unsigned int height,		    Pixel pixel);void show_error();void exec_command();void show_info();void reset();void manage();void unmanage();void file_selection_ok();void refresh();void resize();void use_project_callback();void scroll_bar_callback();void time_button_s_callback();void time_button_us_callback();void time_button_ms_callback();void file_selection_gen();void file_selection_intel();void file_selection_motorola();void set_size_static_window();void info_close_callback();void drawarea_input_callback();int (*read_word)(int *,int *,FILE *)=read_word_gen;pthread_t thread;pthread_attr_t attr_thread;Window window;Pixmap pixmap,stop_pixmap,current_pixmap;Widget error_dialog,form,separator,frame,option_menu,  menu_fileselection,file_selection,info_dialog;Widget label_freq,             /* widget for displaying frequency of MPU  */  edit_pc,                     /* edit field for displaying PC register   */  edit_X,                      /* edit field for displaying X register    */  edit_Y,                      /* edit fieldfor displaying Y register     */  edit_Z,                      /* edit field for displaying Z register    */  label_sreg,                  /* label for displaying SREG register      */  edit_time,                   /* edit field for displaying TIME          */  edit_clock;                  /* edit field for displaying CLOCKS        */static String fallbacks[]={  "*background: rgb:D0/E0/C0",  "*XmPushButton.armColor: rgb:A0/A0/A0",  "*XmPushButton.highlightThickness: 1",  "*XmPushButton.shadowThickness: 1",  "*XmTextField.highlightThickness: 1",  "*XmTextField.shadowThickness: 1",  "*XmCascadeButtonGadget.shadowThickness: 1",  "*XmCascadeButtonGadget.highlightThickness: 1",   "*XmPushButtonGadget.shadowThickness: 1",  "*XmPushButtonGadget.highlightThickness: 1",   "*XmToggleButtonGadget.highlightThickness: 0",  "*XmToggleButtonGadget.shadowThickness: 0",  "*XmToggleButtonGadget.indicatorOn: INDICATOR_CHECK",  "*option.shadowThickness: 1",                      "*XmScrolledWindow*shadowThickness: 1",  "*Scroll*shadowThickness: 0",  "*Scroll.XmScrollBar.shadowThickness: 1",  "*XmComboBox.shadowThickness: 1",  "*XmComboBox.highlightThickness: 1",  "*XmComboBox.marginHeight: 1",  "*XmComboBox.marginWidth: 2",  "*XmTextField.background: rgb:C0/D0/D0",  "*XmTextField.marginHeight:2",  "*XmTextField.marginWidth: 3",  "*XmList.background: rgb:C0/D0/D0",  "*option_menu.marginHeight: 0",  "*option_menu.marginWidth: 0",  "*memory_label.shadowThickness: 1",  "*memory_label.highlightThickness: 0",  "*memory_label.background: rgb:A8/B8/B8",  "*memory_field.shadowThickness: 1",  "*BulletinBoard.marginHeight: 0",  "*BulletinBoard.marginWidth: 0",  NULL};int main(int argc, char *args[]){  Widget menu_bar,button,main_window,scroll,form_buttons;  XtAppContext context;  XmString string;   XtSetLanguageProc(NULL,NULL,NULL);  textdomain("avr_simulator");  toplevel=XtVaOpenApplication(&context,"Avr_simulator",NULL,0,&argc,args,                                fallbacks,sessionShellWidgetClass,NULL);  display=XtDisplay(toplevel);  scr_num=DefaultScreen(display);  XtAddEventHandler(toplevel,(EventMask)0,True,		    (XtEventHandler)_XEditResCheckMessages,0);  XtVaSetValues(toplevel,XmNallowShellResize,True,		XmNkeyboardFocusPolicy,XmPOINTER,NULL);  main_window=XtVaCreateManagedWidget("main_window",                                      xmMainWindowWidgetClass,toplevel,                                      XmNheight,400,/*  XmNwidth,520, */NULL);    /* create menu */   menu_bar=XmCreateMenuBar(main_window,"menu",NULL,0);  create_menu(menu_bar,menu,5);  form=XtVaCreateWidget("form",xmFormWidgetClass,main_window,NULL);  XtVaSetValues(main_window,XmNmenuBar,menu_bar,XmNworkWindow,form,NULL);  XtManageChild(menu_bar);  /* end menu */  /* create Selection File */  string=XmStringGenerate(_("Selection of file"),XmFONTLIST_DEFAULT_TAG,			  XmCHARSET_TEXT,_MOTIF_DEFAULT_LOCALE);  file_selection=XmCreateFileSelectionDialog(toplevel,"selection_file",NULL,0);  XtVaSetValues(file_selection,XmNdialogTitle,string,		XmNheight,400,XmNwidth,400,		XmNdialogStyle,XmDIALOG_PRIMARY_APPLICATION_MODAL,NULL);  XmStringFree(string);  string=XmStringGenerate("*.gen",XmFONTLIST_DEFAULT_TAG,			  XmCHARSET_TEXT,_MOTIF_DEFAULT_LOCALE);  XtVaSetValues(file_selection,XmNpattern,string,NULL);  XmStringFree(string);    XtAddCallback(file_selection,XmNcancelCallback,                (XtCallbackProc)unmanage,                (XtPointer)&file_selection);  XtAddCallback(file_selection,XmNokCallback,                (XtCallbackProc)file_selection_ok,                (XtPointer)&file_selection);  XtUnmanageChild(XmFileSelectionBoxGetChild(file_selection,                                             XmDIALOG_HELP_BUTTON));  /* option menu */    option_menu=XmCreateOptionMenu(file_selection,"option_menu",NULL,0);  menu_fileselection=XmCreatePulldownMenu(option_menu,"option",NULL,0);    string=XmStringGenerate(_("generic"),XmFONTLIST_DEFAULT_TAG,			  XmCHARSET_TEXT,_MOTIF_DEFAULT_LOCALE);  button=XtVaCreateManagedWidget("generic",xmPushButtonGadgetClass,                                 menu_fileselection,XmNlabelString,string,				 NULL);  XtAddCallback(button,XmNactivateCallback,(XtCallbackProc)file_selection_gen,		(XtPointer)&file_selection);  XmStringFree(string);  string=XmStringGenerate(_("motorola"),XmFONTLIST_DEFAULT_TAG,			  XmCHARSET_TEXT,_MOTIF_DEFAULT_LOCALE);  button=XtVaCreateManagedWidget("motorola",xmPushButtonGadgetClass,                                 menu_fileselection,XmNlabelString,string,				 NULL);  XtAddCallback(button,XmNactivateCallback,		(XtCallbackProc)file_selection_motorola,		(XtPointer)&file_selection);  XmStringFree(string);  string=XmStringGenerate(_("intel"),XmFONTLIST_DEFAULT_TAG,			  XmCHARSET_TEXT,_MOTIF_DEFAULT_LOCALE);  button=XtVaCreateManagedWidget("intel",xmPushButtonGadgetClass,                                 menu_fileselection,XmNlabelString,string,				 NULL);  XtAddCallback(button,XmNactivateCallback,		(XtCallbackProc)file_selection_intel,		(XtPointer)&file_selection);  XmStringFree(string);  string=XmStringCreateLocalized(_("Type of file:"));  XtVaSetValues(option_menu,XmNsubMenuId,menu_fileselection,XmNlabelString,		string,                XmNtopAttachment,XmATTACH_FORM,XmNtopOffset,10,                XmNleftAttachment,XmATTACH_FORM,XmNleftOffset,10,                NULL);  XmStringFree(string);  XtManageChild(option_menu);  /* end Selection File */    form_buttons=    XtVaCreateManagedWidget("form",xmFormWidgetClass,form,			    XmNtopAttachment,XmATTACH_FORM,			    XmNleftAttachment,XmATTACH_FORM,			    XmNrightAttachment,XmATTACH_FORM,			   /*   XmNheight,30, */NULL);			      create_buttons(form_buttons);      separator=XtVaCreateManagedWidget("Separator",xmSeparatorWidgetClass,form,				    XmNtopAttachment,XmATTACH_WIDGET,				    XmNtopWidget,form_buttons,				    XmNtopOffset,3,XmNleftOffset,2,				    XmNleftAttachment,XmATTACH_FORM,				    XmNrightAttachment,XmATTACH_FORM,				    XmNrightOffset,2,NULL);    /* window for text of program */  frame=XtVaCreateManagedWidget("Frame",xmFrameWidgetClass,form,				XmNtopAttachment,XmATTACH_WIDGET,				XmNtopWidget,separator,XmNtopOffset,5,				XmNleftAttachment,XmATTACH_FORM,				XmNleftOffset,5,				XmNbottomAttachment,XmATTACH_FORM,				XmNbottomOffset,5,				XmNmarginWidth,2,XmNmarginHeight,2,				NULL);  scroll=XtVaCreateManagedWidget("Scroll",xmScrolledWindowWidgetClass,frame,				 XmNscrollingPolicy,XmAPPLICATION_DEFINED,				 XmNscrollBarDisplayPolicy,XmSTATIC,				 NULL);  drawarea.draw=XtVaCreateManagedWidget("Drawing area",					xmDrawingAreaWidgetClass,scroll,					XmNbackground,					WhitePixel(display,scr_num),					XmNforeground,					BlackPixel(display,scr_num),NULL);  drawarea.v_scrb=XtVaCreateManagedWidget("scr_bar",xmScrollBarWidgetClass,					  scroll,XmNorientation,XmVERTICAL,					  XmNincrement,1,XmNminimum,0,					  XmNvalue,0,XmNsliderSize,1,					  XmNmaximum,1,NULL);  XtAddCallback(drawarea.v_scrb,XmNvalueChangedCallback,		(XtCallbackProc)scroll_bar_callback,NULL);  XtAddCallback(drawarea.v_scrb,XmNdragCallback,		(XtCallbackProc)scroll_bar_callback,NULL);  XtAddCallback(drawarea.draw,XmNinputCallback,		(XtCallbackProc)drawarea_input_callback,NULL);    XmScrolledWindowSetAreas(scroll,NULL,drawarea.v_scrb,drawarea.draw);  /* end of window */  /* create error message window */  error_dialog=XmCreateErrorDialog(toplevel,"Error message",NULL,0);  string=XmStringGenerate(_("Error message"),XmFONTLIST_DEFAULT_TAG,			  XmCHARSET_TEXT,_MOTIF_DEFAULT_LOCALE);  XtVaSetValues(error_dialog,XmNdialogTitle,string,NULL);  XmStringFree(string);  XtUnmanageChild(XmMessageBoxGetChild(error_dialog,					     XmDIALOG_HELP_BUTTON));  XtUnmanageChild(XmMessageBoxGetChild(error_dialog,				       XmDIALOG_CANCEL_BUTTON));  string=XmStringGenerate(_("Close"),XmFONTLIST_DEFAULT_TAG,			  XmCHARSET_TEXT,_MOTIF_DEFAULT_LOCALE);  XtVaSetValues(error_dialog,XmNokLabelString,string,		XmNdialogStyle,XmDIALOG_PRIMARY_APPLICATION_MODAL,NULL);  XmStringFree(string);  /* end of error message window */  /* create info message window */  info_dialog=XmCreateInformationDialog(toplevel,"Info_dialog",NULL,0);  string=XmStringGenerate(_("Info message"),XmFONTLIST_DEFAULT_TAG,			  XmCHARSET_TEXT,_MOTIF_DEFAULT_LOCALE);  XtVaSetValues(info_dialog,XmNdialogTitle,string,NULL);  XmStringFree(string);  XtUnmanageChild(XmMessageBoxGetChild(info_dialog,					     XmDIALOG_HELP_BUTTON));  XtUnmanageChild(XmMessageBoxGetChild(info_dialog,				       XmDIALOG_OK_BUTTON));  string=XmStringGenerate(_("Close"),XmFONTLIST_DEFAULT_TAG,			  XmCHARSET_TEXT,_MOTIF_DEFAULT_LOCALE);  XtVaSetValues(info_dialog,XmNcancelLabelString,string,		XmNdialogStyle,XmDIALOG_PRIMARY_APPLICATION_MODAL,NULL);  XmStringFree(string);  XtAddCallback(info_dialog,XmNcancelCallback,		(XtCallbackProc)info_close_callback,NULL);  /* end of info message window */  create_project_selection();    /* create window of general purpose registers */  create_gpr_window();  /* create sram window */  create_sram_window();  /* create I/O ports window */  create_io_ports_window();  /* create EEPROM window */  create_eeprom_window();  /* create main status */  create_main();  create_debugger_window();  create_ports_window();  create_about();  XtManageChild(form);  XtRealizeWidget(toplevel);  init();  XtAppMainLoop(context);  return 0;}void init(void){  XFontStruct *font_struct;  XGCValues values;  Dimension toplevel_height,toplevel_width;  int n;  mem_file_changed=eeprom_changed=NULL;  drawarea.current_line_deb=-1;  drawarea.num_commands=0;  /* allocate data memory */  if((gpr_pointer=malloc(controllers[type_micro].size_gpr+			 controllers[type_micro].size_io_reg+			 controllers[type_micro].size_sram))==NULL)    {      puts("init(): can't allocate memory for 'gpr_pointer'");      exit(1);

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -