您的位置:首页 > 其它

vc6.0 提取*.lst文件,中函数地址,数据地址,应用实例 红色部分显示

2017-12-08 12:11 726 查看
// tdebugDlg.cpp : implementation file

//

#include "stdafx.h"

#include "tdebug.h"

#include "tdebugDlg.h"

#include "usbprt.h"

#ifdef _DEBUG

#define new DEBUG_NEW

#undef THIS_FILE

static char THIS_FILE[] = __FILE__;

#endif

/////////////global pointer to a file/////////////

FILE *pf; 

struct g_variables_functions{
int cnt;
unsigned  long
addr[2000];
unsigned  long  len[2000];
char  name[2000][100];
unsigned  value[2000];

} g_v,g_f;

union type_change{

unsigned char byte[8];

unsigned char us_char;

char s_char;

unsigned __int16 us_short;

__int16 s_short;

unsigned __int32 us_long;

__int32 s_long;

unsigned __int64 us_long_long;

__int64 s_long_long;

float s_float;

} g_type;

/////////////////////////////////////////////////////////////////////////////

// CTdebugDlg dialog

CTdebugDlg::CTdebugDlg(CWnd* pParent /*=NULL*/)
: CDialog(CTdebugDlg::IDD, pParent)

{
//{{AFX_DATA_INIT(CTdebugDlg)
m_auto_detect = FALSE;
//}}AFX_DATA_INIT
// Note that LoadIcon does not require a subsequent DestroyIcon in Win32
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);

}

void CTdebugDlg::DoDataExchange(CDataExchange* pDX)

{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CTdebugDlg)
DDX_Control(pDX, IDC_BUTTON10, m_btn_step);
DDX_Control(pDX, IDC_BUTTON9, m_btn_docmd);
DDX_Control(pDX, IDC_EDIT4, m_edit_tcdbcmd);
DDX_Control(pDX, IDC_COMBO3, m_comb_device);
DDX_Control(pDX, IDC_COMBO2, m_comb_type);
DDX_Control(pDX, IDC_COMBO1, m_comb_bus);
DDX_Control(pDX, IDC_CHECK2, m_check2);
DDX_Control(pDX, IDC_USB, m_btn_usb);
DDX_Control(pDX, IDC_BUTTON8, m_btn_clrbk);
DDX_Control(pDX, IDC_BUTTON7, m_btn_clr);
DDX_Control(pDX, IDC_CHECK4, m_check_tcpc);
DDX_Control(pDX, IDC_CHECK3, m_bk_check);
DDX_Control(pDX, IDC_STATIC_CFG, m_bd_cfg);
DDX_Control(pDX, IDC_CHECK1, m_check1);
DDX_Control(pDX, IDC_BUTTON5, m_btn_stop);
DDX_Control(pDX, IDC_BUTTON6, m_btn_run);
DDX_Control(pDX, IDC_BUTTON3, m_btn_rst);
DDX_Control(pDX, IDC_STATIC_INF, m_info);
DDX_Control(pDX, IDC_BUTTON4, m_btn_mode);
DDX_Control(pDX, IDC_BUTTON1, m_btn_update);
DDX_Control(pDX, IDC_STATIC3, m_static_data);
DDX_Control(pDX, IDC_STATIC2, m_static_addr);
DDX_Control(pDX, IDC_STATIC1, m_board1);
DDX_Control(pDX, IDC_EDIT3, m_edit3);
DDX_Control(pDX, IDC_EDIT2, m_edit2);
DDX_Control(pDX, IDC_EDIT1, m_edit1);
DDX_Check(pDX, IDC_CHECK2, m_auto_detect);
DDX_Control(pDX,IDC_CUSTOM1,m_grid);
//}}AFX_DATA_MAP
//DDX_Control(pDX,IDC_CUSTOM1,m_grid);

}

BEGIN_MESSAGE_MAP(CTdebugDlg, CDialog)
//{{AFX_MSG_MAP(CTdebugDlg)
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
ON_BN_CLICKED(IDC_BUTTON1, OnButton1)
ON_BN_CLICKED(IDC_BUTTON2, OnButton2)
ON_BN_CLICKED(IDC_BUTTON4, OnButton4)
ON_EN_SETFOCUS(IDC_EDIT3, OnSetfocusEdit3)
ON_EN_KILLFOCUS(IDC_EDIT2, OnKillfocusEdit2)
ON_WM_CTLCOLOR()
ON_WM_TIMER()
ON_BN_CLICKED(IDC_BUTTON3, OnButton3)
ON_BN_CLICKED(IDC_BUTTON5, OnButton5)
ON_BN_CLICKED(IDC_BUTTON6, OnButton6)
ON_BN_CLICKED(IDC_CHECK3, OnCheck3)
ON_BN_CLICKED(IDC_BUTTON7, OnButton7)
ON_BN_CLICKED(IDC_BUTTON8, OnButton8)
ON_BN_CLICKED(IDC_USB, OnUsb)
ON_BN_CLICKED(IDC_CHECK2, OnCheck2)
ON_BN_CLICKED(IDC_BUTTON9, OnButton9)
ON_BN_CLICKED(IDC_BUTTON10, OnButton10)
//}}AFX_MSG_MAP
ON_NOTIFY(NM_CLICK, IDC_CUSTOM1, OnGridClick)
ON_NOTIFY(GVN_ENDLABELEDIT, IDC_CUSTOM1, OnGridEndEdit)

END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////

// CTdebugDlg message handlers

BOOL CTdebugDlg::OnInitDialog()

{

    if(__argc >=2)
{
m_usb_id = strtol(__argv[1],NULL,16);

}
else
{

        m_usb_id = 0xffff;
}

CDialog::OnInitDialog();

nFullWidth=GetSystemMetrics(SM_CXSCREEN); 
nFullHeight=GetSystemMetrics(SM_CYSCREEN);

// Set the icon for this dialog.  The framework does this automatically
//  when the application's main window is not a dialog
CFont a; 
a.CreateFont( 24, 0, 0, 0, FW_NORMAL, FALSE, FALSE, 0, DEFAULT_CHARSET, OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY, DEFAULT_PITCH | FF_SWISS, _T( "宋体" ) ); 
m_info.SetFont(&a);
m_info.GetDC()->SetTextColor(RGB(255,0,0));

m_info.SetWindowText("device ok");

////////////////set the grid /////////////////////////////////////////
m_ImageList.Create(MAKEINTRESOURCE(IDB_BITMAP1), 16, 2, RGB(255,255,255));
m_grid.SetImageList(&m_ImageList);  //绑定grid控件和 图片列表

// m_grid.SetEditable(true);

m_grid.SetTextBkColor(RGB(0xFF, 0xFF, 0xE0)); //黄色背景
m_grid.SetTextColor(RGB(0x00, 0x00, 0xff));
//m_grid.SetFixedTextColor(RGB(0xff, 0x00, 0x00)); //表头的字体颜色

OnUsb();

    unsigned char test_buf[8];
ReadMem(m_usb_handle,0x0000,test_buf,4,1);
ReadMem(m_usb_handle,0x0000,test_buf,4,4);

m_nTextLen = 0x100000;
m_edit1.SetLimitText(m_nTextLen);

return TRUE;  // return TRUE  unless you set the focus to a control

}

// If you add a minimize button to your dialog, you will need the code below

//  to draw the icon.  For MFC applications using the document/view model,

//  this is automatically done for you by the framework.

void CTdebugDlg::OnPaint() 

{
if (IsIconic())
{
CPaintDC dc(this); // device context for painting

SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);

// Center icon in client rectangle
int cxIcon = GetSystemMetrics(SM_CXICON);
int cyIcon = GetSystemMetrics(SM_CYICON);
CRect rect;
GetClientRect(&rect);
int x = (rect.Width() - cxIcon + 1) / 2;
int y = (rect.Height() - cyIcon + 1) / 2;

// Draw the icon
dc.DrawIcon(x, y, m_hIcon);
}
else
{

CDialog::OnPaint();
}

}

// The system calls this to obtain the cursor to display while the user drags

//  the minimized window.

HCURSOR CTdebugDlg::OnQueryDragIcon()

{
return (HCURSOR) m_hIcon;

}

void CTdebugDlg::OnButton1() 

