173 2438 5004
KEROS加密芯片——品牌直销 | 免费样品 | 技术支持
当前位置:网站首页 > 资讯中心 正文 资讯中心

stm32移植裸机程序到操作系统

keros@mark 2023-03-19 资讯中心

stM32可以跑操作系统吗?

STM32是M系列,属于低成本设计,不带MMU控制器,不可能运行Linuxuc,μClinux不算Linux的。

因此基于STM平台且满足实时控制要求操作系统,只有以下5种可供移植选择。分别为μClinux、μC/OS-II、eCos、FreeRTOS和rt-thread。

操作系统有两种:用MMU的和不用MMU的。

用MMU的是Windows、 MacOS 、Linux、 Android,

不用MMU的是FreeRTOS VxWorks ucOS。

CPU有两种:带MMU的和不带MMU的,

带MMU的有Cortex-A系列ARM9、 ARM11系列,

不带MMU的有Cortex-M系列。

想把stm32f1的代码移植到f4上应该怎么办

换芯片,改电路,底层肯定要重写的。

写程序有个好习惯还是很重要的。下面说一下移植方面的习惯,

提高移植性,最重要的手段就是隐藏硬件实现的细节,把逻辑与底层分开。

举个例子,LED闪一下亮一下,P1_0 = 0; 在51上就是一句话的事。就这一句,就有三个地方涉及硬件,(1)硬件上是P1.0接LED,(2)硬件上低电平亮,相应的是高电平灭,(3)硬件是用的51,用了51独有的位操作。

换个电路,或者换个芯片,这些都要重新改写。假设程序里面有十个地方需要亮灯,移植时就要改十个地方。把亮灯这件事定义成一个函数,或者叫方法,或者叫操作,把具体的操作细节隐藏起来,只表示出做了一件什么事情--亮灯。像这样,void LED_ON( void );在主程序里面,或者说在应用层的程序中调用LED_ON();就是亮灯,具体怎么亮灯,应用程序不管,也不能管,而是由单独的底层程序来做,也就是LED_ON这个函数的内容,是放在单独的一个文件中。用51,就写一个51下的底层,要移植,要用CM3就写一个CM3的底层,主程序可以不用改动,至少是尽量少改动。

为了提高移植性,尽量用标准的C写代码,涉及不同编译系统的实现细节,也要注意隐藏细节,前面的硬件细节,这个算是软件的细节吧。

比如sfr, sbit,interrupt这些,都是51独有的,换到不同的系统上,都需要重写。处理办法也是一样的,隐藏起来,放到单独的底层文件中。

基本上,做到这两步,程序的移植性会提高很多。

再举个小例子吧:

// app.c

#include "bsp.h" // 注意这里不要包含硬件有关的头文件,比如"reg51.h",不要包含在这里。

void main( void )

{

while(1)

{

if ( hasKey())

{

led_on();

delay(100);

led_off();

}

}

// bsp.h

typedef unsigned short uint16_t;

typedef bit bool;

void led_on( void );

void led_off( void );

void delay( uint16_t ms );

bool hasKey( void );

// bsp_for_51.c

#include "bsp.h"

#include "reg51.h"

sbit led = P1^0;

#define ON (0)

void led_on( void )

{

led = ON;

}

void led_off( void )

{

led = !ON;

}

void delay( uint16_t ms )

{

int i;

while( ms-- )

for( i=0; i100; i++);

}

bool hasKey( void )

{

return ( P0 != 0xFF); // 测试是否有按键?

}

这个是51的系统,换成STM32,简单重写一下bsp.c,不需要改app.c,系统就可以移植过来。

stm32程序移植到cortex-m3

stm32程序移植到cortex-m3:

1、点开魔术棒,device中修改芯片型号为stm32f103c8t6。

2、点击编译会提示有一大堆错误和警告点击第一个错误进入到stm32f10x.h头文件中的defineSTM32F10X_HD将这个宏定义全部屏蔽这时在编译则没有问题。

3、烧录的时候丢失CORTEX-M3则点击魔术棒中Utilities中的setting将ADD加入stm32f10xmed-density128K的安装包,之前存在则需要先remove这个包,再重新加入这个包。这样便可以烧录进去。

4、完成移植。

stm32可以移植嵌入式系统吗?

”嵌入式系统“和”操作系统“不是一个概念。如果你说的是操作系统,可以的。一般微控制器用在工业控制领域,需要对外界事件快速做出反应,一般安装的是实时操作系统。常见的有VxWorks(NASA的航天设备用的)uClinux(有些路由器里面的),FreeRTOS,uC/OS等。

stm32可以使用ucosiii吗

(1)先去下载STM32最新固件库3.5版本。

(2)创建一个纯净的裸机工程项目。

(3)uC/OS官网下载STM32的案例程序,找最相近的芯片项目。

(4)将操作系统移植到裸机工程项目中。

(5)修改uC/OS-III移植案例中的代码

本文标签:stm32移植裸机程序到操作系统

产品列表
产品封装
友情链接