avrdudes / avrdude

AVRDUDE is a utility to program AVR microcontrollers
GNU General Public License v2.0
734 stars 136 forks source link

Readline support for MSVC #1186

Closed mcuee closed 1 year ago

mcuee commented 1 year ago

As of now MSVC build does not support libreadline and then -c urclock may time out in terminal mode.

@mariusgreuel may have the solution from the discussion here.

mcuee commented 1 year ago

The workaround for now is to use MinGW build below.

Once #1171 is merged, I will publish avrdude snapshot binaries for Linux/Windows/macOS. (Done)

mcuee commented 1 year ago

BTW, it is not too bad as there is a work around for the terminal mode using pipes.

Examples using the latest github action Windows binary. https://github.com/avrdudes/avrdude/actions/runs/3539649818

C:\work\avr\avrdude_test\avrdude_bin\github_action\avrdude-msvc-x64>
 echo "dump eeprom 0 0x10" | .\avrdude -c arduino -P COM4 -p m328p  -t

avrdude: AVR device initialized and ready to accept instructions
avrdude: device signature = 0x1e950f (probably m328p)
avrdude> >>> dump eeprom 0 0x10

Reading | ################################################## | 100% 0.03 s

0000  48 65 6c 6c 6f 2c 20 77  6f 72 6c 64 21 21 21 0a  |Hello, world!!! |

avrdude>
avrdude done.  Thank you.

C:\work\avr\avrdude_test\avrdude_bin\github_action\avrdude-msvc-x64> 
echo "dump flash 0 0x10" | .\avrdude -c urclock -P COM4 -p m328p  -t -xbootsize=2048
avrdude warning: compiled without readline library, cannot use avrdude -t -c urclock
avrdude: AVR device initialized and ready to accept instructions
avrdude: device signature = 0x1e950f (probably m328p)
avrdude> >>> dump flash 0 0x10

Reading | ################################################## | 100% 0.02 s

0000  0c 94 5c 00 0c 94 6e 00  0c 94 6e 00 0c 94 6e 00  | .\. .n. .n. .n.|

avrdude>
avrdude done.  Thank you.

C:\work\avr\avrdude_test\avrdude_bin\github_action\avrdude-mingw-x86_64> 
echo "dump eeprom 0 0x10" | .\avrdude -c arduino -P COM4 -p m328p  -t

avrdude: AVR device initialized and ready to accept instructions
avrdude: device signature = 0x1e950f (probably m328p)
avrdude> >>> dump eeprom 0 0x10

Reading | ################################################## | 100% 0.08 s

0000  48 65 6c 6c 6f 2c 20 77  6f 72 6c 64 21 21 21 0a  |Hello, world!!! |

avrdude>
avrdude done.  Thank you.

C:\work\avr\avrdude_test\avrdude_bin\github_action\avrdude-mingw-x86_64> 
echo "dump flash 0 0x10" | .\avrdude -c arduino -P COM4 -p m328p  -t

avrdude: AVR device initialized and ready to accept instructions
avrdude: device signature = 0x1e950f (probably m328p)
avrdude> >>> dump flash 0 0x10

Reading | ################################################## | 100% 0.07 s

0000  0c 94 5c 00 0c 94 6e 00  0c 94 6e 00 0c 94 6e 00  | .\. .n. .n. .n.|

avrdude>
avrdude done.  Thank you.
mcuee commented 1 year ago

@stefanrueger

Would you please change the warning message to something like the following? You can change the wording as you see fit.

warning: compiled without readline library,  'avrdude -t -c urclock' may not work. 
You may have to use work-around using piples like the following.
    echo "dump flash" | avrdude -t -c urclock
mariusgreuel commented 1 year ago

@mcuee , @stefanrueger : I have not been able to keep up the pace you guys are working, but I am planning on fixing some Windows related issues around the upcoming holidays. This includes patching up the old readline library for Windows. I am assigning this issue to me.

stefanrueger commented 1 year ago

I am assigning this issue to me.

@mariusgreuel Thank you. BTW, you can try avrdude -t -curclock with a STK500v1 bootloader, eg. This should keep the bootloader alive. Current git main requires -xdelay=350 for old optiboots.

Without libreadline one needs to pipe into avrdude:

echo "d fl 0 32; quit" | tr \; \\n | avrdude -t -curclock
mcuee commented 1 year ago

@mcuee , @stefanrueger : I have not been able to keep up the pace you guys are working, but I am planning on fixing some Windows related issues around the upcoming holidays. This includes patching up the old readline library for Windows. I am assigning this issue to me.

Thanks, Readline for MSVC build will be wonderful.

The other thing you may help is how to better detect Readline under Windows. Now it wrongly detect Strberry Perl's libreadline.a as having Readline for the MSVC build. I have to explicitly disable it in githhub action MSVC build with PR #1196.

mariusgreuel commented 1 year ago

Now it wrongly detect Strberry Perl's libreadline.a

Yes, when you install Strawberry Perl, a lot of things break. They put their entire MinGW toolchain in the systems PATH variable, having no clue about the breakage this causes: https://github.com/StrawberryPerl/Perl-Dist-Strawberry/issues/11