{
// TODO: Add your control notification handler code here
int i,j;
unsigned long
addr_start,addr_end,addr_now;
unsigned char
buf[1024*32];
unsigned char
*pt;
CString
str;

// unsigned char buf[32];

if(grid_mode == 0)

{

// addr_start = g_v.addr[0];
//get the start of the ".bss" section

// addr_end = g_v.addr[g_v.cnt-1] + g_v.len[g_v.cnt - 1]; // the end of the ".bss" section

if(m_usb_handle == NULL)
{
//MessageBox("no usb device!!");
debug_print("no usb device!");
}
else if(bss_end < bss_end)
{
//MessageBox("start addr is bigger than end addr!");
debug_print("start addr is bigger than end addr!");
}
else
{

ReadMem(m_usb_handle,bss_start,buf,bss_end-bss_start,device_type);
/*
addr_now = addr_start;
pt = buf; 
i = 0;

do
{
if(addr_now == g_v.addr[i])
{
for(j=0;j<8;j++){
g_type.byte[j] = pt[j];

}

pt = pt + g_v.len[i];
addr_now = addr_now + g_v.len[i];

if(g_v.len[i] == 1)
str.Format("0x%02x",g_type.us_char);
else if(g_v.len[i] == 2)
str.Format("0x%04x",g_type.us_short);
else if(g_v.len[i] == 4)
str.Format("0x%08x",g_type.us_long);
else if(g_v.len[i] > 4)
{
//str.Format("click to get value");
str.Format("");
m_grid.SetItemImage(i+1,3,5);
}
//str.Format("0x%02x%02x%02x%02x",g_type.byte[3],g_type.byte[2],g_type.byte[1],g_type.byte[0]);

//////////////set the m_grid///////////////////
m_grid.SetItemText(i+1,3,str);

//////////////end of m_grid ///////////////////
i++;
}
else
{
pt++;
addr_now++;
}*/

for(i =0;i<g_v.cnt;i++)
{
for(j=0;j<8;j++){
addr_start = g_v.addr[i] - bss_start;
g_type.byte[j] = buf[j+addr_start];
}
if(g_v.len[i] == 1)
str.Format("0x%02x",g_type.us_char);
else if(g_v.len[i] == 2)
str.Format("0x%04x",g_type.us_short);
else if(g_v.len[i] == 4)
str.Format("0x%08x",g_type.us_long);
else if(g_v.len[i] > 4)
{
//str.Format("click to get value");
str.Format("");
m_grid.SetItemImage(i+1,3,5);
}
//str.Format("0x%02x%02x%02x%02x",g_type.byte[3],g_type.byte[2],g_type.byte[1],g_type.byte[0]);

//////////////set the m_grid///////////////////
if(g_v.len[i] != 0)
m_grid.SetItemText(i+1,3,str);
else
{
m_grid.SetItemText(i+1,3,"len=0");
m_grid.SetItemImage(i+1,3,7);
}
//////////////end of m_grid ///////////////////

//m_grid.AutoSize();
}
m_grid.Refresh();
}

}

else

{
//MessageBox("must set variables mode");
debug_print("must set variable mode");

}

}

// write the memory.

void CTdebugDlg::OnButton2() 

{
// TODO: Add your control notification handler code here
CWnd *pwnd=GetDlgItem(IDC_EDIT4);
if(GetFocus()==pwnd)
{
// MessageBox("test");
OnButton9();
}
else
{
CString str;
CString tcdb_str;

unsigned char buf[4];
long addr;
unsigned long  value;
int     i;
int     byte_length;
CString  str_device;

if(m_comb_type.GetCurSel() == 0)
{
byte_length=1;
}
else if(m_comb_type.GetCurSel() == 1)
{
byte_length=2;
}
else
{
byte_length=4;
}

//if(m_comb_device.GetCurSel()==0)
if(device_type == 4)
{
str_device="";
}
else
{
str_device="-u";
}

m_edit2.GetWindowText(str);
addr = strtol(str,NULL,16);

m_edit3.GetWindowText(str);
value = strtol(str,NULL,16);

if(strcmp(str,"") != 0)
{
//buf[0] = value;
switch(m_comb_bus.GetCurSel())
{
case 0:
for(i=0;i<byte_length;i++)
{
buf[i] = value&0xff;
value=value>>8;
}
WriteMem(m_usb_handle,addr,buf,byte_length,device_type);
break;
/* case 1:
str.Format("wa %04x %04x %s",addr,value,str_device);
tcdb_cmd(str);
break;*/
case 1:
str.Format("wf %04x %04x %s",addr,value,str_device);
tcdb_cmd(str);
break;
default:
break;
}
}

str.Format("## write %04x",addr);
debug_print(str);

}

}

void CTdebugDlg::debug_print(CString   str)

{

#if 0
CString str_text;
int cnt,i;
char cstr[1000];
//char    temp_buff[64*1024];
int nLength;

/*
m_edit1.GetWindowText(str_text);

nLength = m_edit1.GetWindowTextLength();
cnt = m_edit1.GetLineCount();
if(cnt >= 180)
{
m_edit1.GetLine(cnt-180,cstr,1000);

str_text =  str_text.Right(str_text.GetLength() - strlen(cstr));
}
m_edit1.SetSel(nLength, 0);
m_edit1.ReplaceSel(str_text);  */

m_edit1.GetWindowText(str_text);

str_text += str;
//str_text += "\r\n";  

m_edit1.SetWindowText(str_text);
//nLength = m_edit1.GetWindowTextLength();
//m_edit1.SetSel(nLength, nLength);
//m_edit1.ReplaceSel(str_text); 

for(i=0;i<100;i++)
cstr[i]=0;

// m_edit1.GetWindowText(str_text);

// str_text=str_text+"\r\n"+str;

// m_edit1.SetWindowText(str_text);

cnt = m_edit1.GetLineCount();
if(cnt >= 180)
{

//memcpy(buf,0,100);
m_edit1.GetLine(cnt-180,cstr,1000);

// cc = strlen(buf);
m_edit1.SetSel(0,strlen(cstr)+1);
m_edit1.ReplaceSel("");
}

int index = m_edit1.GetLineCount();
m_edit1.LineScroll(index); 

#endif
int len = m_edit1.GetWindowTextLength();
int nstep = m_nTextLen  / 8;
if (len >= nstep * 7) {
m_edit1.SetSel (0, nstep*6);
m_edit1.ReplaceSel ("");
len = m_edit1.GetWindowTextLength();
}
m_edit1.SetSel (len, len);
m_edit1.ReplaceSel (str);

}

void CTdebugDlg::debug_printx(unsigned char *buf,unsigned int len)

{

#if 0
CString str_text,str;

int cnt,i;
char cstr[1024*16];

for(i=0;i<100;i++)
cstr[i]=0;

m_edit1.GetWindowText(str_text);
//str_text = str_text + "\r\n";

for(i = 0;i<len;i++)
{
if(i%16 == 8)
{
str_text = str_text + " ";
}
if(i % 16 == 0)
{
str.Format("\r\n%04x:",i);
str_text = str_text + str;
}
str.Format("%02x",buf[i]);
str_text = str_text + " " + str;
}

str_text=str_text+"\r\n";

m_edit1.SetWindowText(str_text);

cnt = m_edit1.GetLineCount();
if(cnt >= 180)
{

//memcpy(buf,0,100);
m_edit1.GetLine(cnt-180,cstr,1024*8);

// cc = strlen(buf);
m_edit1.SetSel(0,strlen(cstr)+1);
m_edit1.ReplaceSel("");
}

int index = m_edit1.GetLineCount();
m_edit1.LineScroll(index);

#endif

#if 1
CString str_text,str;
int cnt,i;
for(i = 0;i<len;i++)
{
if(i%16 == 8)
{
str_text = str_text + " ";
}
if(i % 16 == 0)
{
str.Format("\r\n%04x:",i);
str_text = str_text + str;
}
str.Format("%02x",buf[i]);
str_text = str_text + " " + str;
}

str_text=str_text+"\r\n";
int m_len = m_edit1.GetWindowTextLength();
int nstep = m_nTextLen  / 8;
if (m_len >= nstep * 7) {
m_edit1.SetSel (0, nstep*6);
m_edit1.ReplaceSel ("");
m_len = m_edit1.GetWindowTextLength();
}
m_edit1.SetSel (m_len, m_len);
m_edit1.ReplaceSel (str_text);

#endif

}

void CTdebugDlg::OnGridClick(NMHDR *pNotifyStruct, LRESULT* /*pResult*/)

