从零开发一个RTOS系列--准备篇

本文介绍了开发RTOS前的准备工作,包括选择arm-none-eabi-gcc作为交叉编译器,理解交叉编译工具链命名规则,使用OpenOCD进行在线调试,以及Makefile的管理作用。同时,提到了nostartfiles标志不链接crt0.c,以及链接脚本在内存布局中的作用。RTOS核心功能涉及内存管理、任务切换、中断异常管理和消息管理,并简述了RTOS的引导过程和BootLoader的作用。
摘要由CSDN通过智能技术生成
  • 工具准备:

(1)交叉编译器:

不同的开发板可能需要不同的交叉编译器,笔者之前使用的开发板型号好像是STM32F407VG-Discovery,记不太清了,目前开发板不在身边,不能真机调试,先说一些理论方面的内容。笔者选用的交叉编译器是arm-none-eabi-gcc、arm-none-eabi-gdb, 大家可以到这个地址下载最新版:https://developer.arm.com/open-source/gnu-toolchain/gnu-rm/downloads。

关于编译器的选择这里要简单讲一下,arm-none-eabi-gcc这个名字是依据一种特定格式的。

命名规则:

交叉编译工具链的命名规则为:

  • arch [-vendor] [-os] [-(gnu)eabi]

  • arch - 体系架构,如ARM,MIPS

  • verdor - 工具链提供商

  • os - 目标操作系统

  • eabi - 嵌入式应用二进制接口

由于我们要尝试开发一款RTOS内核,是开发针对裸机的程序,所以选择了arm-none-eabi-gcc。

有时候为了定制交叉编译器,可能还需要我们自己编译一个交叉编译器以及相对应的c库(由于库体积原因,一般是用newlib这个嵌入式c库,而不用gnu的完整版c库)

(2)OpenOCD:这个是支持在线单步调试的,具体用法后面再详解,需要STLinkV2硬件

(3)Makefile:

Makefile是用来管理如何编译我们的代码的,具体Makefile知识读者可以自行百度学习。

下面这个Makefile是笔者从网上整理并修改的,大家可以简单看一下。
 


TOOLCHAIN_DIR=/home/jeremy/bin/gcc-arm-none-eabi-8-2018-q4-major

AS=$(TOOLCHAIN_DIR)/bin/arm-none-eabi-as

CC=$(TOOLCHAIN_DIR)/bin/arm-none-eabi-gcc

OBJCOPY=$(TOOLCHAIN_DIR)/bin/arm-none-eabi-objcopy

LD=$(TOOLCHAIN_DIR)/bin/arm-none-eabi-ld





CFLAGS=-mcpu=cortex-m4 -mfpu=fpv4-sp-d16 -mthumb -mfloat-abi=soft --specs=nosys.specs -nostartfiles -Og -fmessage-length=0 -fsigned-char -ffunction-sections -fdata-sections -ffreestanding -fno-move-loop-invariants -Wall -Wextra -g3 -DDEBUG -DUSE_FULL_ASSERT -DTRACE -DOS_USE_TRACE_SEMIHOSTING_DEBUG -DSTM32F407xx -DUSE_HAL_DRIVER -std=gnu11 -MMD -MP -MF"$(@:%.o=%.d)" -MT"$(@)" #-c -o "$@" "$<"

# CFLAGS += -fpic -pie

CFLAGS+=-I$(INCLUDE_DIR) -I$(INCLUDE_DIR)/cmsis -I$(INCLUDE_DIR)/stm32f4-hal



SUBDIRS=$(shell ls -l | grep ^d | awk '{if($$9 != "bin" && $$9 != "include") print $$9}')



ROOT_DIR=$(shell pwd)

INCLUDE_DIR=$(ROOT_DIR)/include



ELF=bootloader.elf

BIN=bootloader.bin

BIN_D
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值