Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 在Debian上无IDE编程STM32F4x_C_Makefile_Arm_Embedded_Stm32 - Fatal编程技术网

C 在Debian上无IDE编程STM32F4x

C 在Debian上无IDE编程STM32F4x,c,makefile,arm,embedded,stm32,C,Makefile,Arm,Embedded,Stm32,这是我在这个网站上的第一个问题,我不确定我的英语 我想知道是否有一种方法可以通过USB,而不是不使用任何IDE的JTAG对NucleoSTM32F446RE进行编程 出于培训目的,我只想使用文本编辑器编程,我使用kate、Makefiles和命令行 我已找到/安装的内容: gcc arm none eabi 6-2017-q2-update 我认为,它包含了我们需要编译的所有内容,但我认为其中没有asm编译器 这里有一个C语言的代码示例,以及我不完全理解的makefiles。它似乎编译得很好,我

这是我在这个网站上的第一个问题,我不确定我的英语

我想知道是否有一种方法可以通过USB,而不是不使用任何IDE的JTAG对NucleoSTM32F446RE进行编程

出于培训目的,我只想使用文本编辑器编程,我使用kate、Makefiles和命令行

我已找到/安装的内容:

gcc arm none eabi 6-2017-q2-update 我认为,它包含了我们需要编译的所有内容,但我认为其中没有asm编译器

这里有一个C语言的代码示例,以及我不完全理解的makefiles。它似乎编译得很好,我尝试了最小的例子

以下是我使用的示例:

#ifndef __NO_SYSTEM_INIT
void SystemInit()
{}
#endif

void main()
{
    for (;;);
}
下面是Makefile:

# Selecting Core
CORTEX_M=4

# Use newlib-nano. To disable it, specify USE_NANO=
USE_NANO=--specs=nano.specs

# Use seimhosting or not
USE_SEMIHOST=--specs=rdimon.specs
USE_NOHOST=--specs=nosys.specs

CORE=CM$(CORTEX_M)
BASE=../..

# Compiler & Linker
CC=arm-none-eabi-gcc
CXX=arm-none-eabi-g++

# Options for specific architecture
ARCH_FLAGS=-mthumb -mcpu=cortex-m$(CORTEX_M)

# Startup code
STARTUP=$(BASE)/startup/startup_ARM$(CORE).S

# -Os -flto -ffunction-sections -fdata-sections to compile for code size
CFLAGS=$(ARCH_FLAGS) $(STARTUP_DEFS) -Os -flto -ffunction-sections -fdata-sections
CXXFLAGS=$(CFLAGS)

# Link for code size
GC=-Wl,--gc-sections

# Create map file
MAP=-Wl,-Map=$(NAME).map

NAME=minimum
STARTUP_DEFS=-D__STARTUP_CLEAR_BSS -D__START=main

LDSCRIPTS=-L. -L$(BASE)/ldscripts -T nokeep.ld
LFLAGS=$(USE_NANO) $(USE_NOHOST) $(LDSCRIPTS) $(GC) $(MAP)

$(NAME)-$(CORE).axf: $(NAME).c $(STARTUP)
    $(CC) $^ $(CFLAGS) $(LFLAGS) -o $@

clean: 
    rm -f $(NAME)*.axf *.map *.o
我修改它是为了设置cortex-m4而不是cortex-m0。 运行make命令后,我得到minimum.map和minimum.axf文件


但我不知道如何在设备中加载目标代码。没有最小的.o文件是正常的吗

我将这种情况称为C代码的一个最小示例,在这种情况下,无限循环不是必需的,而是受您的启发

向量

.thumb

.globl _start
_start:
    .word 0x20002000
    .word reset
    .word done
    .word done

.thumb_func
reset:
    bl centry
    b done
.thumb_func
done:
    b done
所以,c

flash.ld

MEMORY
{
    rom : ORIGIN = 0x08000000, LENGTH = 0x1000
    ram : ORIGIN = 0x20000000, LENGTH = 0x1000
}
SECTIONS
{
    .text : { *(.text*) } > rom
    .rodata : { *(.rodata*) } > rom
    .bss : { *(.bss*) } > ram
}
建造

检查

08000000 <_start>:
 8000000:   20002000    andcs   r2, r0, r0
 8000004:   08000011    stmdaeq r0, {r0, r4}
 8000008:   08000017    stmdaeq r0, {r0, r1, r2, r4}
 800000c:   08000017    stmdaeq r0, {r0, r1, r2, r4}

08000010 <reset>:
 8000010:   f000 f802   bl  8000018 <centry>
 8000014:   e7ff        b.n 8000016 <done>