{
NM_GRIDVIEW* pItem = (NM_GRIDVIEW*) pNotifyStruct;
unsigned char
buf[1024*16];
long addr;
int i;
CString
str;

if(m_usb_handle != NULL)

{

if(grid_mode == 0)

{

if((pItem->iRow == 0) && (pItem->iColumn == 1))
{
///////////////make the addr to be increase order/////////////////////

int i,j;
unsigned long
temp;
char temp_str[100];
for(i=1;i<g_v.cnt;i++)
for(j=i;j>0;j--)
{
if(g_v.addr[j] < g_v.addr[j-1])
{
temp = g_v.addr[j];
g_v.addr[j] = g_v.addr[j-1];
g_v.addr[j-1] = temp;

temp = g_v.len[j];
g_v.len[j] = g_v.len[j-1];
g_v.len[j-1] = temp;

strcpy(temp_str,g_v.name[j]);
strcpy(g_v.name[j],g_v.name[j-1]);
strcpy(g_v.name[j-1],temp_str);

}
}

this->grid_display();

}
else if((pItem->iRow == 0) && (pItem->iColumn == 0))
{
int i,j;
unsigned long
temp;
char temp_str[100];
for(i=1;i<g_v.cnt;i++)
for(j=i;j>0;j--)
{
if(strcmp(g_v.name[j],g_v.name[j-1]) < 0)
{
temp = g_v.addr[j];
g_v.addr[j] = g_v.addr[j-1];
g_v.addr[j-1] = temp;

temp = g_v.len[j];
g_v.len[j] = g_v.len[j-1];
g_v.len[j-1] = temp;

strcpy(temp_str,g_v.name[j]);
strcpy(g_v.name[j],g_v.name[j-1]);
strcpy(g_v.name[j-1],temp_str);

}
}
this->grid_display();
}
else if(m_grid.GetItemImage(pItem->iRow,pItem->iColumn) == 5)
{
addr = g_v.addr[pItem->iRow-1];
i = 0;

str.Format("## Memory read Addr %04x: ",addr);
debug_print(str);

ReadMem(m_usb_handle,addr,buf,g_v.len[pItem->iRow - 1],device_type);

debug_printx(buf,g_v.len[pItem->iRow - 1]);
}

}

else if(grid_mode == 1)

{
if((pItem->iRow == 0) && (pItem->iColumn == 3))
{
for(i=0;i<g_f.cnt;i++)
{   g_f.value[i] = 0;
m_grid.SetItemImage(i+1,3,1);
}
bkpoint = 0;
bk_ctl[0] = 0;
bk_ctl[1] = 0;
bk_ctl[2] = 0;
bk_ctl[3] = 0;
buf[0] = 0x00;
WriteMem(m_usb_handle,0x613,buf,1,device_type);
WriteMem(m_usb_handle,0x617,buf,1,device_type);
WriteMem(m_usb_handle,0x61b,buf,1,device_type);
WriteMem(m_usb_handle,0x61f,buf,1,device_type);

m_grid.Refresh();
}
else if(pItem->iColumn == 3)
{
if((g_f.value[pItem->iRow - 1] & 0x0f) == 0)
{/*
m_grid.SetItemImage(pItem->iRow,pItem->iColumn,0);
m_grid.Refresh();

buf[0] = (g_f.addr[pItem->iRow - 1]) & 0xff;
buf[1] = (g_f.addr[pItem->iRow - 1] & 0xff00)>>8;
buf[2] = (g_f.addr[pItem->iRow - 1] & 0xff0000)>>16;

WriteMem(m_usb_handle,0x610,buf,3,1); // mcu run

bkpoint++;*/
if(bkpoint < 4)
{
for(i=0;i<4;i++)
{
if(bk_ctl[i] == 0)
{
bk_ctl[i] = 1;
m_grid.SetItemImage(pItem->iRow,pItem->iColumn,0);
m_grid.Refresh();

buf[0] = (g_f.addr[pItem->iRow - 1]) & 0xff;
buf[1] = (g_f.addr[pItem->iRow - 1] & 0xff00)>>8;
buf[2] = (g_f.addr[pItem->iRow - 1] & 0xff0000)>>16;
buf[3] = 0x01;

WriteMem(m_usb_handle,4*i+0x610,buf,4,device_type); // mcu run

bkpoint++;

g_f.value[pItem->iRow - 1] = (0x02) | (i<<4);

break;

}
}

}
else
{
//MessageBox("break point can't more than 4");
debug_print("break point can't more than 4");
}
}
else if((g_f.value[pItem->iRow - 1] & 0x0f)== 1)
{
if(g_f.len[pItem->iRow - 1] >= 0x18)
{

i = g_f.value[pItem->iRow - 1] >> 4;

m_grid.SetItemImage(pItem->iRow,pItem->iColumn,6);
m_grid.Refresh();

buf[0] = (g_f.addr[pItem->iRow - 1]+g_f.len[pItem->iRow - 1]- 0x18) & 0xff;
buf[1] = ((g_f.addr[pItem->iRow - 1]+g_f.len[pItem->iRow - 1]- 0x18) & 0xff00)>>8;
buf[2] = ((g_f.addr[pItem->iRow - 1]+g_f.len[pItem->iRow - 1]- 0x18)& 0xff0000)>>16;
buf[3] = 0x01;

WriteMem(m_usb_handle,4*i+0x610,buf,4,device_type); // mcu run

g_f.value[pItem->iRow - 1] = (0x02) | (i<<4);
}
else
{
i = g_f.value[pItem->iRow - 1] >> 4;
//MessageBox("the function length is not more than 0x18");
debug_print("the function length is not more than 0x18");
m_grid.SetItemImage(pItem->iRow,pItem->iColumn,1);
m_grid.Refresh();
g_f.value[pItem->iRow - 1] = 0x00;
bk_ctl[i] = 0;

buf[0] = 0x00;

WriteMem(m_usb_handle,4*i+0x613,buf,1,device_type); // mcu run

bkpoint--;

}

//bkpoint--;
}
else if((g_f.value[pItem->iRow - 1] & 0x0f) == 2)
{
i = g_f.value[pItem->iRow - 1] >> 4;
bk_ctl[i] = 0;

// buf[0] = (g_f.addr[pItem->iRow - 1]+g_f.len[pItem->iRow - 1]-0x10) & 0xff;

// buf[1] = ((g_f.addr[pItem->iRow - 1]+g_f.len[pItem->iRow - 1]-0x10) & 0xff00)>>8;

// buf[2] = ((g_f.addr[pItem->iRow - 1]+g_f.len[pItem->iRow - 1]-0x10)& 0xff0000)>>16;
buf[0] = 0x00;
WriteMem(m_usb_handle,4*i+0x613,buf,1,device_type); // mcu run

m_grid.SetItemImage(pItem->iRow,pItem->iColumn,1);
m_grid.Refresh();

g_f.value[pItem->iRow - 1] = 0x00;
bkpoint--;
}
//g_f.value[pItem->iRow - 1] = (((g_f.value[pItem->iRow - 1] & 0x0f) + 1)%3) | (g_f.value[pItem->iRow - 1] & 0xf0);
}

}

}

else

{

//MessageBox("no usb device");
debug_print("no usb device");

}

}

void CTdebugDlg::grid_display(void)