It surprises me to see this on a GitHub runner enabled by default. I dropped GitHub a message: https://github.com/actions/runner-images/issues/5459

mcuee commented 1 year ago

Build log using Readline-win32.

Failed because the directory structure is not correct.

mcuee commented 1 year ago

One more try -- just a hack to get the things build. 1) build Readline-win32 from https://github.com/lltcggie/readline 2) copy the necessary header files to src/readline 3) copy the necessary library files to src/readline-bin.

1> CMake generation started for configuration: 'x64-Release'.
1> Command line: "C:\WINDOWS\system32\cmd.exe" /c "%SYSTEMROOT%\System32\chcp.com 65001 >NUL && "C:\PROGRAM FILES (X86)\MICROSOFT VISUAL STUDIO\2019\COMMUNITY\COMMON7\IDE\COMMONEXTENSIONS\MICROSOFT\CMAKE\CMake\bin\cmake.exe"  -G "Ninja"  -DCMAKE_BUILD_TYPE:STRING="RelWithDebInfo" -DCMAKE_INSTALL_PREFIX:PATH="C:\work\avr\avrdude_test\avrdude_main\out\install\x64-Release" -DUSE_EXTERNAL:BOOL="True" -DHAVE_LIBREADLINE:FILEPATH="C:/work/avr/avrdude_test/avrdude_main/src/msvc/readline_bin/readline.lib" -DUSE_STATIC_LIBS:BOOL="true" -DCMAKE_C_COMPILER:FILEPATH="C:/Program Files (x86)/Microsoft Visual Studio/2019/Community/VC/Tools/MSVC/14.29.30133/bin/Hostx64/x64/cl.exe"  -DCMAKE_MAKE_PROGRAM="C:\PROGRAM FILES (X86)\MICROSOFT VISUAL STUDIO\2019\COMMUNITY\COMMON7\IDE\COMMONEXTENSIONS\MICROSOFT\CMAKE\Ninja\ninja.exe" "C:\work\avr\avrdude_test\avrdude_main" 2>&1"
1> Working directory: C:\work\avr\avrdude_test\avrdude_main\out\build\x64-Release
1> [CMake] -- The C compiler identification is MSVC 19.29.30146.0
1> [CMake] -- Detecting C compiler ABI info
1> [CMake] -- Detecting C compiler ABI info - done
1> [CMake] -- Check for working C compiler: C:/Program Files (x86)/Microsoft Visual Studio/2019/Community/VC/Tools/MSVC/14.29.30133/bin/Hostx64/x64/cl.exe - skipped
1> [CMake] -- Detecting C compile features
1> [CMake] -- Detecting C compile features - done
1> [CMake] -- Found Git: C:/Program Files/Git/cmd/git.exe (found version "2.35.3.windows.1") 
1> [CMake] -- Found FLEX: C:/ProgramData/chocolatey/bin/win_flex.exe (found version "2.6.4") 
1> [CMake] -- Found BISON: C:/ProgramData/chocolatey/bin/win_bison.exe (found version "3.7.4")
1> [CMake] -- Fetching external libraries, please wait...
1> [CMake] -- The CXX compiler identification is MSVC 19.29.30146.0
1> [CMake] -- Detecting CXX compiler ABI info
1> [CMake] -- Detecting CXX compiler ABI info - done
1> [CMake] -- Check for working CXX compiler: C:/Program Files (x86)/Microsoft Visual Studio/2019/Community/VC/Tools/MSVC/14.29.30133/bin/Hostx64/x64/cl.exe - skipped
1> [CMake] -- Detecting CXX compile features
1> [CMake] -- Detecting CXX compile features - done
1> [CMake] -- Using external library 'libelf'
1> [CMake] -- Using external library 'libusb'
1> [CMake] -- Using external library 'libhidapi'
1> [CMake] -- Using external library 'libftdi'
1> [CMake] -- Configuration summary:
1> [CMake] -- ----------------------
1> [CMake] -- DO HAVE    libelf
1> [CMake] -- DO HAVE    libusb
1> [CMake] -- DON'T HAVE libusb_1_0
1> [CMake] -- DO HAVE    libhidapi
1> [CMake] -- DO HAVE    libftdi
1> [CMake] -- DON'T HAVE libftdi1
1> [CMake] -- DO HAVE    libreadline
1> [CMake] -- DISABLED   doc
1> [CMake] -- DISABLED   parport
1> [CMake] -- DISABLED   linuxgpio
1> [CMake] -- DISABLED   linuxspi
1> [CMake] -- ----------------------
1> [CMake] -- Configuring done
1> [CMake] -- Generating done
1> [CMake] -- Build files have been written to: C:/work/avr/avrdude_test/avrdude_main/out/build/x64-Release
1> Extracted CMake variables.
1> Extracted source files and headers.
1> Extracted code model.
1> Extracted toolchain configurations.
1> Extracted includes paths.
1> CMake generation finished.

