From 489515fbbf0f61ae63bcdd4b858a5fe59e90c0be Mon Sep 17 00:00:00 2001
From: Dean Camera <dean@fourwalledcubicle.com>
Date: Thu, 27 Aug 2009 23:07:53 +0000
Subject: [PATCH] Make WaitWhileBusy function in the AVRISP project more
 explicit about how it sends and receives the busy check command.

Reduce size of PROGRAM FLASH ISP or PROGRAM EEPROM ISP buffer to 256 bytes to prevent blowing the stack on the smallest USB AVR models.
---
 Projects/AVRISP/Lib/V2Protocol.c       | 2 +-
 Projects/AVRISP/Lib/V2ProtocolTarget.c | 3 ++-
 2 files changed, 3 insertions(+), 2 deletions(-)

diff --git a/Projects/AVRISP/Lib/V2Protocol.c b/Projects/AVRISP/Lib/V2Protocol.c
index 248c50d24..3a1b78efd 100644
--- a/Projects/AVRISP/Lib/V2Protocol.c
+++ b/Projects/AVRISP/Lib/V2Protocol.c
@@ -301,7 +301,7 @@ static void V2Protocol_Command_ProgramMemory(uint8_t V2Command)
 		uint8_t  ProgrammingCommands[3];
 		uint8_t  PollValue1;
 		uint8_t  PollValue2;
-		uint8_t  ProgData[512];
+		uint8_t  ProgData[256];
 	} Write_Memory_Params;
 	
 	uint8_t* NextWriteByte = Write_Memory_Params.ProgData;
diff --git a/Projects/AVRISP/Lib/V2ProtocolTarget.c b/Projects/AVRISP/Lib/V2ProtocolTarget.c
index d06f06510..9c6ccf4c6 100644
--- a/Projects/AVRISP/Lib/V2ProtocolTarget.c
+++ b/Projects/AVRISP/Lib/V2ProtocolTarget.c
@@ -161,8 +161,9 @@ uint8_t V2Protocol_WaitWhileTargetBusy(void)
 		SPI_SendByte(0x00);
 
 		SPI_SendByte(0x00);
+		bool DeviceBusy = (SPI_ReceiveByte() & 0x01);
 	}
-	while ((SPI_ReceiveByte() & 0x01) && (TCNT0 < TARGET_BUSY_TIMEOUT_MS));
+	while (DeviceBusy && (TCNT0 < TARGET_BUSY_TIMEOUT_MS));
 
 	if (TCNT0 >= TARGET_BUSY_TIMEOUT_MS)
 	  return STATUS_RDY_BSY_TOUT;
-- 
GitLab