{
////////////////set the grid /////////////////////////////////////////
{
int i;
CString
str;

if(grid_mode == 0)
{
m_grid.SetEditable(true);
m_grid.SetRowCount(g_v.cnt+1); //初始为n行 
m_grid.SetColumnCount(4); //初始化为n列            
m_grid.SetFixedRowCount(1); //表头为一行  
m_grid.SetFixedColumnCount(1); //表头为一列 
m_grid.SetItemText(0,0,"variable name:");
m_grid.SetItemImage(0,0,8);
m_grid.SetItemText(0,1," addr ");
m_grid.SetItemImage(0,1,8);

m_grid.SetItemText(0,2," len ");
m_grid.SetItemImage(0,2,8);
m_grid.SetItemText(0,3,"   value  ");
m_grid.SetItemImage(0,3,8);
for(i=0;i<g_v.cnt;i++)
{
m_grid.SetItemText(i+1,0,g_v.name[i]);
str.Format("0x%02x",g_v.len[i]);
m_grid.SetItemText(i+1,2,str);

str.Format("0x%04x",g_v.addr[i]);
m_grid.SetItemText(i+1,1,str);
m_grid.SetItemImage(i+1,0,3);
m_grid.SetItemImage(i+1,3,9);

}

}
else if(grid_mode == 1)
{
m_grid.SetEditable(false);
m_grid.SetRowCount(g_f.cnt+1);
m_grid.SetColumnCount(4); //初始化为n列            
m_grid.SetFixedRowCount(1); //表头为一行  
m_grid.SetFixedColumnCount(1); //表头为一列 
m_grid.SetItemText(0,0,"function name:");
m_grid.SetItemImage(0,0,8);
m_grid.SetItemText(0,1," addr ");
m_grid.SetItemImage(0,1,8);
m_grid.SetItemText(0,2," len ");
m_grid.SetItemImage(0,2,8);
m_grid.SetItemText(0,3,"break point");
m_grid.SetItemImage(0,3,8);

for(i=0;i<g_f.cnt;i++)
{
m_grid.SetItemText(i+1,0,g_f.name[i]);
str.Format("0x%04x",g_f.addr[i]);
m_grid.SetItemText(i+1,1,str);

str.Format("0x%02x",g_f.len[i]);
m_grid.SetItemText(i+1,2,str);

m_grid.SetItemImage(i+1,0,2);
m_grid.SetItemText(i+1,3,"");
if((g_f.value[i] & 0x0f ) == 0)
m_grid.SetItemImage(i+1,3,1);
else if((g_f.value[i] & 0x0f )== 1)
m_grid.SetItemImage(i+1,3,0);
else if((g_f.value[i] & 0x0f )== 2)
m_grid.SetItemImage(i+1,3,6);

}

}

m_grid.SetItemText(1,3,"0x123456789a");
m_grid.AutoSize(); 
m_grid.SetItemText(1,3,"");
}

/////////change the size of m_grid///////////////
{
CRect  rect;
int t1,t2;
unsigned char grid_cnt;
unsigned char cnt;

grid_cnt = m_grid.GetColumnCount();
t1 = 0;
for(cnt = 0; cnt<grid_cnt;cnt++)
{
m_grid.GetCellRect(0,cnt,rect);
t1+=rect.Width();

}

this->GetClientRect(rect);
t2 = nFullHeight*0.9;
//t2 = 540;
m_grid.MoveWindow(0,0,t1+32,t2-40,TRUE);

//nFullWidth 

t1 = t1 + 32;
t2 = t2;
m_btn_mode.MoveWindow(t1+8,8,100,32,TRUE);
m_btn_update.MoveWindow(t1+115,8,100,32,TRUE);
m_btn_rst.MoveWindow(t1 + 222,8,100,32,TRUE);
m_btn_clr.MoveWindow(t1 + 329,8,100,32,TRUE);
m_btn_clrbk.MoveWindow(t1 + 436,8,100,32,TRUE);
m_btn_usb.MoveWindow(t1+543,8,100,32,TRUE);

m_btn_run.MoveWindow(t1+275,44,35,32,TRUE);
m_btn_stop.MoveWindow(t1+314,44,35,32,TRUE);
m_btn_step.MoveWindow(t1+354,44,35,32,TRUE);

// the memory read and write board
m_board1.MoveWindow(t1+8,44,260,96,TRUE);
m_static_addr.MoveWindow(t1+16,104,30,20,TRUE);
m_edit2.MoveWindow(t1+50,100,80,20,TRUE);
m_static_data.MoveWindow(t1+136,104,30,20,TRUE);
m_edit3.MoveWindow(t1+170,100,80,20,TRUE);
//m_comb_device.MoveWindow(t1+16,64,80,20,TRUE);
m_comb_bus.MoveWindow(t1+50,64,80,20,TRUE);
m_comb_type.MoveWindow(t1+170,64,80,20,TRUE);

m_edit2.SetWindowText("00");
m_comb_device.SetCurSel(0);
m_comb_bus.SetCurSel(0);
m_comb_type.SetCurSel(0);

        // the config board
m_bd_cfg.MoveWindow(t1+275,80,360,60,TRUE);
m_check1.MoveWindow(t1+281,100,50,20,TRUE);
m_check_tcpc.MoveWindow(t1+340,100,90,20,TRUE);
m_bk_check.MoveWindow(t1+430,100,90,20,TRUE);
m_check2.MoveWindow(t1+530,100,90,20,TRUE);
//m_info.MoveWindow(t1+200,64,20,60.TRUE);
m_info.MoveWindow(t1+314+90,50,180,30,TRUE);

m_edit_tcdbcmd.MoveWindow(t1+8,150,550,22);
m_btn_docmd.MoveWindow(t1+562,145,96,32);
m_edit1.MoveWindow(t1+8,150+36,650,t2 - 150 - 40 -36);
this->GetWindowRect(rect);
this->MoveWindow(rect.left,rect.top,t1 + 670,t2,TRUE);

}

this->Invalidate();
////////////////////////////////////////////////////////////////////////

}

void CTdebugDlg::OnButton4() 

{
// TODO: Add your control notification handler code here
grid_mode = (grid_mode + 1)%2;
grid_display();

if(grid_mode == 0)
{
m_btn_mode.SetWindowText("SeeFunctions");
}
else
{
m_btn_mode.SetWindowText("SeeVariables");
}

}

void CTdebugDlg::OnSetfocusEdit3() 

{
// TODO: Add your control notification handler code here

/* CString str;

unsigned char buf[4];
long addr;

if(m_usb_handle != NULL)
{

m_edit2.GetWindowText(str);
addr = strtol(str,NULL,16);

str.Format("## read %04x",addr);
this->debug_print(str);

ReadMem(m_usb_handle,addr,buf,1,1);
str.Format("%02x",buf[0]);

m_edit3.SetWindowText(str);

m_edit3.SetSel(0,-1);
}
else
{

MessageBox(" no usb device!");
}*/

}

void CTdebugDlg::OnKillfocusEdit2() 

{
// TODO: Add your control notification handler code here
CString str;

unsigned char buf[4];
long addr;
int     byte_length;
CString  str_device;

if(m_comb_type.GetCurSel() == 0)
{
byte_length=1;
}
else if(m_comb_type.GetCurSel() == 1)
{
byte_length=2;
}
else
{
byte_length=4;
}

//if(m_comb_device.GetCurSel()==0)
if(device_type == 4)
{
str_device="";
}
else
{
str_device="-u";
}

if(m_usb_handle != NULL)
{

m_edit2.GetWindowText(str);
addr = strtol(str,NULL,16);
m_edit3.SetWindowText("");

switch(m_comb_bus.GetCurSel())
{
//CString  str;
case 0:   // read core
str.Format("## read %04x",addr);
this->debug_print(str);
ReadMem(m_usb_handle,addr,buf,byte_length,device_type);
str.Format("%02x",buf[0]);
//m_edit3.SetWindowText(str);
//this->debug_print(str);
this->debug_printx(buf,byte_length);
//this->debug_print("");
m_edit3.SetSel(0,-1);
break;
/*case 1:  //read analog
str.Format("ra %04x -s %d %s",addr,byte_length,str_device);
tcdb_cmd(str);
break;*/
case 1:  // read flash
str.Format("rf %04x -s %d %s",addr,byte_length,str_device);
tcdb_cmd(str);
break;
default:
break;
}
}
else
{

// MessageBox(" no usb device!");
debug_print("no usb device!");
}

}

SECURITY_ATTRIBUTES g_sa = {sizeof(SECURITY_ATTRIBUTES),NULL,TRUE};  

void CTdebugDlg::tcdb_cmd(CString str) 