>------ Build All started: Project: avrdude_main, Configuration: x64-Release ------
  [1/136] Building C object _deps\libelf-build\CMakeFiles\libelf.dir\src\data.c.obj
  [2/136] Building C object _deps\libelf-build\CMakeFiles\libelf.dir\src\32.fsize.c.obj
  [3/136] Building C object _deps\libelf-build\CMakeFiles\libelf.dir\src\checksum.c.obj
  [4/136] Building C object _deps\libelf-build\CMakeFiles\libelf.dir\src\cntl.c.obj
  [5/136] Building C object _deps\libelf-build\CMakeFiles\libelf.dir\src\begin.c.obj
  [6/136] Building C object _deps\libelf-build\CMakeFiles\libelf.dir\src\32.getshdr.c.obj
  [7/136] Building C object _deps\libelf-build\CMakeFiles\libelf.dir\src\32.newehdr.c.obj
  [8/136] Building C object _deps\libelf-build\CMakeFiles\libelf.dir\src\32.newphdr.c.obj
  [9/136] Building C object _deps\libelf-build\CMakeFiles\libelf.dir\src\32.getehdr.c.obj
  [10/136] Building C object _deps\libelf-build\CMakeFiles\libelf.dir\src\32.getphdr.c.obj
  [11/136] Building C object _deps\libelf-build\CMakeFiles\libelf.dir\src\assert.c.obj
  [12/136] Building C object _deps\libelf-build\CMakeFiles\libelf.dir\src\cook.c.obj
  [13/136] Building C object _deps\libelf-build\CMakeFiles\libelf.dir\src\64.xlatetof.c.obj
  [14/136] Building C object _deps\libelf-build\CMakeFiles\libelf.dir\src\32.xlatetof.c.obj
  [15/136] Building C object _deps\libelf-build\CMakeFiles\libelf.dir\src\errno.c.obj
  [16/136] Building C object _deps\libelf-build\CMakeFiles\libelf.dir\src\end.c.obj
  [17/136] Building C object _deps\libelf-build\CMakeFiles\libelf.dir\src\getbase.c.obj
  [18/136] Building C object _deps\libelf-build\CMakeFiles\libelf.dir\src\gelfshdr.c.obj
  [19/136] Building C object _deps\libelf-build\CMakeFiles\libelf.dir\src\getident.c.obj
  [20/136] Building C object _deps\libelf-build\CMakeFiles\libelf.dir\src\fill.c.obj
  [21/136] Building C object _deps\libelf-build\CMakeFiles\libelf.dir\src\gelftrans.c.obj
  [22/136] Building C object _deps\libelf-build\CMakeFiles\libelf.dir\src\errmsg.c.obj
  [23/136] Building C object _deps\libelf-build\CMakeFiles\libelf.dir\src\getaroff.c.obj
  [24/136] Building C object _deps\libelf-build\CMakeFiles\libelf.dir\src\gelfehdr.c.obj
  [25/136] Building C object _deps\libelf-build\CMakeFiles\libelf.dir\src\getarhdr.c.obj
  [26/136] Building C object _deps\libelf-build\CMakeFiles\libelf.dir\src\getdata.c.obj
  [27/136] Building C object _deps\libelf-build\CMakeFiles\libelf.dir\src\gelfphdr.c.obj
  [28/136] Building C object _deps\libelf-build\CMakeFiles\libelf.dir\src\memset.c.obj
  [29/136] Building C object _deps\libelf-build\CMakeFiles\libelf.dir\src\flag.c.obj
  [30/136] Building C object _deps\libelf-build\CMakeFiles\libelf.dir\src\getscn.c.obj
  [31/136] Building C object _deps\libelf-build\CMakeFiles\libelf.dir\src\input.c.obj
  [32/136] Building C object _deps\libelf-build\CMakeFiles\libelf.dir\src\nextscn.c.obj
  [33/136] Building C object _deps\libelf-build\CMakeFiles\libelf.dir\src\hash.c.obj
  [34/136] Building C object _deps\libelf-build\CMakeFiles\libelf.dir\src\ndxscn.c.obj
  [35/136] Building C object _deps\libelf-build\CMakeFiles\libelf.dir\src\rand.c.obj
  [36/136] Building C object _deps\libelf-build\CMakeFiles\libelf.dir\src\getarsym.c.obj
  [37/136] Building C object _deps\libelf-build\CMakeFiles\libelf.dir\src\newscn.c.obj
  [38/136] Building C object _deps\libelf-build\CMakeFiles\libelf.dir\src\opt.delscn.c.obj
  [39/136] Building C object _deps\libelf-build\CMakeFiles\libelf.dir\src\next.c.obj
  [40/136] Building C object _deps\libelf-build\CMakeFiles\libelf.dir\src\kind.c.obj
  [41/136] Building C object _deps\libelf-build\CMakeFiles\libelf.dir\src\newdata.c.obj
  [42/136] Building C object _deps\libelf-build\CMakeFiles\libelf.dir\src\nlist.c.obj
  [43/136] Building C object _deps\libelf-build\CMakeFiles\libelf.dir\src\rawdata.c.obj
  [44/136] Building C object _deps\libelf-build\CMakeFiles\libelf.dir\src\rawfile.c.obj
  [45/136] Building C object _deps\libelf-build\CMakeFiles\libelf.dir\src\verdef_32_tof.c.obj
  [46/136] Building C object _deps\libelf-build\CMakeFiles\libelf.dir\src\swap64.c.obj
  [47/136] Building C object _deps\libelf-build\CMakeFiles\libelf.dir\src\strptr.c.obj
  [48/136] Building C object _deps\libelf-build\CMakeFiles\libelf.dir\src\verdef_32_tom.c.obj
  [49/136] Building C object _deps\libelf-build\CMakeFiles\libelf.dir\src\x.elfext.c.obj
  [50/136] Building C object _deps\libelf-build\CMakeFiles\libelf.dir\src\verdef_64_tom.c.obj
  [51/136] Building C object _deps\libelf-build\CMakeFiles\libelf.dir\src\update.c.obj
  [52/136] Building C object _deps\libelf-build\CMakeFiles\libelf.dir\src\verdef_64_tof.c.obj
  [53/136] Building C object _deps\libelf-build\CMakeFiles\libelf.dir\src\version.c.obj
  [54/136] Building C object _deps\libelf-build\CMakeFiles\libelf.dir\src\x.movscn.c.obj
  [55/136] Building C object _deps\libusb-build\CMakeFiles\libusb.dir\src\usb.c.obj
  [56/136] Building C object _deps\libelf-build\CMakeFiles\libelf.dir\src\x.remscn.c.obj
  [57/136] Building C object _deps\libusb-build\CMakeFiles\libusb.dir\src\descriptors.c.obj
  [58/136] Generating avrdude.conf
  [59/136] Linking C static library _deps\libelf-build\libelf.lib
  [60/136] Building CXX object _deps\libftdi-build\CMakeFiles\libftdi.dir\src\ftdi.cpp.obj
  [61/136] Linking CXX static library _deps\libftdi-build\libftdi.lib
  [62/136] Building CXX object _deps\libusb-build\CMakeFiles\libusb.dir\src\windows.cpp.obj
  [63/136] Building C object _deps\libusb-build\CMakeFiles\libusb.dir\src\error.c.obj
  [64/136] Building C object _deps\libusb-build\CMakeFiles\libusb.dir\src\registry.c.obj
  [65/136] Building C object _deps\libhidapi-build\CMakeFiles\libhidapi.dir\src\hid.c.obj
  [66/136] Linking CXX static library _deps\libusb-build\libusb.lib
  [67/136] Linking C static library _deps\libhidapi-build\libhidapi.lib
  [68/136] [FLEX][Parser] Building scanner with win_flex 2.6.4
  [69/136] [BISON][Parser] Building parser with bison 3.7.4
  [70/136] Building C object src\CMakeFiles\libavrdude.dir\crc16.c.obj
  [71/136] Building C object src\CMakeFiles\libavrdude.dir\arduino.c.obj
  [72/136] Building C object src\CMakeFiles\libavrdude.dir\avr910.c.obj
  [73/136] Building C object src\CMakeFiles\libavrdude.dir\flip1.c.obj
  [74/136] Building C object src\CMakeFiles\libavrdude.dir\avrftdi_tpi.c.obj
  [75/136] Building C object src\CMakeFiles\libavrdude.dir\buspirate.c.obj
  [76/136] Building C object src\CMakeFiles\libavrdude.dir\butterfly.c.obj
  [77/136] Building C object src\CMakeFiles\libavrdude.dir\avrpart.c.obj
  [78/136] Building C object src\CMakeFiles\libavrdude.dir\avr.c.obj
  [79/136] Building C object src\CMakeFiles\libavrdude.dir\avrcache.c.obj
  [80/136] Building C object src\CMakeFiles\libavrdude.dir\avrftdi.c.obj
  [81/136] Building C object src\CMakeFiles\libavrdude.dir\config.c.obj
  [82/136] Building C object src\CMakeFiles\libavrdude.dir\dfu.c.obj
  [83/136] Building C object src\CMakeFiles\libavrdude.dir\fileio.c.obj
  [84/136] Building C object src\CMakeFiles\libavrdude.dir\lists.c.obj
  [85/136] Building C object src\CMakeFiles\libavrdude.dir\jtag3.c.obj
  [86/136] Building C object src\CMakeFiles\libavrdude.dir\flip2.c.obj
  [87/136] Building C object src\CMakeFiles\libavrdude.dir\linuxgpio.c.obj
  [88/136] Building C object src\CMakeFiles\libavrdude.dir\jtagmkII.c.obj
  [89/136] Building C object src\CMakeFiles\libavrdude.dir\jtagmkI.c.obj
  [90/136] Building C object src\CMakeFiles\libavrdude.dir\linuxspi.c.obj
  [91/136] Building C object src\CMakeFiles\libavrdude.dir\ft245r.c.obj
  [92/136] Building C object src\CMakeFiles\libavrdude.dir\updi_state.c.obj
  [93/136] Building C object src\CMakeFiles\libavrdude.dir\updi_readwrite.c.obj
  [94/136] Building C object src\CMakeFiles\libavrdude.dir\usbasp.c.obj
  [95/136] Building C object src\CMakeFiles\libavrdude.dir\confwin.c.obj
  [96/136] Building C object src\CMakeFiles\libavrdude.dir\bitbang.c.obj
  [97/136] Building C object src\CMakeFiles\libavrdude.dir\usb_hidapi.c.obj
  [98/136] Building C object src\CMakeFiles\libavrdude.dir\serbb_posix.c.obj
  [99/136] Building C object src\CMakeFiles\libavrdude.dir\ppi.c.obj
  [100/136] Building C object src\CMakeFiles\libavrdude.dir\par.c.obj
  [101/136] Building C object src\CMakeFiles\libavrdude.dir\usb_libusb.c.obj
  [102/136] Building C object src\CMakeFiles\libavrdude.dir\pgm_type.c.obj
  [103/136] Building C object src\CMakeFiles\libavrdude.dir\pindefs.c.obj
  [104/136] Building C object src\CMakeFiles\libavrdude.dir\ppiwin.c.obj
  [105/136] Building C object src\CMakeFiles\libavrdude.dir\ser_avrdoper.c.obj
  [106/136] Building C object src\CMakeFiles\libavrdude.dir\ser_posix.c.obj
  [107/136] Building C object src\CMakeFiles\libavrdude.dir\pgm.c.obj
  [108/136] Building C object src\CMakeFiles\libavrdude.dir\micronucleus.c.obj
  [109/136] Building C object src\CMakeFiles\libavrdude.dir\urclock.c.obj
  [110/136] Building C object src\CMakeFiles\libavrdude.dir\serialupdi.c.obj
  [111/136] Building C object src\CMakeFiles\libavrdude.dir\stk500generic.c.obj
  [112/136] Building C object src\CMakeFiles\libavrdude.dir\teensy.c.obj
  [113/136] Building C object src\CMakeFiles\libavrdude.dir\updi_nvm.c.obj
  [114/136] Building C object src\CMakeFiles\libavrdude.dir\stk500.c.obj
  [115/136] Building C object src\CMakeFiles\libavrdude.dir\wiring.c.obj
  [116/136] Building C object src\CMakeFiles\libavrdude.dir\updi_link.c.obj
  [117/136] Building C object src\CMakeFiles\libavrdude.dir\usbtiny.c.obj
  [118/136] Building C object src\CMakeFiles\libavrdude.dir\stk500v2.c.obj
  [119/136] Building C object src\CMakeFiles\libavrdude.dir\__\lexer.c.obj
  [120/136] Building C object src\CMakeFiles\libavrdude.dir\update.c.obj
  [121/136] Building C object src\CMakeFiles\libavrdude.dir\xbee.c.obj
  [122/136] Building C object src\CMakeFiles\libavrdude.dir\__\config_gram.c.obj
  [123/136] Building C object src\CMakeFiles\libavrdude.dir\serbb_win32.c.obj
  [124/136] Building C object src\CMakeFiles\libavrdude.dir\pickit2.c.obj
  [125/136] Building C object src\CMakeFiles\libavrdude.dir\ser_win32.c.obj
  [126/136] Building CXX object src\CMakeFiles\libavrdude.dir\msvc\usleep.cpp.obj
  [127/136] Building RC object src\CMakeFiles\avrdude.dir\windows.rc.res
  Microsoft (R) Windows (R) Resource Compiler Version 10.0.10011.16384

  Copyright (C) Microsoft Corporation.  All rights reserved.

  [128/136] Building C object src\CMakeFiles\avrdude.dir\avrintel.c.obj
  [129/136] Building C object src\CMakeFiles\avrdude.dir\main.c.obj
  [130/136] Building C object src\CMakeFiles\libavrdude.dir\msvc\gettimeofday.c.obj
  [131/136] Building C object src\CMakeFiles\avrdude.dir\developer_opts.c.obj
  [132/136] Building C object src\CMakeFiles\libavrdude.dir\msvc\getopt.c.obj
  [133/136] Building C object src\CMakeFiles\avrdude.dir\whereami.c.obj
  [134/136] Linking CXX static library src\libavrdude.lib
  [135/136] Building C object src\CMakeFiles\avrdude.dir\term.c.obj
  [136/136] Linking CXX executable src\avrdude.exe

