Skip to content

Commit

Permalink
Breakpoints and event handling now work as expected, though still nee…
Browse files Browse the repository at this point in the history
…ds more polish
  • Loading branch information
stemnic committed Dec 5, 2020
1 parent dc79064 commit 36194d5
Show file tree
Hide file tree
Showing 3 changed files with 81 additions and 49 deletions.
21 changes: 14 additions & 7 deletions debugger.py
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@ def __init__(self, DeviceName):
self.housekeeper = housekeepingprotocol.Jtagice3HousekeepingProtocol(self.transport)
self.housekeeper.start_session()
self.device = NvmAccessProviderCmsisDapUpdi(self.transport, self.deviceInf)
self.device.avr.deactivate_physical()
#self.device.avr.deactivate_physical()
self.device.avr.activate_physical()
# Start debug by attaching (live)
self.device.avr.protocol.attach()
Expand Down Expand Up @@ -149,7 +149,8 @@ def run(self):
self.device.avr.protocol.run()

def runTo(self, address):
self.device.avr.protocol.run_to(address)
wordAddress = int(address/2)
self.device.avr.protocol.run_to(wordAddress)

def readStackPointer(self):
return self.device.avr.stack_pointer_read()
Expand All @@ -159,9 +160,9 @@ def readSREG(self):

def readRunningState(self):
# Debug interface to see what state the avr is in.
AVR8_CONTEXT_TEST = 0x80
AVR8_TEST_TARGET_RUNNING = 0x00
running = bool(self.device.avr.protocol.get_byte(AVR8_CONTEXT_TEST, AVR8_TEST_TARGET_RUNNING))
AVR8_CTXT_TEST = 0x80
AVR8_TEST_TGT_RUNNING = 0x00
running = bool(self.device.avr.protocol.get_byte(AVR8_CTXT_TEST, AVR8_TEST_TGT_RUNNING))
logging.info("AVR running state " + str(running))
return running

Expand All @@ -180,7 +181,8 @@ def readProgramCounter(self):
def writeProgramCounter(self, programCounter):
self.device.avr.protocol.program_counter_write(programCounter)

# SoftwareBreakpoints
# SoftwareBreakpoints EDBG expects these addresses in bytes
# Multiple SW breakpoints can be defined by shifting 4 bytes to the left
def breakpointSWSet(self, address):
self.device.avr.protocol.software_breakpoint_set(address)

Expand All @@ -190,15 +192,20 @@ def breakpointSWClear(self, address):
def breakpointSWClearAll(self):
self.device.avr.protocol.software_breakpoint_clear_all()

# HardwareBreakpoints EDBG expects these addresses in words
def breakpointHWSet(self, address):
self.device.avr.breakpoint_set(address)
wordAddress = int(address/2)
self.device.avr.breakpoint_set(wordAddress)

def breakpointHWClear(self):
self.device.avr.breakpoint_clear()

# Cleanup code for detatching target
def cleanup(self):
# and end debug
self.device.avr.protocol.stop()
self.device.avr.protocol.software_breakpoint_clear_all()
self.device.avr.breakpoint_clear()
self.device.avr.protocol.detach()
# Stop session
#avr.stop()
Expand Down
26 changes: 18 additions & 8 deletions main.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,17 +5,20 @@
import signal
import sys
import time
import select

HOST = '127.0.0.1' # Standard loopback interface address (localhost)
PORT = 12555 # Port to listen on (non-privileged ports are > 1023)

lastPacket = ""

dbg = debugger.Debugger("atmega4809")

#pollet_event = dbg.pollEvent()
#while pollet_event != None:
# pollet_event = dbg.pollEvent()
dbg.stop()
dbg.breakpointSWClearAll()
dbg.breakpointHWClear()
pollet_event = dbg.pollEvent()
while pollet_event != None:
pollet_event = dbg.pollEvent()
# dbg.run()

SIGTRAP = "S05"
Expand Down Expand Up @@ -303,6 +306,10 @@ def handleData(socket, data):
#for command in packet_data.split(";"):
#handleCommand(socket, command)
#commands.append(command.split("+")[0])
elif data == b"\x03":
dbg.stop()
socket.sendall(b"+")
print("<- +")
#elif data.decode("ascii").count("-") > 0:
#sendPacket(socket, lastPacket)

Expand All @@ -312,14 +319,17 @@ def handleData(socket, data):
s.bind((HOST, PORT))
s.listen()
conn, addr = s.accept()
conn.setblocking(0)
with conn:
print('Connected by', addr)
while True:
# Should iterate through buffer and take out commands/escape characters
data = conn.recv(1024)
if len(data) > 0:
print("-> " + data.decode('ascii'))
handleData(conn, data)
ready = select.select([conn], [], [], 0.5)
if ready[0]:
data = conn.recv(1024)
if len(data) > 0:
print("-> " + data.decode('ascii'))
handleData(conn, data)
event = dbg.pollEvent()
if event != None:
print(event)
Expand Down
83 changes: 49 additions & 34 deletions testMain.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,45 +4,60 @@

dbg = debugger.Debugger("atmega4809")
dbg.stop()
dbg.breakpointSWClearAll()
dbg.breakpointHWClear()
#logging.info(dbg.readRegs())
#logging.info(dbg.readSRAM(0x00, 1024))
#logging.info(dbg.readSREG())
#logging.info(dbg.readStackPointer())
dbg.pollEvent()
dbg.pollEvent()
dbg.breakpointSWSet(0x154)
dbg.pollEvent()
dbg.pollEvent()
time.sleep(1)
dbg.pollEvent()
dbg.pollEvent()
event = dbg.pollEvent()
while event != None:
event = dbg.pollEvent()
dbg.readRunningState()
print("Started running")
dbg.run()
dbg.pollEvent()
print(dbg.readProgramCounter())
print("\n")
dbg.step()
dbg.step()
dbg.step()
dbg.pollEvent()
dbg.pollEvent()
dbg.pollEvent()
dbg.pollEvent()
time.sleep(1)
dbg.pollEvent()
dbg.pollEvent()
dbg.run()
dbg.pollEvent()

time.sleep(1)

print(dbg.readProgramCounter())
print(dbg.readProgramCounter())
print("\n")
dbg.run()
dbg.pollEvent()
dbg.pollEvent()
dbg.pollEvent()
dbg.pollEvent()
dbg.readRunningState()
while True:
if dbg.readRunningState() == False:
event = dbg.pollEvent()
while event != None:
event = dbg.pollEvent()
print("Started running")
dbg.run()
time.sleep(1)
#dbg.breakpointSWSet(0x154)
#dbg.pollEvent()
#dbg.pollEvent()
#time.sleep(1)
#dbg.pollEvent()
#dbg.pollEvent()
#dbg.run()
#dbg.pollEvent()
#print(dbg.readProgramCounter())
#print("\n")
#dbg.step()
#dbg.step()
#dbg.step()
#dbg.pollEvent()
#dbg.pollEvent()
#dbg.pollEvent()
#dbg.pollEvent()
#time.sleep(1)
#dbg.pollEvent()
#dbg.pollEvent()
#dbg.run()
#dbg.pollEvent()
#
#time.sleep(1)
#
#print(dbg.readProgramCounter())
#print(dbg.readProgramCounter())
#print("\n")
#dbg.run()
#dbg.pollEvent()
#dbg.pollEvent()
#dbg.pollEvent()
#dbg.pollEvent()
#logging.info(dbg.readRegs())

dbg.cleanup()

0 comments on commit 36194d5

Please sign in to comment.