I am using AGDI drivers for developing C51 Emulators. I have question about access breakpoint that check the Read and Write checkboxes and click Define.But it always show error message: Breakpoint definition error. See Command Window for detailed error information.The Command Window show:*** error 73: unsupported breakpoint type.
What parameters or callback functions should I set in AGDI driver? let uVision support Read and Write of Access breakpoint.
I want to implement function in AGDI.cpp as follow, but the process never into switch-case AG_WBREAK block whatever I set breakpoint dialog.
int SaCBreaks(DWORD set, DWORD nA) { // 1:=set, 0:=clear AG_BP* pB; int nR; abreaks = 0; // clear number of address Bp's cbreaks = 0; // clear number of conditional Bp's wbreaks = 0; // clear number of access Bp's for (pB = *pBhead; pB; pB = pB->next) { if (!pB->enabled) continue; switch (pB->type) { case AG_ABREAK: ++abreaks; break; // increase Nr. of AddressBreaks case AG_CBREAK: ++cbreaks; break; // increase Nr. of CondBreaks case AG_WBREAK: ++wbreaks; break; // increase Nr. of WatchBreaks } } if (s return (nR); }
Hi Derek, I think the reason is very simple why µVision rejects access breakpoints. Your AGDI driver receives a Bp-accept query and your driver will most likely answer with 'NULL'. Please see the following code which will be similar to yours:
_EXPO_ AG_BP *AG_BreakFunc (U16 nCode, U16 n1, GADR *pA, AG_BP *pBp) { U16 *pB; if (PlayDead) return (NULL); // driver is disconnected if (nCode != 5) { // not BpAccept function pB = MGetAttr (pA->Adr); // get attribute location if (!pB) return (NULL); // invalid, cancel } switch (nCode) { case 2: // Notification: 'pB' will be unlinked *pB &= ~(AG_ATR_BREAK | AG_ATR_BPDIS); break; case 3: // not used. case 6: // not used. case 7: // not used. case 8: // not used. break; case 1: // Notification: 'pB' will be linked case 4: // 'pB->enabled' may have changed if (pBp->enabled) { *pB = (*pB & ~AG_ATR_BPDIS) | AG_ATR_BREAK; // enable it } else { *pB = (*pB & ~AG_ATR_BREAK) | AG_ATR_BPDIS; // disable it } break; case 5: // Bp-accept function if (pBp->type == AG_WBREAK) { // read/write access Bp's are not supported here. return (NULL); } break; }
See 'case 5'. With a call to 'AG_BreakFunc' with nCode=5, µVision checks if a specific breakpoint type is supported with your debug adapter, or not. When this function returns a NULL, the breakpoint is not supported. If you comment or modify the code in 'case 5' so that this function does not return NULL, the breakpoint will be added to the list of breakpoints.
I hope this solves your problem.