Build All succeeded.

Directory Structure for reference: avrdude_main.zip

mcuee commented 1 year ago

Binary for reference (also included in the post above). Dynamic link to readline.dll as of now. avrdude_msvc_readline_x64.zip

mcuee commented 1 year ago

The results seem to be okay with history. piping is a bit strange.

C:\work\avr\avrdude_test\avrdude_main\out\build\x64-Release\src [main ≡ +4 ~0 -0 !]> 
.\avrdude -c xplainedpro_updi -p t817 -qqt
avrdude> dump flash
>>> dump flash
0000  01 c0 d8 c0 11 24 80 91  40 00 88 23 69 f0 28 2f  |.....$..@..#i.(/|
0010  30 e0 83 fd 03 c0 2d 7f  23 2b 31 f4 80 93 40 00  |0.....-.#+1...@.|
0020  8c bb 80 e0 af d0 ec c0  a8 95 22 9a 2a 9a 10 92  |..........".*...|
0030  01 02 80 91 82 12 83 70  81 30 61 f5 8c e5 90 e0  |.......p.0a.....|
0040  80 93 08 08 90 93 09 08  81 e0 80 93 0b 08 83 e0  |...... ..... ...|
0050  80 93 07 08 10 92 05 08  80 ec 80 93 06 08 8b e0  |................|
0060  91 d0 07 9a 87 e0 81 50  c1 f4 a8 95 0d e9 83 e0  |.......P.... ...|
0070  d8 2e 7c d0 81 34 e9 f4  79 d0 18 2f 8c d0 81 e0  |..|..4..y../....|
0080  12 38 21 f0 89 e0 11 38  09 f0 83 e0 68 d0 80 e1  |.8!....8 ...h...|
0090  66 d0 ef cf 83 e7 90 e0  d3 cf 17 9a 2e ec 36 e5  |f.............6.|
00a0  a8 95 90 91 04 08 97 fd  e1 cf 21 50 31 09 c1 f7  |..........!P1 ..|
00b0  da cf 82 34 19 f4 84 e1  76 d0 e9 cf 85 34 11 f4  |...4....v....4..|
00c0  85 e0 fa cf 85 35 31 f4  51 d0 c8 2f 4f d0 d8 2f  |.....51.Q../O../|
00d0  62 d0 dd cf 86 35 21 f4  84 e0 65 d0 80 e0 d6 cf  |b....5!...e.....|
00e0  84 36 b9 f4 43 d0 42 d0  18 2f 40 d0 86 34 79 f4  |.6..C.B../@..4y.|
00f0  d0 58 3c d0 88 83 21 96  11 50 d9 f7 4c d0 04 bf  |.X<...!..P..L...|