{
// TODO: Add your control notification handler code here

DWORD dwWritten = 0;

/* char cmdLine[2048];
//sprintf (cmdLine, "\"%s\"", m_AppName);

CString cCmd = m_dir + "\\tcdb.exe";
//+ " set prj " + m_mPrj + " " + m_mLib;
sprintf (cmdLine, "\"%s  %s ",cCmd, str);
sprintf (cmdLine, "\"%s  rf 0 -s 10",cCmd, str); */

HANDLE hWritePipe, hReadPipe;  

    if ( !CreatePipe( &hReadPipe, &hWritePipe, &g_sa, 2048*10 ) )  

    {  

        return;  

    }  
CString str_tmp;
//CString cCmd = m_dir + "\\tcdb.exe";
CString cCmd = this->m_exe_dir + "\\tcdb.exe";

    CString strCmdLine;  
strCmdLine.Format("%s %s",cCmd,str);

    // create an environment for the CGI process....   

    DWORD dwCreateFlags = 0;  

  

    PROCESS_INFORMATION pi;  

    STARTUPINFO si = {0};  

    si.cb = sizeof(si);  

    si.dwFlags = STARTF_USESHOWWINDOW | STARTF_USESTDHANDLES;  

    si.wShowWindow = SW_HIDE;  

    si.hStdInput = hReadPipe;  

    si.hStdOutput = hWritePipe;  

    si.hStdError = hWritePipe;  

    BOOL bOk = CreateProcess( NULL, strCmdLine.GetBuffer(1),  

        NULL, NULL, TRUE,  

        dwCreateFlags, NULL,  

        "c:\\", &si, &pi );  

     

//Sleep(1000);

    // if created....   

    if ( bOk )  

    {  

      

        while(1)
{
DWORD ExitCode;
GetExitCodeProcess(pi.hProcess,&ExitCode);
Sleep(300);
if(ExitCode==STILL_ACTIVE)
{

 
char buffer[1028]={0};
buffer[1024]=0;
ReadFile(hReadPipe, buffer,1024,&dwWritten, NULL );  

       
str_tmp.Format("%s",buffer);
this->debug_print(str_tmp);  
//The process is still running
}
else
{
break;
}
//The prcoces has terminated,the ExitCode is its exitcode 

}

        // wait for either cancel or process done....   

        //WaitForSingleObject(pi.hProcess,INFINITE);  

        // release our hold on the thread....   

Sleep(1000);

        CloseHandle( pi.hThread );  

        // send the body of the post to the stdin....

         

// { 

    // we're at the end of the file 
//while(0) 
while(dwWritten==1024)
{  
// DWORD dwWritten = 0; 
char buffer[1028]={0};
buffer[1024]=0;
//Sleep(500);
ReadFile(hReadPipe, buffer,1024,&dwWritten, NULL );  

        //m_msg = buffer; 

str_tmp.Format("%s",buffer);
this->debug_print(str_tmp);
// }
if (dwWritten < 1024) 
{
break;
}


    //  AfxMessageBox(m_msg);   

        //UpdateData(FALSE);  

        // close our hold on it....   

        //CloseHandle( pi.hProcess );  

    }  
else
{
debug_print("tcdb.exe not find!\r\n");
}
//strCmdLine.ReleaseBuffer(); 

}

HBRUSH CTdebugDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) 

{
HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);

// TODO: Change any attributes of the DC here
if(pWnd->GetDlgCtrlID()==IDC_STATIC_INF)
{
pDC->SetTextColor(RGB(0,0,255));

// TODO: Return a different brush if the default is not desired
return hbr;

}

void CTdebugDlg::OnTimer(UINT nIDEvent) 