08000016 <done>:
 8000016:   e7fe        b.n 8000016 <done>

08000018 <centry>:
 8000018:   e7fe        b.n 8000018 <centry>
 800001a:   46c0        nop         ; (mov r8, r8)
将创建一个二进制文件,根据您使用的工具,该文件可用于加载程序。如果这是一个核仁板,你可以复制该文件到虚拟usb驱动器。显然,这个节目不会显示任何有趣的内容。使用openocd或其他SWD调试器软件如果您有一个核子板,您不需要任何其他硬件,您可以停止并重新启动程序,以尝试查看其运行

您可以阅读文档以查看地址以及如何对外围设备进行编程

thumb2只是thumb的扩展,您可以坚持使用传统的thumb,或者将cortex-m4或armv7m添加到命令行cpu/arch中,以尝试减少指令数量,但也可以选择较大的指令


毫无疑问,这里有一些工具,但是编写自己的程序与串行引导加载程序接口,将程序下载到设备中是相当容易的。

我将这样的东西称为C代码的一个最小示例,在这种情况下,无限循环不是必需的,而是受您的启发

向量

.thumb

.globl _start
_start:
    .word 0x20002000
    .word reset
    .word done
    .word done

.thumb_func
reset:
    bl centry
    b done
.thumb_func
done:
    b done
所以,c

flash.ld

MEMORY
{
    rom : ORIGIN = 0x08000000, LENGTH = 0x1000
    ram : ORIGIN = 0x20000000, LENGTH = 0x1000
}
SECTIONS
{
    .text : { *(.text*) } > rom
    .rodata : { *(.rodata*) } > rom
    .bss : { *(.bss*) } > ram
}
建造

检查

08000000 <_start>:
 8000000:   20002000    andcs   r2, r0, r0
 8000004:   08000011    stmdaeq r0, {r0, r4}
 8000008:   08000017    stmdaeq r0, {r0, r1, r2, r4}
 800000c:   08000017    stmdaeq r0, {r0, r1, r2, r4}

08000010 <reset>:
 8000010:   f000 f802   bl  8000018 <centry>
 8000014:   e7ff        b.n 8000016 <done>

08000016 <done>:
 8000016:   e7fe        b.n 8000016 <done>

08000018 <centry>:
 8000018:   e7fe        b.n 8000018 <centry>
 800001a:   46c0        nop         ; (mov r8, r8)
将创建一个二进制文件,根据您使用的工具,该文件可用于加载程序。如果这是一个核仁板,你可以复制该文件到虚拟usb驱动器。显然,这个节目不会显示任何有趣的内容。使用openocd或其他SWD调试器软件如果您有一个核子板,您不需要任何其他硬件,您可以停止并重新启动程序,以尝试查看其运行

您可以阅读文档以查看地址以及如何对外围设备进行编程

thumb2只是thumb的扩展,您可以坚持使用传统的thumb,或者将cortex-m4或armv7m添加到命令行cpu/arch中,以尝试减少指令数量,但也可以选择较大的指令


毫无疑问,这里有一些工具,但是编写自己的程序与串行引导加载程序接口,将程序下载到设备中是相当容易的。

gcc编译到汇编程序,然后启动汇编程序来生成对象。您确实有一个汇编器。请看部件的数据表,它描述了编程SWD和串行/uart调试器的基本方法。可能是usb,我没看。如果您使用的是NucleoBoard,则只需将文件复制到虚拟thumb驱动器。SWD是一个不需要在设备上运行完整/调试程序的接口。对于那些不培训任何内容的培训目的,我建议整个工具链。IDE和eclipse一样并不重要,因为您可以仅将其用作文本编辑器,并仅使用make launcher.gcc编译为assembler,然后启动assembler生成对象。您确实有一个汇编器。请看部件的数据表,它描述了编程SWD和串行/uart调试器的基本方法。可能是usb,我没看。如果您使用的是NucleoBoard,则只需将文件复制到虚拟thumb驱动器。SWD是一个不需要在设备上运行完整/调试程序的接口。对于那些不培训任何内容的培训目的,我建议整个工具链。像eclipse这样的IDE并不重要,因为您可以将其仅用作文本编辑器,并仅用于生成启动器。哦,是的,它可以工作!谢谢!为了更好地理解它,我阅读了文档和这首短裙。我想我现在已经准备好编译自己的应用程序了。再次谢谢你是的,很有效!谢谢!为了更好地理解它,我阅读了文档和这首短裙。我想我现在已经准备好编译自己的应用程序了。再次感谢