avrdude> dump
>>> dump
Usage: dump <memory> <addr> <len>
       dump <memory> <addr> ...
       dump <memory> <addr>
       dump <memory> ...
       dump <memory>
avrdude> dump flash
>>> dump flash
0100  d0 92 00 10 80 91 02 10  83 70 e1 f7 c0 cf dc 5e  |.........p.....^|
0110  f0 cf 84 37 91 f4 2a d0  29 d0 18 2f 27 d0 f8 2e  |...7..*.)../'...|
0120  3a d0 86 e4 f8 12 07 c0  d0 58 88 81 21 96 17 d0  |:........X..!...|
0130  11 50 d9 f7 ac cf dc 5e  f8 cf 85 37 51 f4 2b d0  |.P.....^...7Q.+.|
0140  80 91 00 11 0c d0 80 91  01 11 09 d0 80 91 02 11  |.... ..... .....|
0150  9d cf 81 35 09 f0 bc cf  81 e0 14 d0 b9 cf 90 91  |...5 ...........|
0160  04 08 95 ff fc cf 80 93  02 08 08 95 80 91 04 08  |................|
0170  87 ff fc cf 90 91 01 08  80 91 00 08 92 fd 01 c0  |................|
0180  a8 95 08 95 90 91 01 01  90 fd fc cf 98 ed 94 bf  |................|
0190  80 93 00 01 08 95 ea df  80 32 19 f0 81 e0 f2 df  |.........2......|
01a0  ff cf 84 e1 dc cf cf 93  c8 2f e0 df c1 50 e9 f7  |........./...P..|
01b0  cf 91 f1 cf 68 30 48 f4  8d e9 84 bf 60 93 00 10  |....h0H.....`...|
01c0  80 91 02 10 83 70 e1 f7  08 95 fc 01 40 83 08 95  |.....p......@...|
01d0  ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff  |................|
01e0  ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff  |................|
01f0  ff ff ff ff ff ff ff ff  ff ff ff ff ff ff 01 09  |............... |

avrdude> dump flash
>>> dump flash
0200  19 c0 28 c0 27 c0 26 c0  25 c0 24 c0 23 c0 22 c0  |..(.'.&.%.$.#.".|
0210  21 c0 20 c0 1f c0 1e c0  1d c0 1c c0 57 c0 1a c0  |!. .........W...|
0220  19 c0 18 c0 17 c0 16 c0  15 c0 14 c0 13 c0 12 c0  |................|
0230  11 c0 10 c0 11 24 1f be  cf ef cd bf df e3 de bf  |.....$..........|
0240  2e e3 a0 e0 be e3 01 c0  1d 92 aa 30 b2 07 e1 f7  |...........0....|
0250  77 d0 b2 c0 d5 cf 8f b7  f8 94 40 91 02 3e 50 91  |w.........@..>P.|
0260  03 3e 60 91 04 3e 70 91  05 3e 8f bf 2f b7 f8 94  |.>`..>p..>../...|
0270  80 91 02 3e 90 91 03 3e  a0 91 04 3e b0 91 05 3e  |...>...>...>...>|
0280  2f bf 84 1b 95 0b a6 0b  b7 0b 88 3e 93 40 a1 05  |/.... . . .>.@..|
0290  b1 05 60 f3 08 95 90 e1  81 11 11 c0 90 93 26 04  |..`...........&.|
02a0  90 91 20 04 94 fd 0a c0  9f b7 f8 94 81 11 0a c0  |.. ... ....... .|
02b0  80 91 34 04 87 7f 80 93  34 04 9f bf 08 95 90 93  |..4.....4.......|
02c0  25 04 ee cf 80 91 34 04  88 60 f5 cf ef 93 ff 93  |%.....4..`......|
02d0  e0 e0 fe e3 8f 93 8f b7  8f 93 9f 93 7f 93 70 e0  |..............p.|
02e0  80 81 91 81 80 5d 9c 4f  80 83 91 83 88 5e 93 40  |.....].O.....^.@|
02f0  18 f0 80 83 91 83 7f 5f  92 81 97 0f 92 83 80 e0  |......._........|

