-
Notifications
You must be signed in to change notification settings - Fork 0
/
ARM-GCC_DR-MEMORY_EXPORT-PATH.txt
622 lines (479 loc) · 22.4 KB
/
ARM-GCC_DR-MEMORY_EXPORT-PATH.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
ARM-GCC, Dr. Memory, and others.
Add applications stored in non-standard locations to
the system search path.
ARM:
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
NOTE: If you have followed an older version of this instruction,
please delete the lines below from your .bashrc
------------------------------------------------------------------
mousepad ~/.bashrc
------------------------------------------------------------------
# # # # # # # # # # # # # # # # # # # # # # # # # # #
# GNU Toolchains for ARM compiler
# # # # # # # # # # # # # # # # # # # # # # # # # # #
PATH=$PATH:"~/gcc-arm-none-eabi-10-2020-q4-major/bin/"
# # # # # # # # # # # # # # # # # # # # # # # # # # #
Don't forget to create a new blank line and
leave it intact as before.
Save changes and quit the editor. Reload .bashrc,
------------------------------------------------------------------
source ~/.bashrc
mousepad ~/.config/fish/config.fish
------------------------------------------------------------------
Paste the following lines (delete the path to ARM-GCC we added
previously)
------------------------------------------------------------------
set PATH $PATH /usr/local/bin
export PATH
function ll
ls -lh $argv
end
------------------------------------------------------------------
Don't forget to create a new blank line.
Reload the file "config.fish" as usual.
------------------------------------------------------------------
source ~/.config/fish/config.fish
------------------------------------------------------------------
We don't need ARM-GCC in .bashrc and config.fish to clutter up
the terminal's search list, because we will create symbolic links
to the ARM compiler binary executables in /usr/bin/
to achieve guaranteed success without any trouble.
Although 'sudo chmod -R 755 *' will give permission to the required
executable files, the compiler should work from the terminal
even if the path to the compiler is not on the system's
search path, but I noticed that a lot of executable files
added to the search list of the BASH/FISH shell was slowing down
my old test laptop. I use old machines to test and benchmark
performance. As a rule of thumb, if something can work under
low resources, it will run on any high-end new hardware where
resources are plenty. What we need are four or five symlinks
to a few core compiler executables in the system search path.
Ref: https://askubuntu.com/questions/1243252/how-to-install-arm-none-eabi-gdb-on-ubuntu-20-04-lts-focal-fossa
DuckDuckGo search: gcc-arm-none-eabi-10-2020-q4-major-x86_64-linux.tar.bz2 install on ubuntu
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Installation of GNU Toolchain for ARM compiler
to cross-compile codes that are written for
the STM32 family MCU targets,
e.g., STM32 powered development boards and boards
with similar microcontrollers
(e.g. STM32 Nucleo boards, STM32 Blue Pill, etc.):
Download the Compiler first.
Although we will avoid any GUI IDEs before the onset of any
little bafflement that can be posed by those
decorative artefacts (not the makers' tools), an IDE which we
will refer to is 'Embedded IDE' because it is
fairly straightforward and provides some assistance
with some useful download links.
Unlike other super-bloated extremely infuriating ARM IDEs
that are super-efficient in adding more to the confusion of
an already confused user, 'Embedded IDE' takes a rather
simplistic approach.
Nevertheless, command-line tools are much easier
to use and provide way more flexibility than
their graphical counterparts. We will be using the command-line
interfaces of our compiler/burner/debugger.
Visit Embedded IDE's GitHub repository.
https://github.com/martinribelotta/embedded-ide
https://github.com/ciaa/EmbeddedIDE-templates
Find the download link to ARM-GCC.
Navigate to the link that follows the latest
releases found on developer.arm.com.
https://developer.arm.com/tools-and-software/open-source-software/developer-tools/gnu-toolchain/gnu-rm
Download the tar archive
'gcc-arm-none-eabi-10-2020-q4-major-x86_64-linux.tar.bz2'
(or later versions of ARM-GCC)
(assuming you are on a 64-bit Xubuntu
on an x86 CPU equipped machine, desktop/laptop).
Copy the downloaded tar file to your $HOME directory (~/).
Right-click inside the GUI file manager and select
'Open Terminal Here'.
Type:
------------------------------------------------------------------
mkdir ~/ARMGCC
sudo tar xjf gcc-arm-none-eabi-10-2020-q4-major-x86_64-linux.tar.bz2 -C ~/ARMGCC
------------------------------------------------------------------
Wait till the archive gets extracted.
Enter the 'bin' directory (via the terminal emulator),
------------------------------------------------------------------
cd ~/ARMGCC/gcc-arm-none-eabi-10-2020-q4-major/
sudo touch install-script.sh
sudo mousepad install-script.sh
------------------------------------------------------------------
GEdit or any GUI plaintext editor can be used.
Mousepad comes with XFCE.
Now paste the following lines.
Adjust the paths if you use a later version of ARM-GCC.
------------------------------------------------------------------
#!/bin/bash
sudo ln -s ~/ARMGCC/gcc-arm-none-eabi-10-2020-q4-major/bin/arm-none-eabi-gcc /usr/bin/arm-none-eabi-gcc
sudo ln -s ~/ARMGCC/gcc-arm-none-eabi-10-2020-q4-major/bin/arm-none-eabi-g++ /usr/bin/arm-none-eabi-g++
sudo ln -s ~/ARMGCC/gcc-arm-none-eabi-10-2020-q4-major/bin/arm-none-eabi-gdb /usr/bin/arm-none-eabi-gdb
sudo ln -s ~/ARMGCC/gcc-arm-none-eabi-10-2020-q4-major/bin/arm-none-eabi-size /usr/bin/arm-none-eabi-size
sudo ln -s ~/ARMGCC/gcc-arm-none-eabi-10-2020-q4-major/bin/arm-none-eabi-objcopy /usr/bin/arm-none-eabi-objcopy
------------------------------------------------------------------
You can use any other editor of your choice.
Mousepad has already been integrated
into XFCE, so I used it.
Change the permission parameters so that
the script can execute.
------------------------------------------------------------------
sudo chmod -R 755 install-script.sh
------------------------------------------------------------------
Run the script to create symbolic links
in the system directory /usr/bin/
------------------------------------------------------------------
./install-script.sh
------------------------------------------------------------------
Authorise the compiler binaries to read/write
by changing the permission parameters,
(Ref: https://phoenixnap.com/kb/chmod-recursive)
------------------------------------------------------------------
cd bin/
chmod -R 755 *
------------------------------------------------------------------
The star (*) indicates all files, -R implies recursively.
Install dependencies:
------------------------------------------------------------------
sudo apt install libncurses-dev
whereis libtinfo.so
whereis libcurses.so
sudo ln -s /usr/lib/x86_64-linux-gnu/libcurses.so /usr/lib/x86_64-linux-gnu/libncurses.so.5
sudo ln -s /usr/lib/x86_64-linux-gnu/libtinfo.so /usr/lib/x86_64-linux-gnu/libtinfo.so.5
------------------------------------------------------------------
Also, create an uninstallation script:
------------------------------------------------------------------
sudo touch uninstall-script.sh
sudo chmod -R 755 uninstall-script.sh
------------------------------------------------------------------
sudo mousepad uninstall-script.sh
------------------------------------------------------------------
Paste the contents:
------------------------------------------------------------------
#!/bin/bash
sudo rm /usr/bin/arm-none-eabi-gcc
sudo rm /usr/bin/arm-none-eabi-g++
sudo rm /usr/bin/arm-none-eabi-gdb
sudo rm /usr/bin/arm-none-eabi-size
sudo rm /usr/bin/arm-none-eabi-objcopy
------------------------------------------------------------------
You will only need the uninstallation script
if you ever update your compiler.
See whether the new setup finds
the ARM-GCC compiler in the path,
------------------------------------------------------------------
arm-none-eabi-gcc --version
arm-none-eabi-g++ --version
arm-none-eabi-gdb --version
arm-none-eabi-size --version
arm-none-eabi-objcopy --version
------------------------------------------------------------------
Install additional utilities to upload
compiled codes (*.bin) to the target boards:
------------------------------------------------------------------
apt search libusb-1.0
------------------------------------------------------------------
sudo apt install libusb-1.0-0
sudo apt install libusb-1.0-doc
------------------------------------------------------------------
apt search stlink
------------------------------------------------------------------
sudo apt install libstlink1
sudo apt install stlink-tools
sudo apt install stlink-gui
------------------------------------------------------------------
The link below came as a boon when
I first attempted installing ARM-GCC.
However, I didn't have a chance to test
any ARM board until now.
https://blog.gypsyengineer.com/en/diy-electronics/a-template-project-for-stm32f103-on-linux.html
I'll buy a ST-LINK/V2 clone with a Blue Pill clone development board
within a few months if I can garner a little fund for ARM MCU development,
then I'll update the outcome along with the necessary changes
that might be needed to reflect here as well.
I own two Arduino UNO Rev-3 boards though, one of which I built
five years ago without the USB functionality.
The original one is used as the ISP.
Associated links:
https://github.com/artem-smotrakov/stm32f103-template
Other useful links:
https://github.com/stlink-org/stlink
DuckDuckGo search: how to install arm gcc for stm32 blue pill on ubuntu
https://unix.stackexchange.com/questions/3809/how-can-i-make-a-program-executable-from-everywhere
https://www.howtogeek.com/658904/how-to-add-a-directory-to-your-path-in-linux/
DuckDuckGo search: Add programs to the path in Linux
Test your setup:
Create a folder 'code' in $HOME (i.e., ~/code).
------------------------------------------------------------------
mkdir ~/code
------------------------------------------------------------------
Download https://github.com/artem-smotrakov/stm32f103-template
and extract the ARM template makefile project
into ~/code
The directrory should look like ~/code/stm32f103-template-master/
However, you need STM32 Standard Peripheral Libraries.
Namely, 'en.stsw-stm32054.zip' or,
the library folder
'STM32F10x_StdPeriph_Lib_V3.5.0' when extracted.
Silicon Technologies will allow you to download the library
only if you submit your email address.
They will send you the download link to your inbox. I'm a registered
user.
The library is huge, at least 21.1 MB when zipped,
around 30.7 MB when extracted.
You are (possibly) not allowed
to redistribute the library along with
your own code. You can merely refer to it.
Add that STM's proprietary library folder to '.gitignore'
if you are planning to keep your project
in a remote Git repository.
Now it's time to compile a simple makefile project.
Extract 'en.stsw-stm32054.zip' and copy the extracted folder
'STM32F10x_StdPeriph_Lib_V3.5.0' to ~/code/stm32f103-template-master/
'STM32F10x_StdPeriph_Lib_V3.5.0' will appear as a subdirectory under
~/code/stm32f103-template-master/
Navigate to ~/code/stm32f103-template-master/ using your
graphical file manager and r-click -> select 'Open Terminal Here'.
Below are the commands to
clean, compile, and upload/burn/in-circuit-program consecutively:
------------------------------------------------------------------
STD_PERIPH_LIBS=~/code/stm32f103-template-master/STM32F10x_StdPeriph_Lib_V3.5.0/ make clean
STD_PERIPH_LIBS=~/code/stm32f103-template-master/STM32F10x_StdPeriph_Lib_V3.5.0/ make all
STD_PERIPH_LIBS=~/code/stm32f103-template-master/STM32F10x_StdPeriph_Lib_V3.5.0/ make burn
------------------------------------------------------------------
Tip: Clean the project first, then try to compile.
After a successful compilation, one xyzw.bin file will be generated
along with one xyzw.hex, and a xyzw.elf file.
'make burn' will upload the *.bin file to the target board.
(Superuser password will be asked by the STLlink utility since we
are dealing with the host machine's USB connection).
I could successfully compile the code, but until I get an
in-circuit programmer like a ST-Link/V2 (also a target board),
I'll have to remain satisfied with the message that appears
immediately before the ICSP starts burning
the xyzw.bin to the MCU on the target board.
I redirected the compiler log to a text file (instead of the
console output).
Look at it (Compilation was successful).
------------------------------------------------------------------
STD_PERIPH_LIBS=~/code/stm32f103-template-master/STM32F10x_StdPeriph_Lib_V3.5.0/ make all > log.txt
------------------------------------------------------------------
------------------------------------------------------------------
arm-none-eabi-gcc -g -O2 -Wall -T/home/YOUR_USERNAME/code/stm32f103-
template-master/STM32F10x_StdPeriph_Lib_V3.5.0//Project/
STM32F10x_StdPeriph_Template/TrueSTUDIO/STM3210B-EVAL/stm32_flash.ld -
mlittle-endian -mthumb -mcpu=cortex-m4 -mthumb-interwork -mfloat-abi=hard -
mfpu=fpv4-sp-d16 -DSTM32F10X_MD -DUSE_STDPERIPH_DRIVER -Wl,--gc-sections -
I. -I/home/YOUR_USERNAME/code/stm32f103-template-master/
STM32F10x_StdPeriph_Lib_V3.5.0//Libraries/CMSIS/CM3/DeviceSupport/ST/
STM32F10x/ -I/home/YOUR_USERNAME/code/stm32f103-template-master/
STM32F10x_StdPeriph_Lib_V3.5.0//Libraries/CMSIS/CM3/CoreSupport -I/home/
YOUR_USERNAME/code/stm32f103-template-master/
STM32F10x_StdPeriph_Lib_V3.5.0//Libraries/STM32F10x_StdPeriph_Driver/inc
main.c /home/YOUR_USERNAME/code/stm32f103-template-master/
STM32F10x_StdPeriph_Lib_V3.5.0//Libraries/CMSIS/CM3/DeviceSupport/ST/
STM32F10x/system_stm32f10x.c /home/YOUR_USERNAME/code/stm32f103-template-
master/STM32F10x_StdPeriph_Lib_V3.5.0//Libraries/STM32F10x_StdPeriph_Driver/
src/stm32f10x_rcc.c /home/YOUR_USERNAME/code/stm32f103-template-master/
STM32F10x_StdPeriph_Lib_V3.5.0//Libraries/STM32F10x_StdPeriph_Driver/src/
stm32f10x_gpio.c /home/YOUR_USERNAME/code/stm32f103-template-master/
STM32F10x_StdPeriph_Lib_V3.5.0//Libraries/CMSIS/CM3/DeviceSupport/ST/
STM32F10x/startup/TrueSTUDIO/startup_stm32f10x_md.s -o led.elf
arm-none-eabi-objcopy -O ihex led.elf led.hex
arm-none-eabi-objcopy -O binary led.elf led.bin
------------------------------------------------------------------
------------------------------------------------------------------
STD_PERIPH_LIBS=~/code/stm32f103-template-master/STM32F10x_StdPeriph_Lib_V3.5.0/ make burn
------------------------------------------------------------------
------------------------------------------------------------------
[sudo] password for YOUR_USERNAME:
st-flash 1.6.0
2021-04-16T14:08:00 WARN usb.c: Couldn't find any ST-Link/V2 devices
make: *** [Makefile:49: burn] Error 255
------------------------------------------------------------------
D - E - B - U - G
O - P - E - N O - C - D
Do you debug your programs?
You can debug your ARM programs with OpenOCD.
http://openocd.org/
https://elinux.org/OpenOCD_Ubuntu_Package
------------------------------------------------------------------
apt search openocd
sudo apt install openocd
cd /usr/local/share
sudo ln -s /usr/share/openocd .
------------------------------------------------------------------
------------------------------------------------------------------
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
------------------------------------------------------------------
Dr. Memory:
Method 1:
Let's download and set up Dr. Memory.
https://drmemory.org/
https://github.com/DynamoRIO/drmemory/releases
Download the tar archive 'DrMemory-Linux-2.3.18722.tar.gz'.
Copy the downloaded tar file to your $HOME directory (~/).
Right-click inside the graphical file manager and select
'Open Terminal Here'.
Type:
------------------------------------------------------------------
sudo tar xzf DrMemory-Linux-2.3.18722.tar.gz
cd DrMemory-Linux-2.3.18722/
sudo chmod -R 755 *
------------------------------------------------------------------
We will add it to the bash shell's (as well as the fish shell's)
search path.
Dr. Memory is an application that checks for memory leaks in
running applications compiled with debugging symbols.
Dr. Memory is kinda like Valgrind.
Edit ~/.bashrc to export the bin directory of the Dr. Memory
to the shells' search path and make it permanent.
mousepad ~/.bashrc
Add the following lines to .bashrc,
# # # # # # # # # # # # # # # # # # # # # # # # # # #
# Dr. Memory memory debugger
# # # # # # # # # # # # # # # # # # # # # # # # # # #
PATH=$PATH:"~/DrMemory-Linux-2.3.18722/bin64/"
# # # # # # # # # # # # # # # # # # # # # # # # # # #
Leave a new line.
Reload .bashrc,
------------------------------------------------------------------
source ~/.bashrc
echo $PATH
------------------------------------------------------------------
------------------------------------------------------------------
Would you like to use the fish shell to deal with
the programs you keep as portable apps in
a flash drive or in your $HOME folder?
Fish shell still doesn't have a clue of the
BASH shell's path,
so you need to add the same folders to ".fishrc" you added
to '.bashrc' as well.
Oh!!! ".fishrc" doesn't exist.
Fish doesn't create such a file by default
in the $HOME folder, neither the fish shell recognises
anything such as ".fishrc".
It's exactly known as "config.fish".
Fish will look for this file in ~/.config/fish/
i.e., ~/.config/fish/config.fish
Ref: https://jeffmcneill.com/path-bash-shell-fish-shell/
Create the file and add your custom folders
to the search path of fish.
------------------------------------------------------------------
Now invoke the fish shell and type,
------------------------------------------------------------------
touch ~/.config/fish/config.fish
mousepad ~/.config/fish/config.fish
------------------------------------------------------------------
Add Dr. Memory to the search path of the fish shell.
Now your "config.fish" should look something like:
------------------------------------------------------------------
set PATH $PATH /usr/local/bin ~/DrMemory-Linux-2.3.18722/bin64/
export PATH
function ll
ls -lh $argv
end
------------------------------------------------------------------
Reload "config.fish",
------------------------------------------------------------------
source ~/.config/fish/config.fish
echo #PATH
------------------------------------------------------------------
------------------------------------------------------------------
You can add as many applications to the system path you like.
Follow the example below:
------------------------------------------------------------------
set PATH $PATH /usr/local/bin /path/to/application/binary /path/to/another/application/binary
export PATH
function ll
ls -lh $argv
end
------------------------------------------------------------------
Reload "config.fish" as usual after changing it,
------------------------------------------------------------------
source ~/.config/fish/config.fish
------------------------------------------------------------------
Open any terminal emulator in combination with any shell and type,
------------------------------------------------------------------
drmemory --help
------------------------------------------------------------------
Usage:
drmemory -- ./example007
Method 2:
Although Dr. Memory has three binary executable files so it was
not slowing down my test laptop, I wanted to reduce loads further
from the shell applications.
As before, we will create symlinks to Dr. Memory's executables in
/usr/bin
then delete Dr. Memory's bin64 folder from the
shell applications' search list.
The shell application will find Dr. Memory
from the system search path when it will be invoked.
Open ~/.bashrc with a text editor and delete the lines below:
------------------------------------------------------------------
mousepad ~/.bashrc
------------------------------------------------------------------
Delete the following lines:
# # # # # # # # # # # # # # # # # # # # # # # # # # #
# Dr. Memory memory debugger
# # # # # # # # # # # # # # # # # # # # # # # # # # #
PATH=$PATH:"~/DrMemory-Linux-2.3.18722/bin64/"
# # # # # # # # # # # # # # # # # # # # # # # # # # #
------------------------------------------------------------------
source ~/.bashrc
------------------------------------------------------------------
Delete Dr. Memory's bin64 folder from fish shell's search list also.
Edit config.fish
------------------------------------------------------------------
mousepad ~/.config/fish/config.fish
------------------------------------------------------------------
Now it should look something like:
------------------------------------------------------------------
set PATH $PATH /usr/local/bin
export PATH
function ll
ls -lh $argv
end
------------------------------------------------------------------
Reload "config.fish" as usual,
------------------------------------------------------------------
source ~/.config/fish/config.fish
------------------------------------------------------------------
Now create two files in ~/DrMemory-Linux-2.3.18722/bin64/
install-script.sh and uninstall-script.sh
Fill the files with the contents written as follows:
install-script.sh
------------------------------------------------------------------
#!/bin/bash
sudo ln -s ~/DrMemory-Linux-2.3.18722/bin64/drmemory /usr/bin/drmemory
sudo ln -s ~/DrMemory-Linux-2.3.18722/bin64/drltrace /usr/bin/drltrace
sudo ln -s ~/DrMemory-Linux-2.3.18722/bin64/symquery /usr/bin/symquery
------------------------------------------------------------------
uninstall-script.sh
------------------------------------------------------------------
#!/bin/bash
sudo rm /usr/bin/drmemory
sudo rm /usr/bin/drltrace
sudo rm /usr/bin/symquery
------------------------------------------------------------------
Change the permission parameters of those files:
------------------------------------------------------------------
sudo chmod -R 755 install-script.sh
sudo chmod -R 755 uninstall-script.sh
------------------------------------------------------------------
Run:
./install-script.sh
Dr. Memory has been installed by now.
The uninstallation script will be needed
when we will update Dr. Memory with a newer version.
The older version must be deleted
from the system directory /usr/bin
You can choose either of the methods.
I'd go for the 2nd method since it is
less stressful to a resource-constrained system.
We are all set up.
Try adding AVR-GCC and SDCC cross-compilers
if you need Atmel (now acquired by Microchip) AVR and
Intel (now manufactured by Microchip, Philips and so many) 8051
microcontrollers.
I tried my best to explain. Let the ST-Link/V2 come.
I will also check the upload step.