diff --git a/examples/debugprintfdemo/.vscode/settings.json b/examples/debugprintfdemo/.vscode/settings.json index 5f7790e17f25ffb056231c9e95e5ecb65837a14c..e81e011860891e8f3d4696c8aaa7a31f4fd8171f 100644 --- a/examples/debugprintfdemo/.vscode/settings.json +++ b/examples/debugprintfdemo/.vscode/settings.json @@ -3,7 +3,7 @@ "makefile.launchConfigurations": [ { "cwd": "", - "sbinaryPath": "blink.elf", + "sbinaryPath": "debugprintfdemo.elf", "binaryArgs": [] } ], diff --git a/examples/template/template.c b/examples/template/template.c index 25d236be8c10ac4457f9cd9aa39e6a7054955944..d81e4eb93d7f614b29f42e96753ef74f604a2c13 100644 --- a/examples/template/template.c +++ b/examples/template/template.c @@ -1,4 +1,5 @@ /* Template app on which you can build your own. */ +#define SYSTEM_CORE_CLOCK 48000000 #include "ch32v003fun.h" #include <stdio.h> @@ -30,9 +31,11 @@ int main() GPIOD->BSHR = 1 | (1<<4); // Turn on GPIOs GPIOC->BSHR = 1; printf( "+%lu\n", count++ ); + Delay_Ms(250); GPIOD->BSHR = (1<<16) | (1<<(16+4)); // Turn off GPIODs GPIOC->BSHR = (1<<16); printf( "-%lu\n", count++ ); + Delay_Ms(250); } } diff --git a/minichlink/ardulink.c b/minichlink/ardulink.c index 962061945387bb6537d10be21d99274a5f2fe14f..24819c138af68a21495730fe5d7b61675114e9b7 100644 --- a/minichlink/ardulink.c +++ b/minichlink/ardulink.c @@ -112,6 +112,8 @@ int ArdulinkSetupInterface( void * dev ) fprintf(stderr, "Ardulink: not the sync character.\n"); return -1; } + + return 0; } void * TryInit_Ardulink(const init_hints_t* hints) diff --git a/minichlink/microgdbstub.h b/minichlink/microgdbstub.h index da9246f835ff697825a706f14ffb6111982df523..50421314901e7a9c03032673ecdfa398376cfd61 100644 --- a/minichlink/microgdbstub.h +++ b/minichlink/microgdbstub.h @@ -181,9 +181,18 @@ void HandleGDBPacket( void * dev, char * data, int len ) else if( StringMatch( data, "sThreadInfo" ) ) // Query all active thread IDs, continued SendReplyFull( "l" ); else if( StringMatch( data, "Xfer:memory-map" ) ) - SendReplyFull( MICROGDBSTUB_MEMORY_MAP ); + { + int mslen = strlen( MICROGDBSTUB_MEMORY_MAP ) + 32; + char map[mslen]; + struct InternalState * iss = (struct InternalState*)(((struct ProgrammerStructBase*)dev)->internal); + snprintf( map, mslen, MICROGDBSTUB_MEMORY_MAP, iss->flash_size, iss->sector_size, iss->ram_size ); + SendReplyFull( map ); + } else + { + printf( "Unknown command: %s\n", data ); SendReplyFull( "" ); + } break; case 'c': case 'C': @@ -487,6 +496,7 @@ static int GDBListen( void * dev ) serverSocket = 0; return -1; } + return 0; } @@ -494,14 +504,16 @@ int MicroGDBPollServer( void * dev ) { if( !serverSocket ) return -4; - struct pollfd allpolls[2]; - int pollct = 1; + struct pollfd allpolls[1] = { 0 }; allpolls[0].fd = serverSocket; - allpolls[0].events = POLLIN; - - //Do something to watch all currently-waiting sockets. - poll( allpolls, pollct, 0 ); + allpolls[0].events = 0x00000100; //POLLRDNORM; + int r = poll( allpolls, pollct, 0 ); + + if( r < 0 ) + { + printf( "R: %d\n", r ); + } //If there's faults, bail. if( allpolls[0].revents & (POLLERR|POLLHUP) ) @@ -615,8 +627,6 @@ int MicroGDBStubStartup( void * dev ) err = WSAStartup(wVersionRequested, &wsaData); if (err != 0) { - /* Tell the user that we could not find a usable */ - /* Winsock DLL. */ fprintf( stderr, "WSAStartup failed with error: %d\n", err); return 1; } diff --git a/minichlink/minichgdb.c b/minichlink/minichgdb.c index 0596f4fdaed6bde45741cad77193ee18d70ece0e..60fc13ca812c7e442691c7efe21bcd7eef21a919 100644 --- a/minichlink/minichgdb.c +++ b/minichlink/minichgdb.c @@ -9,16 +9,18 @@ #define MICROGDBSTUB_SOCKETS #define MICROGDBSTUB_PORT 2000 - const char* MICROGDBSTUB_MEMORY_MAP = "l<?xml version=\"1.0\"?>" "<!DOCTYPE memory-map PUBLIC \"+//IDN gnu.org//DTD GDB Memory Map V1.0//EN\" \"http://sourceware.org/gdb/gdb-memory-map.dtd\">" "<memory-map>" -" <memory type=\"flash\" start=\"0x00000000\" length=\"0x4000\">" -" <property name=\"blocksize\">64</property>" +" <memory type=\"flash\" start=\"0x00000000\" length=\"0x%x\">" +" <property name=\"blocksize\">%d</property>" " </memory>" -" <memory type=\"ram\" start=\"0x20000000\" length=\"0x800\">" +" <memory type=\"ram\" start=\"0x20000000\" length=\"0x%x\">" " <property name=\"blocksize\">1</property>" " </memory>" +" <memory type=\"ram\" start=\"0x40000000\" length=\"0x10000000\">" +" <property name=\"blocksize\">4</property>" +" </memory>" "</memory-map>"; #include "microgdbstub.h" @@ -72,7 +74,7 @@ void RVCommandEpilogue( void * dev ) void RVNetConnect( void * dev ) { // ??? Should we actually halt? - MCF.HaltMode( dev, 0 ); + MCF.HaltMode( dev, 5 ); MCF.SetEnableBreakpoints( dev, 1, 0 ); RVCommandPrologue( dev ); shadow_running_state = 0; @@ -125,7 +127,7 @@ int RVReadCPURegister( void * dev, int regno, uint32_t * regret ) { if( shadow_running_state ) { - MCF.HaltMode( dev, 0 ); + MCF.HaltMode( dev, 5 ); RVCommandPrologue( dev ); shadow_running_state = 0; } @@ -349,7 +351,7 @@ int RVWriteRAM(void * dev, uint32_t memaddy, uint32_t length, uint8_t * payload void RVHandleDisconnect( void * dev ) { - MCF.HaltMode( dev, 0 ); + MCF.HaltMode( dev, 5 ); MCF.SetEnableBreakpoints( dev, 0, 0 ); int i; @@ -373,7 +375,7 @@ void RVHandleGDBBreakRequest( void * dev ) { if( shadow_running_state ) { - MCF.HaltMode( dev, 0 ); + MCF.HaltMode( dev, 5 ); } } diff --git a/minichlink/minichlink.c b/minichlink/minichlink.c index fbfe5bff2915eeb069b0e04f38e50b6ac95967d4..d3f1a0192e60eaaf832af3bbd1aa283d849b6685 100644 --- a/minichlink/minichlink.c +++ b/minichlink/minichlink.c @@ -35,13 +35,13 @@ void * MiniCHLinkInitAsDLL( struct MiniChlinkFunctions ** MCFO, const init_hints if( strcmp( specpgm, "linke" ) == 0 ) dev = TryInit_WCHLinkE(); else if( strcmp( specpgm, "esp32s2chfun" ) == 0 ) - dev = dev = TryInit_ESP32S2CHFUN(); + dev = TryInit_ESP32S2CHFUN(); else if( strcmp( specpgm, "nchlink" ) == 0 ) - dev = dev = TryInit_NHCLink042(); + dev = TryInit_NHCLink042(); else if( strcmp( specpgm, "b003boot" ) == 0 ) - dev = dev = TryInit_B003Fun(); + dev = TryInit_B003Fun(); else if( strcmp( specpgm, "ardulink" ) == 0 ) - dev = dev = TryInit_B003Fun(); + dev = TryInit_B003Fun(); } else { diff --git a/minichlink/minichlink.exe b/minichlink/minichlink.exe index 5bbad93764ed20f109bc7e89424a6ef4b3b783da..13cd21c366c018e72ce7e745f3f92e9b0f8eb547 100644 Binary files a/minichlink/minichlink.exe and b/minichlink/minichlink.exe differ