avrdude> quit
>>> quit
avrdude>

C:\work\avr\avrdude_test\avrdude_main\out\build\x64-Release\src [main ≡ +5 ~0 -0 !]> echo "dump flash 0 0x40" 
| .\avrdude -c xplainedpro_updi -p t817 -qqt
avrdude> dump flash 0 0x40
>>> dump flash 0 0x40
0000  01 c0 d8 c0 11 24 80 91  40 00 88 23 69 f0 28 2f  |.....$..@..#i.(/|
0010  30 e0 83 fd 03 c0 2d 7f  23 2b 31 f4 80 93 40 00  |0.....-.#+1...@.|
0020  8c bb 80 e0 af d0 ec c0  a8 95 22 9a 2a 9a 10 92  |..........".*...|
0030  01 02 80 91 82 12 83 70  81 30 61 f5 8c e5 90 e0  |.......p.0a.....|

avrdude>
(arg: 4) (need to hit CTRL-C to exit)

C:\work\avr\avrdude_test\avrdude_bin> echo "dump flash" | .\avrdude_git_readline_msvc -c urclock -P COM13
 -p t817 -xbootsize=512 -t

avrdude_git_readline_msvc: AVR device initialized and ready to accept instructions
avrdude_git_readline_msvc: device signature = 0x1e9320 (probably t817)
avrdude> dump flash
>>> dump flash

