STM32适合移植的操作系统
在MDK中为STM32移植FreeRTOS
在MDK中为STM32移植FreeRTOS/***************************************************************************** FreeRTOS版本是V7.0.1。
STM32本人用的是大容量的stm32f103zgt6,故启动文件使用startup_stm32f10x_hd.s。
固件库版本V3.5.0。
编译环境用的是MDK Verson:4.22。
注:用户在移植FreeRTOS操作系统前最好先移植好STM32的固件库,调试好确保固件库能成功运行后,再进行操作系统的移植。
*****************************************************************************/ 1、在Project里新建一个文件夹并命名为FreeRTOS。
复制FreeRTOS解压包里的Source文件夹里的croutine.c,timers.c,list.c,queue.c,tasks.c以及Source->portable->RVDS->ARM_CM3->port.c以及Source->portable->MemMang->heap_2.c到自建的FreeRTOS文件夹。
按新建FreeRTOS组并添加相应文件。
如下图:2、在FreeRTOS文件夹里再新建一个文件夹include。
在include里面加入如下文件:①FreeRTOS解压包里的Source文件下include文件夹中的所有.h文件;②Source->portable->RVDS->ARM_CM3->portmacro.h;③FreeRTOS解压缩包里的Demo 文件下找到CORTEX_STM32F103_Keil文件夹(用户根据自己的开发平台选择相应文件夹),找到FreeRTOSConfig.h文件加入到include中。
实操性最强:uCOS-II移植到STM32上的详细步骤;
前言:说点废话,网上有很多关于uCOS-ii移植的文章,好多都是千篇一律,理论性很强,分析了一大堆虚头巴脑的东西,真想问他们,你确定你分析的这些东西是需要你做的工作吗?实操性严重欠缺。
这方面我也走了很多弯路,下面就将自己的移植过程一步步的记录下来,也给大家做做参考。
首先,简单总结一下移植的大概过程:(1)去uC/OS-ii官网下载你要移植芯片CPU的相关案例,不一定完全对应,那就找相应系列吧。
(2)编程环境一般有两种,分别是IAR和MDK,这个根据你自己的编程环境进行下载。
(3)本案例需要将uC/OS-II 移植到STM32F103ZET6上,而我使用的编程环境是MDK,很遗憾,官网上提供的案例是基于IAR的,所以要基于IAR的案例进行更改。
(4)使用MDK创建一个无操作系统的最简单程序,确保这个程序能够使用,这样做的目的是为了一步步的排查错误,假如无操作系统时,都有错误,移植过程中也肯定会有编译错误,那么在排查错误的时候也就增加了难度,不会写物操作系统的简单程序怎么办。
那就不要往下看了。
(5)移植的最大的改动主要有两部分,一个是一些头文件的增减,另外一个就是向量表中PendSV_Handler和SysTick_Handler的修改。
这里我要吐槽一下,网上说了一大堆关于什么OS_CPU.H的更改还有各种函数的的分析,这都是扯淡。
这些根本就不用移植者去修改,官网提供的案例都已经提供了,除非你选择移植的CPU是比较偏的,那么这些东西需要移植者自己去编写。
好了,下面就开始详细的记录怎么去移植。
一、创建一个无操作系统的简单裸板系统1.创建源文件工程文件夹,如下图所示:其中文件夹“CMSIS”为内核的接口,包含的文件如下图文件夹STM32_StdPeriph为固件驱动文件夹,这个把STM32的固件全都添加进去即可。
文件夹User为其他文件,如下图所示:文件夹Output和List主要是放那些编译产生的乱七八糟的文件,为了使工程代码更加简洁。
Huawei_LiteOS在STM32系列处理器上的移植-Huawei_LiteOS_workshop
Huawei LiteOS 在STM32系列处理器上的移植
HUAWEI TECHNOLOGIES CO., LTD.
提纲
Huawei LiteOS支 持的移植 平台简介
Kernel源 码获取途 径
源代码框 架及介绍
移植环境 准备
移植过程 讲解
函数最后加上 ALIGN ;对齐伪指定 AREA KERNEL, CODE, READONLY THUMB
修改TaskSwitch函数,最后添加
NOP ALIGN
END
HUAWEI TECHNOLOGIES CO., LTD. Huawei Confidential 16
步骤三
根据芯片类型适配硬件资源
HUAWEI TECHNOLOGIES CO., LTD.
Huawei Confidential
17
步骤三
根据芯片类型适配硬件资源
二:修改los_hwi.c和对应的头文件,配置中断
根据STM32启动文件修改PendSV_Handler异常向量和SysTick_Handler向 量的名称
Huawei LiteOS源码中,他们分别叫osPendSV、osTickHandler。
36000000 15 0x00008000 SIZE(0x2D0) // default stack 16
#define LOSCFG_BASE_CORE_TSK_DEFAULT_STACK_SIZE
添加用户任务入口函数
extern UINT32 osAppInit(VOID);
该函数需要用户去实现,用户创建的系统任务都在该函数中注册,该函数会被
STM32上移植μC/OS-Ⅱ的研究
M RS R0 PRI A SK , M CPSI D I
S M3 是意法 半导体 在 2 0 年推 出的 以最新 A O . T 2 07 M R V7C R T X. E ME 为 内核 的高 性 能微处 理 器 。S M3 T 2系列 专 为要 求 高性 能 、 成本 、 功耗 的嵌入 式 应用专 门设计 的 A M o e . 低 低 R C r xM3内 t 核。 五 、 C O . 在 S M3 上 的移植 p / SI I T 2 p / — 在 处理器 上 的移 植只 需修 改三 个文 件 。它们是 O C OSI I S CP . 、 U H OS CP A. M、 — U— C。 U AS OS CP C. a数据 类型 ) 经查 R a i el e MDK编 译器 和 S M3 V w T 2手册 , H R S O T类 型为 1 6位长 ,而 I NT为 3 2位长 度 。这 与 C T X M3内核数 据类 型 OR E . 致; 因而 不需 要更 改此 部分 代码 。 同时 状态 奇存 器和 堆栈 指针 都
一
、
前 言
进入 2 世 纪 , l 随着计 算机 及 电子技术 的高速 发展 ; 式系 统 嵌入 已深 入到 我们 生活 当 中的 方方 面面 。而 嵌入式 操作 系统 又 是嵌 入 式系 统 的基石 。它广 泛 的应用 到 了各种 嵌入 式 设备 当 中。本 文 主 要研 究 T ̄ / SI嵌入 式操 作系 统 在 以最新 AR 内核 :C r x CO . I M ot — e M3微处 理器 S M3 T 2上 的移 植 。 本文 首先 介绍 Tp / . 嵌 入式 操作 系统 及其 内核 结构 ,随 COSI I 后介 绍 Tp /SI嵌 入 式操 作系 统在 基于 C r xM3内核 的微 处 CO . I ot . e
在STM32中移植FATFS文件系统
STM32的FATFS文件系统移植笔记一、序言经常在网上、群里看到很多人问关于STM32的FATFS文件系统移植的问题,刚好自己最近也在调试这个程序,为了让大家少走弯路,我把我的调试过程和方法也贡献给大家。
二、FATFS简介FatFs Module是一种完全免费开源的FAT文件系统模块,专门为小型的嵌入式系统而设计。
它完全用标准C语言编写,所以具有良好的硬件平台独立性,可以移植到8051、PIC、AVR、SH、Z80、H8、ARM等系列单片机上而只需做简单的修改。
它支持FATl2、FATl6和FAT32,支持多个存储媒介;有独立的缓冲区,可以对多个文件进行读/写,并特别对8位单片机和16位单片机做了优化。
三、移植准备1、FATFS源代码的获取,可以到官网下载:/fsw/ff/00index_e.html最新版本是R0.09版本,我们就移植这个版本的。
2、解压文件会得到两个文件夹,一个是doc文件夹,这里是FATFS的一些使用文档和说明,以后在文件编程的时候可以查看该文档。
另一个是src文件夹,里面就是我们所要的源文件。
3、建立一个STM32的工程,为方便调试,我们应重载printf()底层函数实现串口打印输出。
可以参考已经建立好的printf()打印输出工程:.viewtool./bbs/foru ...d=77&extra=page%3D1四、开始移植1、在已经建立好的工程目录User文件夹下新建两个文件夹,FATFS_V0.09和SPI_SD_Card,FATFS_V0.09用于存放FATFS源文件,SPI_SD_Card用于存放SPI的驱动文件。
2、如图1将ff.c添加到工程文件夹中,并新建diskio.c文件,在diskio.c文件中实现五个函数:1.DSTATUS disk_initialize (BYTE);//SD卡的初始化2. DSTATUS disk_status (BYTE);//获取SD卡的状态,这里可以不用管3. DRESULT disk_read (BYTE, BYTE*, DWORD, BYTE);//从SD卡读取数据4. DRESULT disk_write (BYTE, const BYTE*, DWORD, BYTE);//将数据写入SD卡,若该文件系统为只读文件系统则不用实现该函数5. DRESULT disk_ioctl (BYTE, BYTE, void*);//获取SD卡文件系统相关信息6.复制代码<IGNORE_JS_OP>图13、初步实现以上五个函数FATFS初始化函数:1.DSTATUS disk_initialize (2.BYTE drv /* Physical drive nmuber (0..) */3. )4. {5.switch (drv)6.{7. case 0 :8. return RES_OK;9. case 1 :10. return RES_OK;11. case 2 :12. return RES_OK;13. case 3 :14. return RES_OK;15. default:16. return STA_NOINIT;17.}18. }复制代码1.DSTATUS disk_status (2.BYTE drv /* Physical drive nmuber (0..) */3. )4. {5.switch (drv)6.{7. case 0 :8. return RES_OK;9. case 1 :10. return RES_OK;11. case 2 :12. return RES_OK;13. default:14. return STA_NOINIT;15.}16. }复制代码FATFS底层读数据函数:1.DRESULT disk_read (2.BYTE drv, /* Physical drive nmuber (0..) */3.BYTE *buff, /* Data buffer to store read data */4.DWORD sector, /* Sector address (LBA) */5.BYTE count /* Number of sectors to read (1..255) */6. )7. {8.if( !count )9.{10. return RES_PARERR; /* count不能等于0,否则返回参数错误*/11.}12.switch (drv)13.{14. case 0:15.if(count==1) /* 1个sector的读操作*/16.{17.return RES_OK;18.}19.else /* 多个sector的读操作*/20.{21.return RES_OK;22.}23. case 1:24.if(count==1) /* 1个sector的读操作*/25.{26.return RES_OK;27.}28.else /* 多个sector的读操作*/29.{30.return RES_OK;31.}32.33. default:34. return RES_ERROR;35.}36. }复制代码FATFS底层写数据函数:1.DRESULT disk_write (2.BYTE drv, /* Physical drive nmuber (0..) */3.const BYTE *buff, /* Data to be written */4.DWORD sector, /* Sector address (LBA) */5.BYTE count /* Number of sectors to write (1..255) */6. )7. {8.if( !count )9.{10. return RES_PARERR; /* count不能等于0,否则返回参数错误*/11.}12.switch (drv)13.{14. case 0:15.if(count==1) /* 1个sector的写操作*/16.{17.return RES_OK;18.}19.else /* 多个sector的写操作*/20.{21.return RES_OK;22.}23. case 1:24.if(count==1) /* 1个sector的写操作*/25.{26.return RES_OK;27.}28.else /* 多个sector的写操作*/29.{30.return RES_OK;31.}32.33. default:return RES_ERROR;34.}35. }复制代码FATFS磁盘控制函数:1.DRESULT disk_ioctl (2.BYTE drv, /* Physical drive nmuber (0..) */3.BYTE ctrl, /* Control code */4.void *buff /* Buffer to send/receive control data */5. )6. {7.if (drv==0)8.{9. switch (ctrl)10. {11. case CTRL_SYNC :12.return RES_OK;13. case GET_SECTOR_COUNT :14. return RES_OK;15. case GET_BLOCK_SIZE :16. return RES_OK;17. case CTRL_POWER :18.break;19. case CTRL_LOCK :20.break;21. case CTRL_EJECT :22.break;23. /* MMC/SDC command */24. case MMC_GET_TYPE :25.break;26. case MMC_GET_CSD :27.break;28. case MMC_GET_CID :29.break;30. case MMC_GET_OCR :31.break;32. case MMC_GET_SDSTAT :33.break;34. }35. }else if(drv==1){36. switch (ctrl)37. {38. case CTRL_SYNC :39.return RES_OK;40. case GET_SECTOR_COUNT :41. return RES_OK;42. case GET_SECTOR_SIZE :43.return RES_OK;44. case GET_BLOCK_SIZE :45. return RES_OK;46. case CTRL_POWER :47.break;48. case CTRL_LOCK :49.break;50. case CTRL_EJECT :51.break;52. /* MMC/SDC command */53. case MMC_GET_TYPE :54.break;55. case MMC_GET_CSD :56.break;57. case MMC_GET_CID :58.break;59. case MMC_GET_OCR :60.break;61. case MMC_GET_SDSTAT :62.break;63. }64.}65.else{66. return RES_PARERR;67.}68.return RES_PARERR;69. }复制代码以上函数都只是实现一个框架,并没有做实际的事情,下一步就需要把操作SD卡的程序填充在这个框架里面。
基于STM32的FATFS文件系统移植
基于STM32的FATFS文件系统移植经过将近1个月的时间,终于完成了STM32是FATFS文件系统移植,说来是够艰辛的,SDIO章节是我学习cortex m3以来消耗时间最多的章节。
这里说一些个人对于SDIO的看法,其实SDIO属于意法半导体公司在cortex m3内核之外(在芯片之内)添加的功能外设,完全属于意法的杰作了。
关于SD卡的读写,分为SPI模式和SD模式(专用模式),这两种模式都必须遵循SD2.0协议。
SPI模式控制方法相对较为简单,操作简洁,但失去了速度;SD模式控制方法相对较为复杂一点,操作繁琐,但具有高速的特点。
FATFS文件系统是一种兼容性比较高的文件管理系统,兼容FAT32、FAT16。
关于文件系统的细节,如果认真研究的话,应该会觉得作者的伟大,惊叹代码的绝妙。
我们要想移植FATFS,首先要做的是编写基于SDIO模式的SD卡底层驱动,这部份完整的驱动代码较多,大概有2000多行,但我们首先需要克服心理作用,再长的代码只要理解之后,都很简单。
意法在参考手册中介绍SDIO时,上下文比较乱,其中还夹杂讲解了一些SD2.0协议,使得初学者云里雾里。
因为SDIO是属于一种完全的外设接口,所以在讲解的过程中必须与实际的外设SD卡联系起来。
STM32的SDIO接口兼容性很高,可以兼容SD1.0卡、2.0卡、MMC 卡、多媒体卡等,与多媒体卡4.2支持三种不同的数据总线模式:1位、4位和8位,在8位的模式下速度可以达到48MHZ,但在SD2.0协议中只支持两种总数总线模式:1位和4位,在SDIO中存在两种状态机:命令状态机(CPSM)和数据状态机(DPSM),两者的使能信号独立,用于控制外部双向驱动器,命令是通过CMD命令线单线串行发送的,而数据是由于DATx数据线传输(1位或4位),每当CPSM发送一条命令给卡时,如工作正常的话,卡都会有与CPSM中设置响应格式相对应的响应内容(短响应与长响应),两者的细节在下面讲到。
基于STM32单片机的uCOS-II操作系统移植
第6期2020年12月机电元件ELECTROMECHANICALCOMPONENTSVol 40No 6Dec 2020收稿日期:2020-10-20基于STM32单片机的uC/OS-II操作系统移植张中前(贵州航天电器股份有限公司,贵州贵阳,550009) 摘要:网络技术和信息技术的发展,嵌入式系统应用越来越普及,嵌入式设备的应用也越来越多。
uC/OS-II广泛应用于路由器、飞行器及工业控制等。
uC/OS-II操作系统执行效率高,占用存储空间少,具有实时性及可扩展性等优点,在小型嵌入式设备中具有广泛应用。
本文介绍了基于ARMCORTEXM3系列单片机上的uC/OS-II移植,对电子控制组件的设计具有参考作用。
关键词:实时操作系统;uC/OS-II;内存管理;任务管理;STM32;移植Doi:10.3969/j.issn.1000-6133.2020.06.015中图分类号:TN784 文献标识码:A 文章编号:1000-6133(2020)06-0057-051 引言操作系统是裸机的第一层软件,操作系统直接运行在硬件上,上层软件通过提供应用程序接口(API函数),实现对底层硬件的访问,同时,通过操作系统实现对多个上层应用软件(任务)管理,实现对硬件CPU管理、存储管理、I/O接口管理及文件管理,如图1所示。
图1 操作系统功能组成示意图 STM32系列单片机以其优良的价格,大容量的FLASH及RAM存储空间,极易用于较为复杂的控制系统;在STM32单片机上进行uC/OS-II实时操作系统的移植,提高了产品的设计灵活性,实现较为复杂的系统功能;通过将开源的uC/OS-II移植在STM32单片机上,以其较为低廉的硬件成本获得较高的使用性能,具有良好的应用前景。
2 uC/OS-II操作系统2.1 uC/OS-II操作系统的基本特征uC/OS-II是一个完整的、可移植、可固化、可剪裁的基于优先级调度的抢占式实时多任务操作系统;它能够在外界事件或数据产生时,能够接收图2 uC/OS-II文件结构示意图并以足够快的速度响应,其处理的结果又能够在规定的时间内输出,并控制所有实时任务协调、一致运行。
STM32F103开发板移植uCOS-II教程
盘古 STM32 开发板移植 uCOS-II 详细说明
文件,具体如下: ¾ 将 Project Targets 中的 Target1 重命名为 UE-uCOS-II-Port ¾ 新建组 STM32F10x_StdPeriph_Driver,并将 uCOS-II-Port\Library\STM32_Lib\src 下的所
为了实现资源共享,一个操作系统必须提供临界段擦作的功能。
合嵌电子科技有限公司 uCOS-II 为了处理临界段代码需要关中断,处理完毕后再开中断。这使得 uCOS-II 能够避免同时 有其它任务或中断服务进入临界段代码。 微处理器一般都有关中断/开中断指令,用户使用的 C 语言编译器必须有某种机制能够在 C 中直
盘古 STM32 开发板移植 uCOS-II 详细说明
/*任务切换的函数*/
void OSCtxSw(void);
//用户任务切换
void OSIntCtxSw(void);
//中断任务切换函数
void OSStartHighRdy(void);
//在操作系统第一次启动的时候调用的任务切换
void OS_CPU_PendSVHandler(void); //用户中断处理函数
将其下的 inc 和 src 拷贝至 uCOS-II-Port\Library\STM32_Lib z 打开 STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\CMSIS\CM3
其下有 CoreSupport 和 DeviceSupport 两个文件夹 ¾ 分别将 CoreSupport 下的 core_cm3.c 和 core_cm3.h
OS_CPU_SR OS_CPU_SR_Save(void);
STM32移植uCOS-II
32
2. 安装 MDK,解压外设库和 uCOS-II 源码 3. 创建工程目录结构,如下
4. 复制外设库 � STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\CMSIS\CM3\CoreSupport 下
128
#endif � 打开 os_cfg.h,将 OS_APP_HOOKS_EN 设置为 0 � 打开 main.c,全选删除,并将以下内容复制进去,具体板级代码需要适
当修改
#include "ucos_ii.h" #include "stm32f10x.h"
#define LED_0 0 #define LED_1 1 #define LED_2 2 #define LED_3 3
case LED_3: GPIO_SetBits(GPIOD, GPIO_Pin_7); break;
default: break;
}
}
void led_off(uint32_t n) {
switch (n) {
case LED_0: GPIO_ResetBits(GPIOD, GPIO_Pin_2); break;
所有文件到新建的 Ports 目录下 � Micrium\Software\uCOS-II\Source 下的所有文件到新建的 Source 下 � Micrium\Software\EvalBoards\ST\STM3210B-EVAL\RVMDK\OS-Probe 下
的 app_cfg.h 和 os_cfg.h 到工程目录的 User 中 6. 打开 Keil,创建新工程,选择器件,注意弹出来的是否添加启动文件的询问
在STM32中移植FreeRTOS(纯净版)
因为我们使用 startup 文件夹下的启动代码。 下面使用图片说明:
及 ..\FreeRTOSV7.2.0\FreeRTOS\Source\portable\MemMang 下 heap_2.c 到 自 建 的
E:\STM32\PROJ\FreeRTOS\src 下。
3、 复 制
..\FreeRTOSV7.2.0\FreeRTOS\Source\include 下 所 有 .h 文 件
a._htmresc:ST 的 LOGO,对开发无用; b.Libraries:关键文件夹,也就是 STM32 的库文件,包含外设驱动源文件和头文件; c.Project:包含外设例程和工程模板,本文不用; d.Utilities:评估版文件夹,本文不用; e.Release_Notes.html:固件库版本发布说明,不用理会; f.stm32f10x_stdperiph_lib_um.chm:类似 MSDN,开发中经常会查看,本文
跳转到 080 行,将 DCD SysTick_Handler 修改为 DCD xPortSysTickHandler 6、 在 main.c 文件头部#include 一下头文件: FreeRTOS.h、task.h、queue.h
至此,FreeRTOS 在 STM32 上的移植完毕。在 main 中创建任务后启动任务调度器就可 以运行了。
文件夹分别命名为 inc 和 src。复制 ..\FreeRTOSV7.2.0\FreeRTOS\Source 下 croutine.c、
STM32移植到GD32(以32的工程为模板简单三步完成移植)
STM32移植到GD32(以32的工程为模板简单三步完成移植)移植STM32工程到GD32平台是一项相对简单的任务,因为两者的硬件架构和内核类似。
在进行移植时,我们只需要对一些寄存器和外设的名称进行适当的更改即可完成移植。
以下是一个简单的三步骤指南,来帮助您完成STM32工程到GD32平台的移植。
第一步:更改寄存器和外设名称在STM32工程中,我们需要对寄存器和外设的名称进行更改,以适应GD32平台。
GD32平台使用了类似的寄存器和外设,但它们的名称可能有所不同。
您需要查阅GD32的参考手册,找到对应的寄存器和外设名称,并在STM32代码中进行相应的更改。
例如,在STM32中,GPIO外设的寄存器名称可能为GPIOA、GPIOB等,但在GD32中,GPIO外设的寄存器名称可能为GPIO0、GPIO1等。
您需要查找GD32的参考手册,找到正确的寄存器名称,并将其替换为相应的STM32代码中的寄存器名称。
第二步:调整时钟和中断配置在STM32和GD32平台上,时钟和中断配置可能略有不同。
在进行移植时,您需要检查和调整代码中的时钟和中断配置,以适应GD32平台的要求。
例如,在STM32中,我们可能使用RCC_PLLConfig函数来配置PLL,但在GD32中,我们可能需要使用零延迟锁相环(ZZPLL)来配置PLL。
您需要查找GD32的参考手册,找到正确的时钟配置函数,并将其替换为相应的STM32代码中的时钟配置函数。
同样地,在移植中,您还需要检查和调整代码中的中断配置,以确保它们与GD32平台兼容。
第三步:验证和调试完成以上两个步骤后,您可以编译和烧录移植后的代码到GD32开发板上进行验证和调试。
您可能需要对一些功能进行逐个测试,以确保它们在GD32平台上正常工作。
在调试过程中,您可能会遇到一些问题和错误。
这是正常现象,您需要逐一解决这些问题,直到移植后的代码在GD32平台上完全正常运行。
总结这是一个简单的三步指南,帮助您将STM32工程移植到GD32平台。
stm32能跑linux吗
stm32能跑linux吗Linux是一套免费使用和自由传播的类Unix操作系统,是一个基于POSIX和UNIX的多用户、多任务、支持多线程和多CPU的操作系统。
它能运行主要的UNIX工具软件、应用程序和网络协议。
它支持32位和64位硬件。
Linux继承了Unix以网络为核心的设计思想,是一个性能稳定的多用户网络操作系统。
Linux操作系统诞生于1991 年10 月5 日(这是第一次正式向外公布时间)。
Linux存在着许多不同的Linux版本,但它们都使用了Linux内核。
Linux可安装在各种计算机硬件设备中,比如手机、平板电脑、路由器、视频游戏控制台、台式计算机、大型机和超级计算机。
严格来讲,Linux这个词本身只表示Linux内核,但实际上人们已经习惯了用Linux来形容整个基于Linux内核,并且使用GNU工程各种工具和数据库的操作系统。
操作系统有两种:用MMU的和不用MMU的。
用MMU的是Windows、MacOS 、Linux、Android,不用MMU的是FreeRTOS VxWorks ucOS。
CPU有两种:带MMU的和不带MMU 的,带MMU的有Cortex-A系列ARM9、ARM11系列,不带MMU的有Cortex-M系列。
STM32是M系列,属于低成本设计,不带MMU控制器,不可能运行Linuxuc,Clinux 不算Linux的。
因此基于STM平台且满足实时控制要求操作系统,只有以下5种可供移植选择。
分别为Clinux、C/OS-II、eCos、FreeRTOS和rt-thread。
看到这可能会有网友好奇为什么Clinux不属于Linux吗?下面我来简单说明一下两者之间的区别:在对硬件的支持上,由于Clinux继承了Linux的大部分性能,所以至少需要512KB的RAM 空间,lMB的ROM/Flash空间。
在Clinux的移植方面,Clinux是Linux针对嵌入式系统的一种改良,其结构比较复杂。
RT—Thread操作系统在STM32中移植的研究
RT—Thread操作系统在STM32中移植的研究作者:朱志国来源:《计算机光盘软件与应用》2012年第22期摘要:介绍了RT-Thread操作系统在STM32F107VC上的移植,简要说明了具体的移植过程和使用的方法,并分析了RT-Thread操作系统内核代码的各个功能,给出了移植环境的如何搭建,及编写应用程序如何修改代码的方法。
最后通过一个实例成功实现RT-Thread在STM32F107VC上的移植,证明了移植是可行的。
关键词:RT-Thread;STM32;嵌入式操作系统;Keil中图分类号:TP311.52 文献标识码:A 文章编号:1007-9599 (2012) 22-0000-02RT-Thread属于第二代微内核操作系统,最突出的优势就是其支持处理器平台广泛,最低要求8k ROM,4k RAM空间就可以了。
STM32是基于Cortex-M3内核的处理器,也是一款性能优越的32位单片机,在工业控制方面的应用大有取代传统16位单片机之势。
1 RT-Thread操作系统介绍RT-Thread主要优点是:实时、小型、可裁剪。
它不仅仅是一个实时内核,也是一个功能丰富的软件平台,可以搭建POSIX环境,运行独立的应用程序,这是传统的实时操作系统所不具备的。
RT-Thread具有32~256可选优先级抢占式调度,线程度不限,相同优先级线程时间片轮转调度,支持动态创建、销毁线程,任务等待可按优先级进行排队。
RT-Thread内核大致可分为对象管理、实时调度器、线程管理、线程间通信、时钟管理、设备驱动6个部分。
(1)对象管理(object.c):定义了对象容器的种类,包括线程、信号量、互斥量、事件、邮箱、消息队列、内存池、设备、定时器、组件。
此部分主要完成各模块的创建,系统对象的初始化。
(2)实时调度器(schedule.c):定义了优先级。
该部分完成优先级的创建及调度算法的定义,对线程的初始化、创建、插入、移动进行了描述。
ucosii在STM32上的移植详解
ucosii在stm32上的移植详解虽然目前网上已经有不少关于ucosii在stm32上的移植版本,包括micrium也有官方移植版本。
但这些版本具体是怎么移植出来的,又该怎么基于移植好的ucosii 开发应用软件,网上介绍的并不多。
这里介绍一下我的移植经历,希望对大家有所帮助。
我的移植基本上是从零开始的。
首先想要做好移植,有两方面的内容是必须要了解。
1.目标芯片;2.ucosii内核原理。
虽然我们移植的目标芯片是stm32,但操作系统的移植基本是针对Cortex-M3内核(以下简称CM3)而言的,所以我们只需了解CM3内核就好了。
stm32芯片就是CM3内核加上各种各样的外设。
怎么才能了解CM3呢?看一本书<<ARM Cortex-M3权威指南>>(宋岩译,网上多的很)就好了,很多同学可能想,看完这本书移植的新鲜劲都没了,因此我把该书和移植有关的章节都列了出来,并对其中的重点内容进行介绍,我数了数相关章节还不到100页,就这点内容,总要看了吧。
相关章节如下:chapter2 Cortex-M3概览2.1 - 2.9主要了解Cortex-M3的概貌。
刚开始看时不用追求全部理解,后面会有详细介绍,很多内容多看几遍就明白。
其中2.8 指令集,只要了解,CM3只使用thumb2就ok了。
chapter3 Cortex-M3基础3.1 寄存器组R0-R12: 通用寄存器R13: 堆栈寄存器有两个,MSP和PSP,同时只能看见一个引用R13时,引用的是正在使用的那个MSP:可用于异常服务和应用程序PSP:只能用于应用程序系统复位后,用的堆栈指针是MSP。
R14: 连接寄存器,又名LR,存储返回地址R15: 程序计数寄存器,又名PC3.2 特殊功能寄存器程序状态字寄存器组(PSRs)中断屏蔽寄存器组(PRIMASK, FAULTMASK, BASEPRI)控制寄存器(CONTROL)程序状态字寄存器组(PSRs)分为应用程序 PSR(APSR)中断号 PSR(IPSR)执行 PSR(EPSR)每个都是32位,由于这3个寄存器有效位是错开的,因此可以组合访问。
stm32,arm9和arm11三者的区别
stm32,arm9 和arm11 三者的区别
STM32 外设丰富,没有mmu,可以上ucos 等小型系统。
arm9 外设不够丰富,有mmu,可以上linux。
如果想上安卓,至少arm11 以上才比较合适。
arm7 是arm 公司推出的以V4 指令集设计出来的arm 核,基于arm7 可以生产出很多CPU 芯片,其代表的芯片有s3c44b0 等;
arm9 是arm 公司推出的以V5 指令集设计出来的arm 核,基于arm9 其它公司推出了自己的CPU 芯片,如三星推出了S3C2440。
还有TI 啊,ATMEL 啊,高通啊都基于arm9 推出了自己的CPU 芯片。
STM32 是就是基于Cortex-M3 这个核生产的CPU。
stm32 是cm3 构架的,是arm 取代arm7 的。
主要还是前后台编程,也可以挂μcos 系统。
在学习arm9 之前接触stm32 会有些帮助,但不是特别多。
arm9 主要是挂系统能力强一些,而且和以前的编程习惯完全不一样
ARM9、ARM11 是哈佛结构,所以性能要高一点。
ARM9 和ARM11。
试论STM32RBT6芯片中的RTX操作系统
试论STM32RBT6芯片中的RTX操作系统RL?鄄RTX操作系统是MDK官方内置的一个实时操作系统。
其内核是一个基于时间片轮转的实时操作系统,可以同时运行多函数或是任务。
在嵌入式系统中嵌入实时操作系统是现在硬件开发的趋势,对比前后台循环方案与状态机方案其优点在于既增加了程序的可读性,同时又提高了系统运行的效率。
1.RL-RTX操作系统介绍RL?鄄RTX操作系统可以自由地调度系统资源,比如CPU和内存,并且提供一种任务间通信机制。
RTX内核是一个强大的实时操作系统,可以很容易地使用和运行基于ARM7?鄄TDMI、ARM9 或是Cortex?鄄M3 CPU 内核的微控制器。
RTX程序使用标准的C结构编写,运用RealViewR 编译器进行编译。
在RTX.H头文件定义了RTX函数以及宏,可以让轻松地声明任务并达到实时操作系统所有特性。
RL?鄄RTX操作系统内核大致可分为任务管理、任务调度器、阻塞管理,任务间通讯管理,定时器管理,设备底层驱动6个部分。
2.STM32F103RBT6芯片介绍STM32系列处理器是为高性能、低成本、低功耗的嵌入式应用专门设计的ARM Cortex?鄄M3内核芯片。
本文应用的STM32F103RBT6芯片为64脚LQFP64封装。
其工作频率可高达72MHZ,具有128KB flash,20KB SRAM 1个CAN总线,1个USB2.0接口,2个SPI,2个I2C接口,资源较为丰富。
3.RL?鄄RTX操作系统在STM32F103RBT6芯片上的移植本次操作系统移植是基于RL?鄄RTX 4.05版进行的。
移植操作系统使用软件编译环境为Keil MDK 4.12版。
下面对移植过程做详细介绍。
1)安装MDK软件从官网下载Keil MDK 4.12版并注册安装。
2)下载STM32固件库工程在ST官网下载STM32F10x_StdPeriph_Lib_V3.5.0,使用其中工程作为工程模版。
STM32系列MCU不同型号的移植步骤解析
STM32系列MCU不同型号的移植步骤解析移植STM32系列MCU的步骤可以分为以下几个方面:硬件准备、开发环境配置、移植BSP(板级支持包)、移植外设驱动、移植应用程序和调试验证。
一、硬件准备1.选择目标STM32MCU型号,并且获取相应的芯片手册和参考资料。
2.根据芯片手册,了解芯片的引脚定义、功能分配、时钟源和复位方式等。
3.准备开发板,确保与目标MCU兼容,并且可以通过JTAG/SWD等工具进行调试。
二、开发环境配置1. 安装相应版本的开发工具,例如 STM32CubeIDE、Keil MDK 或者IAR等。
2.根据MCU型号,选择相应的启动文件、链接脚本和编译器等配置参数。
3. 配置调试工具,如 ST-LINK、J-Link 或者 BlackMagicProbe等。
三、移植BSP(板级支持包)1.了解目标开发板的硬件资源,包括GPIO、串口、定时器等外设的定义和使用方式。
2.根据目标MCU和开发板的硬件资源,编写对应的BSP配置文件,包括复位、时钟初始化、外设配置等。
3.配置并编译BSP驱动程序,确保能够正确初始化和控制硬件资源。
四、移植外设驱动1. 根据需要,选择对应的外设驱动库,例如 STM32Cube HAL 或者自行编写驱动程序。
2.根据目标MCU的硬件资源和外设的技术要求,编写对应的外设驱动程序。
3.配置并编译外设驱动程序,确保能够正确初始化和控制外设。
五、移植应用程序1.根据具体应用需求,编写应用程序的主代码,包括初始化、逻辑处理和外设控制等。
2.根据硬件资源和外设驱动的要求,调用BSP和外设驱动函数来初始化和控制相关的硬件资源和外设。
3.配置并编译应用程序代码,生成可执行文件。
六、调试验证2.使用调试工具来烧录应用程序代码到目标MCU,并且启动调试模式。
3.通过调试工具,观察应用程序的执行情况、外设的状态和数据传输等,进行验证和调试。
在移植的过程中,需要仔细阅读芯片手册、参考资料和开发工具的文档,根据具体情况做出相应的配置和调整。
stm32 UCGUI 完美移植
1/6/stm32-ucgui.html About Links Invite RssHome / Archive Trip Share E-Factory Findpark Quickweibo Mr.YongLan here is siri ..五十将相寻死路,生不认魂,死不认尸。
UCGUI是一种嵌入式应用中的图形支持系统。
它设计用于为任何使用LCD图形显示的应用提供高效的独立于处理器及LCD控制器的图形用户接口,它适用单任务或是多任务系统环境, 并适用于任意LCD控制器和CPU下任何尺寸的真实显示或虚拟显示。
它的设计架构是模块化的,由不同的模块中的不同层组成,由一个LCD驱动层来包含所有对LCD的具体图形操作。
UCGUI可以在任何的CPU上运行,因为它是100%的标准C代码编写的。
类似程序还有国产的一个MINIGUI (/zhcn/),MiniGUI 是一个自由软件项目。
其目标是提供一个快速、稳定、跨操作系统的图形用户界面(GUI)支持系统,尤其是基于 Linux/uClinux、eCos 以及其他传统 RTOS(如 VxWorks、ThreadX、uC/OS-II、Nucle us 等)的实时嵌入式操作系统。
有机会尝试下,支持下国产,毕竟国内这样的公司不多。
这里移植的UCGUI3.90a版本,虽然已经有更新的版本,比如UCGUI3.98、甚至4.04版本。
但是目前来说只有这个版本的代码是最全的,包括了J PEG , MULTILAYER , MEMDEV ,AntiAlias等模块。
一直想尝试做一个数码相册,JEPG模块自然少不了,所以移植了这个版本。
UCGUI390a 下载整个移植过程,让LCD显示图案倒是没花多少时间,资料也比较多,但是在移植触摸屏的时候卡了好几天,然后又是 UCGUI 指针图标 移动有重影(LCD读取像素颜色函数有问题)。
总之移植是个累人的活首先需要保证你的LCD驱动和触摸屏驱动是有效的,如果你的LCD也是ili93xx 控制器 XPT2046控制器的触摸屏可以参考 stm32 驱动 TFT LCD stm32 驱动 触摸屏 两篇文章UCGUI的文件数量很大,主要用到UCGUI390a/Start/Config 和 UCGUI390a/Start/GUI两个文件夹下文件,不过文件数量也已经很多了 。
FreeRTOS 在 STM32 的移植
3.定义用户主动引起内核调度的 2 个函数 强制上下文切换,用在任务环境中调用 #define portYIELD() vPortYieldFromISR()
强制上下文切换,用在中断处理环境中调用 #define portEND_SWITCHING_ISR( xSwitchRequired ) 4.定义临界区的管理函数 中断允许和关闭 #define portDISABLE_INTERRUPTS() #define portENABLE_INTERRUPTS() 临界区进入和退出 #define portENTER_CRITICAL() #define portEXIT_CRITICAL() 用于在中断环境的中断允许和关闭 #define portSET_INTERRUPT_MASK_FROM_ISR() 0;vPortSetInterruptMask() vPortEnterCritical() vPortExitCritical() vPortSetInterruptMask() vPortClearInterruptMask() if( xSwitchRequired ) vPortYieldFromISR()
恢复新任务 的上下文
• 通过pxCurrentTCB->pxTopOfStack恢复新任务的栈顶指针 • 恢复R4-R11并更新进程堆栈指针PSP
2. 中断允许和关闭的实现,通过 BASEPRI 屏蔽相应优先级的中断源 vPortSetInterruptMask: push { r0 } mov R0, #configMAX_SYSCALL_INTERRUPT_PRIORITY msr BASEPRI, R0 pop { R公司
vPortStartFirstTask
• 设置中断优先级 • 配置心跳时钟
RTX操作系统在STM32RBT6芯片中的移植与应用
2015年12月中旬刊RTX操作系统在STM32RBT6芯片中的移植与应用徐自远(无锡机电高等职业技术学校江苏无锡214028)【摘要】本文介绍了MDK软件自带的基于时间轮转的RTX操作系统在STM32F103RB芯片上的移植方法,并详细描述了具体的移植过程和使用方法。
并用一个LED轮换闪烁的实例演示了其具体应用方法并对其操作系统函数库做了简单介绍。
最后通过与其他同类操作系统的横向比较,分析了其优缺点及应用范围。
【关键词】RT⁃RTX STM32嵌入式操作系统MDK Cotex⁃M3ARM【中图分类号】G64【文献标识码】A【文章编号】2095-3089(2015)12-0248-02RL⁃RTX操作系统是MDK官方内置的一个实时操作系统。
其内核是一个基于时间片轮转的实时操作系统,可以同时运行多函数或是任务。
在嵌入式系统中嵌入实时操作系统是现在硬件开发的趋势,对比前后台循环方案与状态机方案其优点在于既增加了程序的可读性,同时又提高了系统运行的效率。
1.RL-RTX操作系统介绍RL⁃RTX操作系统可以自由地调度系统资源,比如CPU和内存,并且提供一种任务间通信机制。
RTX内核是一个强大的实时操作系统,可以很容易地使用和运行基于ARM7⁃TDMI、ARM9或是Cortex⁃M3CPU内核的微控制器。
RTX程序使用标准的C结构编写,运用RealView R编译器进行编译。
在RTX.H头文件定义了RTX函数以及宏,可以让轻松地声明任务并达到实时操作系统所有特性。
RL⁃RTX操作系统内核大致可分为任务管理、任务调度器、阻塞管理,任务间通讯管理,定时器管理,设备底层驱动6个部分。
2.STM32F103RBT6芯片介绍STM32系列处理器是为高性能、低成本、低功耗的嵌入式应用专门设计的ARM Cortex⁃M3内核芯片。
本文应用的STM32F103RBT6芯片为64脚LQFP64封装。
其工作频率可高达72MHZ,具有128KB flash,20KB SRAM1个CAN总线,1个USB2.0接口,2个SPI,2个I2C接口,资源较为丰富。