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

📄 ctrl.c

📁 ARM入门的好帮手.包含了从简单到相对较复杂的程序.
💻 C
📖 第 1 页 / 共 2 页
字号:
/* -*-C-*- * * $Revision: 1.8.6.1 $ *   $Author: rivimey $ *     $Date: 1997/12/10 18:49:55 $ * * Copyright (c) 1995 Advanced RISC Machines Limited * All Rights Reserved. * * ctrl.c: Implementation of ADP_Control subreasons. */#include "angel.h"#include "adp.h"#include "debug.h"#include "debughwi.h"#include "debugos.h"#include "logging.h"#include "msgbuild.h"#include "sys.h"static int ctrl_nop(p_Buffer * buffer, void *stateptr){    /* Return an RDIError_NoError to indicate ctrl calls are available. */    int debugID, OSinfo1, OSinfo2;    word status = RDIError_NoError;    IGNORE(stateptr);    LogInfo(LOG_CTRL, ( "ctrl_nop()\n"));    unpack_message(BUFFERDATA(*buffer) + 4, "%w%w%w", &debugID, &OSinfo1,                   &OSinfo2);    return msgsend(CI_HADP, "%w%w%w%w%w%w", (ADP_Control | TtoH),                   debugID, OSinfo1, OSinfo2, ADP_Ctrl_NOP, status);}static int ctrl_vectorcatch(p_Buffer * buffer, void *stateptr){    /* Specify which hardware exceptions should be reported to the debugger. */    int debugID, OSinfo1, OSinfo2, subreason;    word status = RDIError_NoError;    IGNORE(stateptr);    unpack_message(BUFFERDATA(*buffer) + 4, "%w%w%w%w%w", &debugID, &OSinfo1,                   &OSinfo2, &subreason, &debug_VectorCatch);    LogInfo(LOG_CTRL, ( "ctrl_vectorcatch(vectorcatch = 0x%x)\n", debug_VectorCatch));    status = angelOS_VectorCatch(OSinfo1, OSinfo2, debug_VectorCatch);    return msgsend(CI_HADP, "%w%w%w%w%w%w", (ADP_Control | TtoH),                   debugID, OSinfo1, OSinfo2, ADP_Ctrl_VectorCatch, status);}static int ctrl_pointstatus_watch(p_Buffer * buffer, void *stateptr){    /* Return information about a watchpoint given a handle. */    int debugID, OSinfo1, OSinfo2, subreason;    word handle;    word status, hwresource, type;    IGNORE(stateptr);    unpack_message(BUFFERDATA(*buffer) + 4, "%w%w%w%w%w", &debugID, &OSinfo1,                   &OSinfo2, &subreason, &handle);    LogInfo(LOG_CTRL, ( "ctrl_pointstatus_watch(handle = 0x%x)\n", handle));    status = angelOS_WatchPointStatus(OSinfo1, OSinfo2,                                      handle, &hwresource, &type);    return msgsend(CI_HADP, "%w%w%w%w%w%w%w%w",                   (ADP_Control | TtoH), debugID, OSinfo1, OSinfo2,                   ADP_Ctrl_PointStatus_Watch, status, hwresource, type);}static int ctrl_pointstatus_break(p_Buffer * buffer, void *stateptr){    /* Return information about a breakpoint given a handle. */    int debugID, OSinfo1, OSinfo2, subreason;    word status, hwresource, type;    word handle;    IGNORE(stateptr);    unpack_message(BUFFERDATA(*buffer) + 4, "%w%w%w%w%w", &debugID, &OSinfo1,                   &OSinfo2, &subreason, &handle);    LogInfo(LOG_CTRL, ( "ctrl_pointstatus_break(handle = 0x%x)\n", handle));    status = angelOS_BreakPointStatus(OSinfo1, OSinfo2,                                      handle, &hwresource, &type);    return msgsend(CI_HADP, "%w%w%w%w%w%w%w%w",                   (ADP_Control | TtoH), debugID, OSinfo1, OSinfo2,                   ADP_Ctrl_PointStatus_Break, status, hwresource, type);}static int ctrl_semihosting_setstate(p_Buffer * buffer, void *stateptr){    /* Set whether or not semi-hosting is enabled. */    int debugID, OSinfo1, OSinfo2, subreason;    word semihosting_state, status;    IGNORE(stateptr);    unpack_message(BUFFERDATA(*buffer) + 4, "%w%w%w%w%w", &debugID, &OSinfo1,                   &OSinfo2, &subreason, &semihosting_state);    LogInfo(LOG_CTRL, ("ctrl_semihosting_setstate(state = %d)\n", semihosting_state));    status = angelOS_SemiHosting_SetState(OSinfo1, OSinfo2, semihosting_state);    return msgsend(CI_HADP, "%w%w%w%w%w%w",                   (ADP_Control | TtoH), debugID, OSinfo1, OSinfo2,                   ADP_Ctrl_SemiHosting_SetState, status);}static int ctrl_semihosting_getstate(p_Buffer * buffer, void *stateptr){    /* Reads whether or not semi-hosting is enabled. */    int debugID, OSinfo1, OSinfo2, subreason;    word semihosting_state, status;    IGNORE(stateptr);    unpack_message(BUFFERDATA(*buffer) + 4, "%w%w%w%w", &debugID, &OSinfo1,                   &OSinfo2, &subreason);    status = angelOS_SemiHosting_GetState(OSinfo1, OSinfo2,                                          &semihosting_state);    LogInfo(LOG_CTRL, ( "ctrl_semihosting_getstate -> %d\n", semihosting_state));        return msgsend(CI_HADP, "%w%w%w%w%w%w%w",                   (ADP_Control | TtoH), debugID, OSinfo1, OSinfo2,                   ADP_Ctrl_SemiHosting_GetState, status, semihosting_state);}static int ctrl_semihosting_setvector(p_Buffer * buffer, void *stateptr){    /* Set the semi-hosting vector. */    int debugID, OSinfo1, OSinfo2, subreason;    word semihosting_vector, status;    IGNORE(stateptr);    unpack_message(BUFFERDATA(*buffer) + 4, "%w%w%w%w%w", &debugID, &OSinfo1,                   &OSinfo2, &subreason, &semihosting_vector);    LogInfo(LOG_CTRL, ( "ctrl_semihosting_setvector(vec = 0x%x)\n", semihosting_vector));    status = angelOS_SemiHosting_SetVector(OSinfo1, OSinfo2,                                           semihosting_vector);    return msgsend(CI_HADP, "%w%w%w%w%w%w",                   (ADP_Control | TtoH), debugID, OSinfo1, OSinfo2,                   ADP_Ctrl_SemiHosting_SetVector, status);}static int ctrl_semihosting_getvector(p_Buffer * buffer, void *stateptr){    /* Reads the value of the semi-hosting vector. */    int debugID, OSinfo1, OSinfo2, subreason;    word semihosting_vector, status;    IGNORE(stateptr);    unpack_message(BUFFERDATA(*buffer) + 4, "%w%w%w%w", &debugID, &OSinfo1,                   &OSinfo2, &subreason);    status = angelOS_SemiHosting_GetVector(OSinfo1, OSinfo2,                                           &semihosting_vector);    LogInfo(LOG_CTRL, ( "ctrl_semihosting_getvector -> %08x\n", semihosting_vector));    return msgsend(CI_HADP, "%w%w%w%w%w%w%w",                   (ADP_Control | TtoH), debugID, OSinfo1, OSinfo2,                   ADP_Ctrl_SemiHosting_GetVector, status, semihosting_vector);}static int ctrl_log(p_Buffer * buffer, void *stateptr){    /* Read logging level. */    int debugID, OSinfo1, OSinfo2;    word status = RDIError_NoError;    word logsetting;    IGNORE(stateptr);    unpack_message(BUFFERDATA(*buffer) + 4, "%w%w%w", &debugID, &OSinfo1,                   &OSinfo2);    LogInfo(LOG_CTRL, ( "ctrl_log -> 0x%x\n", logsetting));    status = angelOS_Ctrl_Log(OSinfo1, OSinfo2, &logsetting);    return msgsend(CI_HADP, "%w%w%w%w%w%w%w",                   (ADP_Control | TtoH), debugID, OSinfo1, OSinfo2,                   ADP_Ctrl_Log, status, logsetting);}static int ctrl_setlog(p_Buffer * buffer, void *stateptr){    /* Set logging level. */    int debugID, OSinfo1, OSinfo2, subreason;    word logsetting;    word status;    IGNORE(stateptr);    unpack_message(BUFFERDATA(*buffer) + 4, "%w%w%w", &debugID, &OSinfo1,                   &OSinfo2, &subreason, &logsetting);    LogInfo(LOG_CTRL, ( "ctrl_setlog(logsetting = 0x%x)\n", logsetting));    /* Range check logsetting. */    if ((logsetting & 0x7) == logsetting)        status = angelOS_Ctrl_SetLog(OSinfo1, OSinfo2, logsetting);    else        status = RDIError_Error;    return msgsend(CI_HADP, "%w%w%w%w%w%w", (ADP_Control | TtoH),                   debugID, OSinfo1, OSinfo2, ADP_Ctrl_SetLog, status);}static int ctrl_semihosting_setarmswi(p_Buffer * buffer, void *stateptr){#ifdef ICEMAN2    /* Set the semi-hosting ARM SWI. */    int debugID, OSinfo1, OSinfo2, subreason;    word semihosting_armswi, status;    IGNORE(stateptr);    unpack_message(BUFFERDATA(*buffer) + 4, "%w%w%w%w%w", &debugID, &OSinfo1,                   &OSinfo2, &subreason, &semihosting_armswi);    LogInfo(LOG_CTRL, ( "ctrl_semihosting_setarmswi(swi 0x%x)\n", semihosting_armswi));    status = angelOS_SemiHosting_SetARMSWI(OSinfo1, OSinfo2,                                           semihosting_armswi);    return msgsend(CI_HADP, "%w%w%w%w%w%w",                   (ADP_Control | TtoH), debugID, OSinfo1, OSinfo2,                   ADP_Ctrl_SemiHosting_SetARMSWI, status);#else    IGNORE(buffer);    IGNORE(stateptr);    LogInfo(LOG_CTRL, ( "ctrl_semihosting_setarmswi -> unsupported\n"));    return -1;#endif}static int ctrl_semihosting_getarmswi(p_Buffer * buffer, void *stateptr){#ifdef ICEMAN2    /* Reads the value of the semi-hosting vector. */    int debugID, OSinfo1, OSinfo2, subreason;    word semihosting_armswi, status;

⌨️ 快捷键说明

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