{

// TODO: Add your message handler code here and/or call default
unsigned char  buf[10];
CString  str;
int  rt;

if(m_check2.GetCheck())

{

// rt = ReadMem(m_usb_handle,0x602,buf,1,device_type); // read mcu ctl reg
rt = ReadMem(m_usb_handle,0x602,buf,1,1); // read mcu ctl reg

}

if(nIDEvent == 1)//////////////////////timer 1//////////////////////////////////////////////

{
if(m_check2.GetCheck())
{
if(device_type == 4)
{
if(rt == 0)
{
m_info.SetWindowText("no swire slave device");
rt = ReadMem(m_usb_handle,0x602,buf,1,1); // read mcu ctl reg
if(rt == 0)
{
m_info.SetWindowText("no Evk and swire slave device");
}
//this->debug_print(" ## Error:  NO  usb device!!!  ##\r\n## please restart the porgram!");
//this->Invalidate();
}

}
else
{
if(rt == 0)
{
m_info.SetWindowText("no usb device");
//this->debug_print(" ## Error:  NO  usb device!!!  ##\r\n## please restart the porgram!");
//this->Invalidate();
}
}
}

if(m_check1.GetCheck())
{
debug_print("auto read register..");
OnButton1();
}

//if((this->m_bk_check.GetCheck()) && (mcu_status == MCU_ST_RUN))

}

// check break point
if((mcu_status == MCU_ST_RUN))
{
int i;
unsigned long pc_now;
ReadMem(m_usb_handle,0x613,buf,1,device_type);
if((buf[0] & 0x80) != 0)
{ debug_print("##break point:");

ReadMem(m_usb_handle,0x6bc,buf,4,device_type); // read mcu ctl reg
g_type.byte[0] = buf[0];
g_type.byte[1] = buf[1];
g_type.byte[2] = buf[2];
g_type.byte[3] = buf[3];

pc_now = (g_type.us_long) & 0xffffff;

str.Format("
pc now is : % 08x",pc_now);
debug_print(str);

for(i = 0; i< g_f.cnt;i++)
{
if((pc_now >= g_f.addr[i]) && (pc_now < g_f.addr[i] + g_f.len[i]))
{
if(pc_now == g_f.addr[i])
{
str.Format("
stop at function::  %s()\n",g_f.name[i]);
}
else
{
str.Format("
stop at end(end - 0x18) of function::  %s()",g_f.name[i]);
}
debug_print(str);
break;

}
}
//debug_print("##break point:");
mcu_status = MCU_ST_BREAK;

//OnButton5();
this->m_btn_run.EnableWindow(true);
this->m_btn_stop.EnableWindow(false);

}

}

//else if(nIDEvent == 2) //////////////////////////timer 2 ////////////////////////////////////

{
if(m_check_tcpc.GetCheck())
{ int i;
unsigned long pc_now;
//ReadMem(m_usb_handle,0x613,buf,1,1); // read mcu ctl reg
ReadMem(m_usb_handle,0x6bc,buf,4,device_type); // read mcu ctl reg
g_type.byte[0] = buf[0];
g_type.byte[1] = buf[1];
g_type.byte[2] = buf[2];
g_type.byte[3] = buf[3];

pc_now = (g_type.us_long) & 0xffffff;

str.Format("auto pc read is : %08x\r\n",pc_now);
debug_print(str);

for(i = 0; i< g_f.cnt;i++)
{
if((pc_now >= g_f.addr[i]) && (pc_now < g_f.addr[i] + g_f.len[i]))
{
str.Format("mcu now in:  %s()\r\n",g_f.name[i]);
debug_print(str);
break;

}
}

}

}

// CDialog::OnTimer(nIDEvent);

CDialog::OnTimer(nIDEvent);
MSG msg;
while(::PeekMessage(&msg, m_hWnd, WM_TIMER, WM_TIMER, PM_REMOVE));

}

void CTdebugDlg::OnButton3() 

{
// TODO: Add your control notification handler code here
unsigned char  buf[10];
int i;

//str.Format("## mcu restart --");
debug_print("## mcu restart --\n");

/* this->bk_ctl[0] = 0;
this->bk_ctl[1] = 0;
this->bk_ctl[2] = 0;
this->bk_ctl[3] = 0;

buf[0] = 0x00;
WriteMem(m_usb_handle,0x613,buf,1,device_type); // mcu run
WriteMem(m_usb_handle,0x617,buf,1,device_type); // mcu run
WriteMem(m_usb_handle,0x61b,buf,1,device_type); // mcu run
WriteMem(m_usb_handle,0x61f,buf,1,device_type); // mcu run

buf[0] = 0x80;
WriteMem(m_usb_handle,0x613,buf,1,device_type); // mcu dereset */

// OnButton6();
///////////////////////enable all break point //////////////////////

/*
buf[0] = 0x89;
WriteMem(m_usb_handle,0x602,buf,1,device_type); // mcu reset

if(this->m_bk_check.GetCheck())
{
buf[0] = 0x01;
for(i=0;i<g_f.cnt;i++)
{
if((g_f.value[i]>>4) != 0)
{
bk_ctl[g_f.value[i]>>4]
= 1;
WriteMem(m_usb_handle,(g_f.value[i]>>2)+0x613,buf,1,device_type); // mcu run
}

}
buf[0] = 0x81;
WriteMem(m_usb_handle,0x613,buf,1,device_type); // mcu run

}

*/

    ///////////////////////////////////////////////////////////////////////////
buf[0] = 0x84;
WriteMem(m_usb_handle,0x602,buf,1,device_type); // mcu dereset

/* ReadMem(m_usb_handle,0x613,buf,1,device_type);
buf[0] = buf[0] | 80;
WriteMem(m_usb_handle,0x613,buf,1,device_type); // mcu break run
buf[0] = 0x05;
WriteMem(m_usb_handle,0x602,buf,1,device_type); // mcu dereset
buf[0] = 0x88;
WriteMem(m_usb_handle,0x602,buf,1,device_type); // mcu dereset */

/* if(mcu_status == MCU_ST_RUN)
{
m_btn_run.EnableWindow(false);
m_btn_stop.EnableWindow(true);
m_info.SetWindowText(" run..");
}
else 
{
m_btn_run.EnableWindow(true);
m_btn_stop.EnableWindow(false);
m_info.SetWindowText(" stop..");
} */

mcu_status = MCU_ST_RUN;

}

void CTdebugDlg::OnButton5() 

{
// TODO: Add your control notification handler code here

unsigned char  buf[10];
int i;
unsigned long
pc_now;
CString  str;

ReadMem(m_usb_handle,0x602,buf,1,device_type); // read mcu ctl reg

buf[0] = buf[0] | 0x02;
WriteMem(m_usb_handle,0x602,buf,1,device_type); // mcu stall

m_btn_run.EnableWindow(true);
m_btn_stop.EnableWindow(false);

m_info.SetWindowText("mcu stop!");

if(mcu_status == MCU_ST_RUN)
{
ReadMem(m_usb_handle,0x6bc,buf,4,device_type); // read mcu ctl reg
g_type.byte[0] = buf[0];
g_type.byte[1] = buf[1];
g_type.byte[2] = buf[2];
g_type.byte[3] = buf[3];

pc_now = (g_type.us_long) & 0xffffff;

str.Format("pc is : %08x",pc_now);
debug_print(str);

for(i = 0; i< g_f.cnt;i++)
{
if((pc_now >= g_f.addr[i]) && (pc_now < g_f.addr[i] + g_f.len[i]))
{
str.Format("## mcu stop in:  %s()",g_f.name[i]);
debug_print(str);
break;

}
}
}
mcu_status = MCU_ST_STOP;

}

void CTdebugDlg::OnButton6() 

{
// TODO: Add your control notification handler code here
unsigned char  buf[10];

{
ReadMem(m_usb_handle,0x613,buf,1,device_type);
buf[0] = buf[0] | 80;
WriteMem(m_usb_handle,0x613,buf,1,device_type); // mcu break run

}

ReadMem(m_usb_handle,0x602,buf,1,device_type); // read mcu ctl reg

buf[0] = buf[0] & 0xfd;
WriteMem(m_usb_handle,0x602,buf,1,device_type); // mcu run

//if(mcu_status == MCU_ST_BREAK)

m_btn_run.EnableWindow(false);
m_btn_stop.EnableWindow(true);

mcu_status = MCU_ST_RUN;

m_info.SetWindowText("mcu run..");

}

void CTdebugDlg::OnCheck3() 

{
// TODO: Add your control notification handler code here
unsigned char buf[10];
int i;

if(bk_en == false)
{
bk_en = true;

}
else 
{
bk_en = false;

}

}

void CTdebugDlg::OnButton7() 

{
// TODO: Add your control notification handler code here
m_edit1.SetSel(0,-1);
m_edit1.ReplaceSel("");
m_edit1.SetWindowText("## print window  clear ");

}

void CTdebugDlg::OnButton8() 

{
// TODO: Add your control notification handler code here
int i;
unsigned char buf[10];

for(i=0;i<g_f.cnt;i++)
{   g_f.value[i] = 0;
m_grid.SetItemImage(i+1,3,1);
}
bkpoint = 0;
bk_ctl[0] = 0;
bk_ctl[1] = 0;
bk_ctl[2] = 0;
bk_ctl[3] = 0;
buf[0] = 0x00;
WriteMem(m_usb_handle,0x613,buf,1,device_type);
WriteMem(m_usb_handle,0x617,buf,1,device_type);
WriteMem(m_usb_handle,0x61b,buf,1,device_type);
WriteMem(m_usb_handle,0x61f,buf,1,device_type);

m_grid.Refresh();

}

void CTdebugDlg::swireusb(void)

{
unsigned char buf[4];
buf[0] = 0x80;
WriteMem(m_usb_handle,0x61,buf,1,1);
Sleep(1);

buf[0] = 0x00;
WriteMem(m_usb_handle,0x61,buf,1,1);
Sleep(1);

buf[0] = 0x20;
WriteMem(m_usb_handle,0x588,buf,1,1);
Sleep(1);

buf[0] = 0x20;
WriteMem(m_usb_handle,0x58c,buf,1,1);
Sleep(1);

buf[0] = 0x20;
WriteMem(m_usb_handle,0x584,buf,1,1);
Sleep(80);

buf[0] = 0x00;
WriteMem(m_usb_handle,0x584,buf,1,1);
Sleep(40);

buf[0] = 0x20;
WriteMem(m_usb_handle,0x584,buf,1,1);
Sleep(20);

buf[0] = 0x00;
WriteMem(m_usb_handle,0x58c,buf,1,1);
Sleep(1);

}

void CTdebugDlg::OnUsb() 

{
// TODO: Add your control notification handler code here
///////////open usb device ///////////////////////////////////////////
m_usb_handle = GetPrintDeviceHandle(m_usb_id);   // get usb printdevice.
if(m_usb_handle == NULL)
{
//MessageBox("no usb device!!");
debug_print("no usb device!!");
//str_info.Format("NO usb device");
m_info.SetWindowText("NO usb device");
}
else
{
if(IsEVKDevice(m_usb_handle))
{ m_info.SetWindowText("Evk device ok");
device_type = 4;
swireusb();

}
else
{ m_info.SetWindowText("usb device ok");
device_type = 1;
}

}
//////////////////////////////////////////////////////////////////////

////////////////open file ////////////////////////////////////////
{
char line[1024];
int cnt,para_cnt;
char *para[10];
unsigned char  f_st;

/* CString str;

str.Format("cp  -f *.lst  \"boot-.llst\" ");   // create a folder.
//system(str);
WinExec(str,SW_HIDE);
Sleep(200);
pf = fopen("boot-.llst","r");  */

// find the latest list file .
{

char* strTemp;
CString str;
CString final_filename;
HANDLE hDir;
FILETIME lpCreationTime; // 文件夹的创建时间
FILETIME lpLastAccessTime; // 对文件夹的最近访问时间
FILETIME lpLastWriteTime; // 文件夹的最近修改时间
FILETIME ftime_latest;
strTemp = new char[MAX_PATH];
GetCurrentDirectory(MAX_PATH, strTemp);//(strTemp为D:/Practice)

//m_cur_dir.Format("%s",strTemp);

WIN32_FIND_DATA ffd;
HANDLE hFind = INVALID_HANDLE_VALUE;
m_dir.Format("%s\\",strTemp);
this->get_exe_cur();
//m_dir = ".//";
CString strDir = m_dir+"*.lst";

hFind = FindFirstFile(strDir, &ffd);
if (hFind != INVALID_HANDLE_VALUE) {

      
//((CComboBox *) GetDlgItem (IDC_COMBO_BIN))->ResetContent();
ftime_latest.dwHighDateTime = 0;
ftime_latest.dwLowDateTime = 0;
final_filename = "nofile";
do {
if (!(ffd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) ){
//((CComboBox *) GetDlgItem (IDC_COMBO_BIN))->AddString (ffd.cFileName);
str = m_dir + ffd.cFileName;
hDir = CreateFile(str, GENERIC_READ,FILE_SHARE_READ|FILE_SHARE_DELETE,NULL, OPEN_EXISTING,FILE_FLAG_BACKUP_SEMANTICS, NULL);
if (GetFileTime(hDir, &lpCreationTime, &lpLastAccessTime, &lpLastWriteTime)){
FILETIME ftime;
SYSTEMTIME stime;
CString  tstr;
FileTimeToLocalFileTime(&lpLastWriteTime, &ftime);
// 转换成本地时间
FileTimeToSystemTime(&ftime, &stime);
// 转换成系统时间格式
//tstr.Format("the h %x l %x",ftime.dwHighDateTime,ftime.dwLowDateTime);
//tstr.Format("the file wtime:year%d,month%d,data%d,h%d,m%d,s%d",stime.wYear,stime.wMonth,stime.wDay,stime.wHour,stime.wMinute,stime.wSecond);
//MessageBox(tstr);
if(ftime.dwHighDateTime > ftime_latest.dwHighDateTime)
{
 final_filename = str;
 ftime_latest.dwHighDateTime = ftime.dwHighDateTime;
 ftime_latest.dwLowDateTime = ftime.dwLowDateTime;
}
else if(ftime.dwHighDateTime == ftime_latest.dwHighDateTime)
{
if(ftime.dwLowDateTime > ftime_latest.dwLowDateTime)
{
 final_filename = str; 
 ftime_latest.dwHighDateTime = ftime.dwHighDateTime;
 ftime_latest.dwLowDateTime = ftime.dwLowDateTime;
}
}

}
CloseHandle(hDir); // 关闭打开过的文件夹
}
}while (FindNextFile(hFind, &ffd) != 0);
//((CComboBox *) GetDlgItem (IDC_COMBO_BIN))->SetCurSel(0);
FindClose(hFind);
}

pf = fopen(final_filename,"r");

}

// end of list file find.

this->debug_print("##telink-semiconductor: tdebug tools:\r\n");
if(pf == NULL)
{
//MessageBox("no default init file find!!");
debug_print("no default init file find!!\r\n");
m_info.SetWindowText("no init file");
}
else
{ this->debug_print("tables update completed!\r\n");
f_st = 0;
memset(line,0,1024);
while( fgets( line, 1024, pf ) != NULL)   // get every line int the file
{
cnt = 0;
para[cnt] = strtok(line," \t");
do
{
para[++cnt] = strtok(NULL," \t");
} while ((cnt < 10) && (para[cnt] != NULL));
para_cnt = cnt;

if(strcmp(para[0],"SYMBOL") == 0)
{
f_st = 1;

g_v.cnt = 0;
g_f.cnt = 0;
}

if(strcmp(para[0],"00809208")==0)
{
int bug;
bug = 0x55;
}

if((f_st == 1) && (para_cnt== 6))
{
if((strcmp(para[1],"g") == 0) || (strcmp(para[1],"l") == 0))  //  if it is global variables or functions 
{
if(((strcmp(para[3],".bss") == 0) || (strcmp(para[3],".data") == 0)) && (strcmp(para[2],"O") == 0))
{
g_v.addr[g_v.cnt] = strtol(para[0],NULL,16); // get the adress
//g_v.addr[g_v.cnt] = (g_v.addr[g_v.cnt]&0xffff)|0x8000; // we need only the variable. /// ----> mj
g_v.addr[g_v.cnt] = (g_v.addr[g_v.cnt]&0xfffff); /// ----> mj
g_v.len[g_v.cnt] = strtol(para[4],NULL,16);
strcpy(g_v.name[g_v.cnt],para[5]);
g_v.cnt++;

}
else if((strcmp(para[3],".text") == 0) && (strcmp(para[2],"F") == 0))
{
g_f.addr[g_f.cnt] = strtol(para[0],NULL,16);
g_f.len[g_f.cnt] = strtol(para[4],NULL,16);
g_f.value[g_f.cnt] = 0;
strcpy(g_f.name[g_f.cnt],para[5]);
g_f.cnt++;

}

}
}

}

fclose(pf);
}

}
/////////////file read end ///////////////////////////////////////////

///////////////make the addr to be increase order/////////////////////
{
int i,j;
unsigned long
temp;
char temp_str[100];
for(i=1;i<g_v.cnt;i++)
for(j=i;j>0;j--)
{
if(g_v.addr[j] < g_v.addr[j-1])
{
temp = g_v.addr[j];
g_v.addr[j] = g_v.addr[j-1];
g_v.addr[j-1] = temp;

temp = g_v.len[j];
g_v.len[j] = g_v.len[j-1];
g_v.len[j-1] = temp;

strcpy(temp_str,g_v.name[j]);
strcpy(g_v.name[j],g_v.name[j-1]);
strcpy(g_v.name[j-1],temp_str);

}
}

}

bss_start = g_v.addr[0];
bss_end = g_v.addr[g_v.cnt-1] + g_v.len[g_v.cnt - 1];
////////////////////////////////// order by name /////////////////////////////////

{
int i,j;
unsigned long
temp;
char temp_str[100];
for(i=1;i<g_v.cnt;i++)
for(j=i;j>0;j--)
{
if(strcmp(g_v.name[j],g_v.name[j-1]) < 0)
{
temp = g_v.addr[j];
g_v.addr[j] = g_v.addr[j-1];
g_v.addr[j-1] = temp;

temp = g_v.len[j];
g_v.len[j] = g_v.len[j-1];
g_v.len[j-1] = temp;

strcpy(temp_str,g_v.name[j]);
strcpy(g_v.name[j],g_v.name[j-1]);
strcpy(g_v.name[j-1],temp_str);

}
}

}

{
int i,j;
unsigned long
temp;
char temp_str[100];
for(i=1;i<g_f.cnt;i++)
for(j=i;j>0;j--)
{
if(strcmp(g_f.name[j],g_f.name[j-1]) < 0)
{
temp = g_f.addr[j];
g_f.addr[j] = g_f.addr[j-1];
g_f.addr[j-1] = temp;

temp = g_f.len[j];
g_f.len[j] = g_f.len[j-1];
g_f.len[j-1] = temp;

strcpy(temp_str,g_f.name[j]);
strcpy(g_f.name[j],g_f.name[j-1]);
strcpy(g_f.name[j-1],temp_str);

}
}

}

////////////////////order end ////////////////////////////////////////

////////////////set the grid /////////////////////////////////////////

// m_ImageList.Create(MAKEINTRESOURCE(IDB_BITMAP1), 16, 2, RGB(255,255,255));

// m_grid.SetImageList(&m_ImageList);  //绑定grid控件和 图片列表

// m_grid.SetEditable(true);

m_grid.SetTextBkColor(RGB(0xFF, 0xFF, 0xE0)); //黄色背景
m_grid.SetTextColor(RGB(0x00, 0x00, 0xff));
//m_grid.SetFixedTextColor(RGB(0xff, 0x00, 0x00)); //表头的字体颜色

////////////set global config //////////////////
grid_mode = 0;
bkpoint = 0;
bk_en = false;

bk_ctl[0] = 0;
bk_ctl[1] = 0;
bk_ctl[2] = 0;
bk_ctl[3] = 0;

mcu_status = MCU_ST_RUN;

    /////////////////////////////////////////////////

grid_display();

////////set edit box///////////////////
//m_edit1.SetWindowText("print window:");
//m_edit2.SetWindowText("0000");

//set  timer /////////////
SetTimer(1,10,NULL); 
SetTimer(2,5,NULL);

m_btn_run.EnableWindow(false);
m_btn_stop.EnableWindow(true);
////////////edit box end //////////////

SetIcon(m_hIcon, TRUE);
// Set big icon
SetIcon(m_hIcon, FALSE);
// Set small icon

// TODO: Add extra initialization here

if(grid_mode == 0)
{
m_btn_mode.SetWindowText("SeeFunctions");
}
else
{
m_btn_mode.SetWindowText("SeeVariables");
}

}

void CTdebugDlg::OnGridEndEdit(NMHDR *pNotifyStruct, LRESULT* pResult)

{

    NM_GRIDVIEW* pItem = (NM_GRIDVIEW*) pNotifyStruct;

//    Trace(_T("End Edit on row %d, col %d\n"), pItem->iRow, pItem->iColumn);
CString  str;
int      index;
__int64   tv;
index = pItem->iRow - 1;
unsigned char buf[8];
unsigned char i;

//*pResult = (m_bRejectEditChanges)? -1 : 0;
if((this->grid_mode == 0) && (g_v.len[index] <= 8) && (pItem->iColumn == 3))
{
str = m_grid.GetItemText(pItem->iRow, pItem->iColumn);

tv = strtol(str,NULL,16);
str.Format("End Edit %x", tv);

for(i=0;i< g_v.len[index] ;i++)
{
buf[i] = tv & 0x00ff;
tv = tv >> 8;
}

WriteMem(m_usb_handle,g_v.addr[index],buf,g_v.len[index],device_type); // mcu run
this->debug_print(" write complete!");
//grid_display();
}

}

void CTdebugDlg::OnCheck2() 

{
// TODO: Add your control notification handler code here

/* if(m_check2.GetCheck())
MessageBox("true");
else
MessageBox("false"); */

}

///////////// for backup ///////////

/*

#if 0
///////////open usb device ///////////////////////////////////////////
m_usb_handle = GetPrintDeviceHandle();   // get usb printdevice.
if(m_usb_handle == NULL)
{
MessageBox("no usb device!!");
//str_info.Format("NO usb device");
m_info.SetWindowText("NO usb device");
}
else
{
if(IsEVKDevice(m_usb_handle))
{ m_info.SetWindowText("Evk device ok");
device_type = 4;
swireusb();
}
else
{ m_info.SetWindowText("usb device ok");
device_type = 1;
}

}

//////////////////////////////////////////////////////////////////////

////////////////open file ////////////////////////////////////////
{
char line[100];
int cnt,para_cnt;
char *para[10];
unsigned char  f_st;
CString str;

str.Format("cp  -f *.lst  \"boot-.llst\" ");   // create a folder.
//system(str);
WinExec(str,SW_HIDE);
Sleep(200);

pf = fopen("boot-.llst","r");
if(pf == NULL)
{
MessageBox("no  list file find!!");
m_info.SetWindowText("no list file");
}
else
{
f_st = 0;
while( fgets( line, 100, pf ) != NULL)   // get every line int the file
{
cnt = 0;
para[cnt] = strtok(line," \t");
do
{
para[++cnt] = strtok(NULL," \t");
} while ((cnt < 10) && (para[cnt] != NULL));
para_cnt = cnt;

if(strcmp(para[0],"SYMBOL") == 0)
{
f_st = 1;

g_v.cnt = 0;
g_f.cnt = 0;
}

if((f_st == 1) && (para_cnt== 6))
{
if((strcmp(para[1],"g") == 0) || (strcmp(para[1],"l") == 0))  //  if it is global variables or functions 
{
if(((strcmp(para[3],".bss") == 0) || (strcmp(para[3],".data") == 0)) && (strcmp(para[2],"O") == 0))
{
g_v.addr[g_v.cnt] = strtol(para[0],NULL,16);
g_v.len[g_v.cnt] = strtol(para[4],NULL,16);
strcpy(g_v.name[g_v.cnt],para[5]);
g_v.cnt++;

}
else if((strcmp(para[3],".text") == 0) && (strcmp(para[2],"F") == 0))
{
g_f.addr[g_f.cnt] = strtol(para[0],NULL,16);
g_f.len[g_f.cnt] = strtol(para[4],NULL,16);
g_f.value[g_f.cnt] = 0;
strcpy(g_f.name[g_f.cnt],para[5]);
g_f.cnt++;

}

}
}

}

fclose(pf);
}

}
/////////////file read end ///////////////////////////////////////////
///////////////make the addr to be increase order/////////////////////
{
int i,j;
unsigned long
temp;
char temp_str[100];
for(i=1;i<g_v.cnt;i++)
for(j=i;j>0;j--)
{
if(g_v.addr[j] < g_v.addr[j-1])
{
temp = g_v.addr[j];
g_v.addr[j] = g_v.addr[j-1];
g_v.addr[j-1] = temp;

temp = g_v.len[j];
g_v.len[j] = g_v.len[j-1];
g_v.len[j-1] = temp;

strcpy(temp_str,g_v.name[j]);
strcpy(g_v.name[j],g_v.name[j-1]);
strcpy(g_v.name[j-1],temp_str);

}
}

}

bss_start = g_v.addr[0];
bss_end = g_v.addr[g_v.cnt-1] + g_v.len[g_v.cnt - 1];
////////////////////////////////// order by name /////////////////////////////////

{
int i,j;
unsigned long
temp;
char temp_str[100];
for(i=1;i<g_v.cnt;i++)
for(j=i;j>0;j--)
{
if(strcmp(g_v.name[j],g_v.name[j-1]) < 0)
{
temp = g_v.addr[j];
g_v.addr[j] = g_v.addr[j-1];
g_v.addr[j-1] = temp;

temp = g_v.len[j];
g_v.len[j] = g_v.len[j-1];
g_v.len[j-1] = temp;

strcpy(temp_str,g_v.name[j]);
strcpy(g_v.name[j],g_v.name[j-1]);
strcpy(g_v.name[j-1],temp_str);

}
}

}

{
int i,j;
unsigned long
temp;
char temp_str[100];
for(i=1;i<g_f.cnt;i++)
for(j=i;j>0;j--)
{
if(strcmp(g_f.name[j],g_f.name[j-1]) < 0)
{
temp = g_f.addr[j];
g_f.addr[j] = g_f.addr[j-1];
g_f.addr[j-1] = temp;

temp = g_f.len[j];
g_f.len[j] = g_f.len[j-1];
g_f.len[j-1] = temp;

strcpy(temp_str,g_f.name[j]);
strcpy(g_f.name[j],g_f.name[j-1]);
strcpy(g_f.name[j-1],temp_str);

}
}

}

////////////////////order end ////////////////////////////////////////

////////////////set the grid /////////////////////////////////////////
m_ImageList.Create(MAKEINTRESOURCE(IDB_BITMAP1), 16, 2, RGB(255,255,255));
m_grid.SetImageList(&m_ImageList);  //绑定grid控件和 图片列表

// m_grid.SetEditable(true);

m_grid.SetTextBkColor(RGB(0xFF, 0xFF, 0xE0)); //黄色背景
m_grid.SetTextColor(RGB(0x00, 0x00, 0xff));
//m_grid.SetFixedTextColor(RGB(0xff, 0x00, 0x00)); //表头的字体颜色

////////////set global config //////////////////
grid_mode = 0;
bkpoint = 0;
bk_en = false;

bk_ctl[0] = 0;
bk_ctl[1] = 0;
bk_ctl[2] = 0;
bk_ctl[3] = 0;

mcu_status = MCU_ST_RUN;

    /////////////////////////////////////////////////

grid_display();

////////set edit box///////////////////
m_edit1.SetWindowText("print window:");
m_edit2.SetWindowText("0000");

//set  timer /////////////
SetTimer(1,1000,NULL); 
SetTimer(2,5,NULL);

m_btn_run.EnableWindow(false);
m_btn_stop.EnableWindow(true);
////////////edit box end //////////////

SetIcon(m_hIcon, TRUE);
// Set big icon
SetIcon(m_hIcon, FALSE);
// Set small icon

// TODO: Add extra initialization here

if(grid_mode == 0)
{
m_btn_mode.SetWindowText("SeeFunctions");
}
else
{
m_btn_mode.SetWindowText("SeeVariables");
}

#endif

  */

///////////////end of backup/////////

// do tcdb command

void CTdebugDlg::OnButton9() 

{
// TODO: Add your control notification handler code here
CString str;
m_edit_tcdbcmd.GetWindowText(str);
if(strcmp(str,"") != 0)
{
tcdb_cmd(str);
}

}

void CTdebugDlg::get_exe_cur(void) 

{
//CString str;
// TODO: Add your control notification handler code here
//定义程序路径的字符数组
char szEexFullpath[MAX_PATH];
char szExeDir[MAX_PATH];//得到EXE所有目录(包含"\")
//得到程序的模块句柄
HMODULE hMyModule = GetModuleHandle(NULL);
//得到程序的路径
DWORD dwLen = GetModuleFileName(hMyModule,szEexFullpath,MAX_PATH);
//计算程序的路径(倒数查找最后一个"\")
char * pPatch = &szEexFullpath[dwLen]; //szexepatch + dwLen;
while (pPatch!=NULL && *pPatch!='\\')
{
pPatch--;
}
//得到最后一个反斜扛之后再往后加1,并把它设置为0,这样后面的数据对于字符数组就会忽略
pPatch++;
*pPatch=0;
strcpy(szExeDir,szEexFullpath);
m_exe_dir.Format("%s",szExeDir);

}

void CTdebugDlg::OnButton10() 

{
// TODO: Add your control notification handler code here
unsigned char  buf[10];

ReadMem(m_usb_handle,0x602,buf,1,device_type); // read mcu ctl reg

buf[0] = buf[0] | 0x02;
WriteMem(m_usb_handle,0x602,buf,1,device_type); // mcu run stop mcu 

{
ReadMem(m_usb_handle,0x613,buf,1,device_type);
buf[0] = buf[0] | 80;
WriteMem(m_usb_handle,0x613,buf,1,device_type); // mcu break run

}

//if(mcu_status == MCU_ST_BREAK)

m_btn_run.EnableWindow(true);
m_btn_stop.EnableWindow(false);

mcu_status = MCU_ST_STOP;

m_info.SetWindowText("mcu stop..");

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