Reading | ################################################## | 100% 0.03 s

0000  01 c0 d8 c0 11 24 80 91  40 00 88 23 69 f0 28 2f  |.....$..@..#i.(/|
0010  30 e0 83 fd 03 c0 2d 7f  23 2b 31 f4 80 93 40 00  |0.....-.#+1...@.|
0020  8c bb 80 e0 af d0 ec c0  a8 95 22 9a 2a 9a 10 92  |..........".*...|
0030  01 02 80 91 82 12 83 70  81 30 61 f5 8c e5 90 e0  |.......p.0a.....|
0040  80 93 08 08 90 93 09 08  81 e0 80 93 0b 08 83 e0  |...... ..... ...|
0050  80 93 07 08 10 92 05 08  80 ec 80 93 06 08 8b e0  |................|
0060  91 d0 07 9a 87 e0 81 50  c1 f4 a8 95 0d e9 83 e0  |.......P.... ...|
0070  d8 2e 7c d0 81 34 e9 f4  79 d0 18 2f 8c d0 81 e0  |..|..4..y../....|
0080  12 38 21 f0 89 e0 11 38  09 f0 83 e0 68 d0 80 e1  |.8!....8 ...h...|
0090  66 d0 ef cf 83 e7 90 e0  d3 cf 17 9a 2e ec 36 e5  |f.............6.|
00a0  a8 95 90 91 04 08 97 fd  e1 cf 21 50 31 09 c1 f7  |..........!P1 ..|
00b0  da cf 82 34 19 f4 84 e1  76 d0 e9 cf 85 34 11 f4  |...4....v....4..|
00c0  85 e0 fa cf 85 35 31 f4  51 d0 c8 2f 4f d0 d8 2f  |.....51.Q../O../|
00d0  62 d0 dd cf 86 35 21 f4  84 e0 65 d0 80 e0 d6 cf  |b....5!...e.....|
00e0  84 36 b9 f4 43 d0 42 d0  18 2f 40 d0 86 34 79 f4  |.6..C.B../@..4y.|
00f0  d0 58 3c d0 88 83 21 96  11 50 d9 f7 4c d0 04 bf  |.X<...!..P..L...|

avrdude>
(arg: 4) (need to hit CTRL-C to exit)
mcuee commented 1 year ago

Yet the other way is to get the Readline binary from vcpkg, and copy the necessary into a directory named readline, then move the file under src/msvc directory.

PS C:\work\avr\avrdude_test\avrdude_pr1207> & 'C:\Program Files\CMake\bin\cmake.exe' -D HAVE_LIBREADLINE:FILEPATH=C:\work\avr\avrdude_test\avrdude_pr1207\src\msvc\readline\readline.lib  -D USE_EXTERNAL=TRUE -B build
-- Building for: Visual Studio 17 2022
-- Selecting Windows SDK version 10.0.22000.0 to target Windows 10.0.22621.
-- The C compiler identification is MSVC 19.31.31105.0
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Check for working C compiler: C:/Program Files/Microsoft Visual Studio/2022/Community/VC/Tools/MSVC/14.31.31103/bin/Hostx64/x64/cl.exe - skipped
-- Detecting C compile features
-- Detecting C compile features - done
-- Found Git: C:/Program Files/Git/cmd/git.exe (found version "2.33.0.windows.2")
-- Found FLEX: C:/ProgramData/chocolatey/bin/win_flex.exe (found version "2.6.4")
-- Found BISON: C:/ProgramData/chocolatey/bin/win_bison.exe (found version "3.7.4")
-- Fetching external libraries, please wait...
-- The CXX compiler identification is MSVC 19.31.31105.0
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Check for working CXX compiler: C:/Program Files/Microsoft Visual Studio/2022/Community/VC/Tools/MSVC/14.31.31103/bin/Hostx64/x64/cl.exe - skipped
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- Using external library 'libelf'
-- Using external library 'libusb'
-- Using external library 'libhidapi'
-- Using external library 'libftdi'
-- Configuration summary:
-- ----------------------
-- DO HAVE    libelf
-- DO HAVE    libusb
-- DON'T HAVE libusb_1_0
-- DO HAVE    libhidapi
-- DO HAVE    libftdi
-- DON'T HAVE libftdi1
-- DO HAVE    libreadline
-- DISABLED   doc
-- DISABLED   parport
-- DISABLED   linuxgpio
-- DISABLED   linuxspi
-- ----------------------
-- Configuring done
-- Generating done
-- Build files have been written to: C:/work/avr/avrdude_test/avrdude_pr1207/build
mcuee commented 1 year ago

