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

📄 breakpoints.c

📁 eCos操作系统源码
💻 C
字号:
//==========================================================================////      breakpoints.c////      Support aribtrary set of breakpoints.////==========================================================================//####ECOSGPLCOPYRIGHTBEGIN####// -------------------------------------------// This file is part of eCos, the Embedded Configurable Operating System.// Copyright (C) 1998, 1999, 2000, 2001, 2002 Red Hat, Inc.//// eCos 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 or (at your option) any later version.//// eCos 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 eCos; if not, write to the Free Software Foundation, Inc.,// 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.//// As a special exception, if other files instantiate templates or use macros// or inline functions from this file, or you compile this file and link it// with other works to produce a work based on this file, this file does not// by itself cause the resulting work to be covered by the GNU General Public// License. However the source code for this file must still be made available// in accordance with section (3) of the GNU General Public License.//// This exception does not invalidate any other reasons why a work based on// this file might be covered by the GNU General Public License.//// Alternative licenses for eCos may be arranged by contacting Red Hat, Inc.// at http://sources.redhat.com/ecos/ecos-license/// -------------------------------------------//####ECOSGPLCOPYRIGHTEND####//==========================================================================//#####DESCRIPTIONBEGIN####//// Author(s):    // Contributors: gthomas// Date:         1999-10-20// Purpose:      // Description:  //               ////####DESCRIPTIONEND####////=========================================================================#include "board.h"#ifndef USE_ECOS_HAL_BREAKPOINTS#include <stdlib.h>#ifdef HAVE_BSP#include <bsp/bsp.h>#include <bsp/cpu.h>#endif#include "monitor.h"#include "tservice.h"#include "stub-tservice.h"#include "fmt_util.h"static struct bp *last_bp_ptr;static struct bp *first_bp_ptr;#ifdef NO_MALLOCstatic struct bp *free_bp_list;static struct bp bp_list[MAX_NUM_BP];static int       curr_bp_num;#endifintadd_mon_breakpoint (mem_addr_t location){  struct bp *ptr;  struct bp *new_bp_ptr;  for (ptr = first_bp_ptr; ptr != NULL; ptr = ptr->next)    {      if (MEM_ADDR_EQ_P (ptr->address, location))	return 1;    }#ifdef NO_MALLOC  if (free_bp_list != NULL)    {      new_bp_ptr = free_bp_list;      free_bp_list = new_bp_ptr->next;    }  else    {      if (curr_bp_num < MAX_NUM_BP)	{	  new_bp_ptr = &bp_list[curr_bp_num++];	}      else	{	  xprintf ("No more breakpoints\n");	  return 1;	}    }#else  new_bp_ptr = (struct bp *)malloc (sizeof (struct bp));#endif  if (first_bp_ptr == NULL)    {      first_bp_ptr = new_bp_ptr;    }  else    {      last_bp_ptr->next = new_bp_ptr;    }  last_bp_ptr = new_bp_ptr;  last_bp_ptr->next = NULL;  last_bp_ptr->address = location;  last_bp_ptr->in_memory = 0;  return 0;}voidinstall_breakpoints (void){  struct bp *ptr = first_bp_ptr;  while (ptr != NULL)    {      set_breakpoint (ptr);      ptr = ptr->next;    }}voidclear_breakpoints (void){  struct bp *ptr = first_bp_ptr;  while (ptr != NULL)    {      clear_breakpoint (ptr);      ptr = ptr->next;    }}intshow_breakpoints (void){  struct bp *ptr;  for (ptr = first_bp_ptr; ptr != NULL; ptr = ptr->next)    {      char buf[20];      addr2str (&ptr->address, buf);      xprintf ("%s\n", buf);    }    return 0;}int clear_mon_breakpoint (mem_addr_t location){  int error = 0;  struct bp *ptr = first_bp_ptr;  struct bp *prev_ptr = NULL;  /* Scan the list looking for the address to clear */  while (ptr != NULL && !MEM_ADDR_EQ_P (ptr->address, location))    {      /* keep a pointer one behind the current position */      prev_ptr = ptr;      ptr = ptr->next;    }  if (ptr == NULL)    {      xprintf ("That address has no breakpoint on it.\n");      error = 1;    }  else    {      /* Just in case it's still in memory. */      clear_breakpoint (ptr);      /* now we'll point the previous bp->next at the one after the one 	 we're deleting, unless there is no previous bp. */      if (prev_ptr != NULL)	{	  prev_ptr->next = ptr->next;	}      if (first_bp_ptr == ptr)	first_bp_ptr = ptr->next;      if (last_bp_ptr == ptr)	last_bp_ptr = prev_ptr;      /* eliminate the offending bp struct */#ifdef NO_MALLOC      ptr->next = free_bp_list;      free_bp_list = ptr;#else      free (ptr);#endif    }  return error;}	#endif /* USE_ECOS_HAL_BREAKPOINTS */

⌨️ 快捷键说明

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