Result binary seems to work fine.

1) With PR #1207, everything seems to work fine

PS C:\work\avr\avrdude_test\avrdude_pr1207\build\src\RelWithDebInfo> 
.\avrdude -c urclock -P COM1 -p m328p -xbootsize=512 -qqt
avrdude> help
>>> help
Valid commands:
  dump    : dump <memory> [<addr> <len> | <addr> ... | <addr> | ...]
  read    : alias for dump
  write   : write <memory> <addr> <data>[,] {<data>[,]}
          : write <memory> <addr> <len> <data>[,] {<data>[,]} ...
  flush   : synchronise flash & EEPROM writes with the device
  abort   : abort flash & EEPROM writes (reset the r/w cache)
  erase   : perform a chip erase
  sig     : display device signature bytes
  part    : display the current part information
  send    : send a raw command: send <b1> <b2> <b3> <b4>
  verbose : change verbosity
  quell   : set quell level for progress bars
  help    : show help message
  ?       : same as help
  quit    : quit after writing out cache for flash & EEPROM

Note that not all programmer derivatives support all commands. Flash and
EEPROM type memories are normally read and written using a cache via paged
read and write access; the cache is synchronised on quit or flush commands.
The part command displays valid memory types for use with dump and write.

avrdude> dump flash 0 0x20
>>> dump flash 0 0x20
0000  ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff  |................|
0010  ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff  |................|

avrdude> quit
>>> quit
avrdude>
PS C:\work\avr\avrdude_test\avrdude_pr1207\build\src\RelWithDebInfo> echo "dump flash 0 0x20" 
| .\avrdude -c urclock -P COM1 -p m328p -xbootsize=512 -qqt
avrdude> >>> dump flash 0 0x20
0000  ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff  |................|
0010  ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff  |................|

avrdude>

git main has the same issue as before when it comes to pipes.

PS C:\work\avr\avrdude_test\avrdude_main\build\src\Release>
echo "dump flash 0 0x20" | .\avrdude -c urclock -P COM1 -p m328p -xbootsize=512 -qqt
avrdude> dump flash 0 0x20
>>> dump flash 0 0x20
0000  ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff  |................|
0010  ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff  |................|

avrdude>
avrdude> (need to hit Control-C to exit)

readline_msvc_x64.zip

mcuee commented 1 year ago

Just to illustrate the issue again with readline-win32. PR #1207 is good for this case.

PS C:\work\avr\avrdude_test\avrdude_bin> echo "dump flash 0 0x20" | .\avrdude_git_msvc_readline
 -c urclock -P COM1 -p m328p -xbootsize=512 -qqt
avrdude> dump flash 0 0x20
>>> dump flash 0 0x20
0000  ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff  |................|
0010  ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff  |................|

avrdude>
avrdude>(need to hit CTRL-C to get out)

PS C:\work\avr\avrdude_test\avrdude_bin> echo "dump flash 0 0x20" | .\avrdude_pr1207_msvc_readline
 -c urclock -P COM1 -p m328p -xbootsize=512 -qqt
avrdude> >>> dump flash 0 0x20
0000  ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff  |................|
0010  ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff  |................|

avrdude>
stefanrueger commented 1 year ago

avrdude>(need to hit CTRL-C to get out)

I think @mariusgreuel is aware of this. Somehow reading from a pipe/file does not generate EOF he told us.

mcuee commented 1 year ago

avrdude>(need to hit CTRL-C to get out)

I think @mariusgreuel is aware of this. Somehow reading from a pipe/file does not generate EOF he told us.

Good to know that. No idea why PR #1207 helps in this case.

mcuee commented 1 year ago

@mariusgreuel mentioned that he would like to include this in the 7.1 release.

https://github.com/avrdudes/avrdude/pull/1242#issuecomment-1365980848

I was planning on going through the issues assigned to me. At least I would like to include #1186 in the next release.

mcuee commented 1 year ago

@mariusgreuel, @stefanrueger @dl8dtl and @MCUdude

I have added this to 7.1 milestone. I think PR #1259 is almost there. Hopefully the fix for the remaining issues will not take too much time.

stefanrueger commented 1 year ago

Closing as PR #1264 addresses this.