0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

FreeRTOS_003 _让系统在板子上跑起来

黄工的嵌入式技术圈 来源:黄工的嵌入式技术圈 2020-03-14 11:25 次阅读

写在前面

为满足大家的好奇心,本文将讲述几个步骤可以让FreeRTOS系统直接在芯片上运行,源代码里面的许多细节将在下一篇文章呈现。最后提供可以直接运行的Demo工程给大家,方便大家直接拿来修改测试。

为什么不先讲述源代码?

相信很多朋友开始学习的时候都是参看别人写好的,可以直接使用的源代码。在正确代码工程的基础上,我们可以展开很多测试,从而可以知道为什么这样才可以运行。

整个FreeRTOS工程源代码里面的内容牵涉到许多东西,而只需要简单几个步骤就能将代码运行起来,看到效果。如果我一一给你们讲述源代码,估计没怎么讲述几条,大家都晕了,不知道为什么这个地方是这样。

所以,给你看写好源代码工程,让你们自己测试,并分析才是最好的。

移植几个步骤

源代码里面的内容有很少变动,本篇文章不具体讲述,只讲述移植的几个步骤,最终让代码工程可以运行在板子上。只需要如下简单几步即可:

1.提取源码添加到工程

上一篇文章讲述了下载FreeRTOS源码中各个目录及文件的意思,也大概讲述了一下需要提取源码。

主要提取:Source目录+FreeRTOSConfig.h

(里面有部分内容未使用,为了不让大家感觉文件比较多,或者杂,我删除了)

将这些源码添加到自己的工程(之前讲述并建立好的STM32工程),具体提取的源码和添加到工程中的效果,请下载代码查看。

2.添加路径

我们添加源码到工程,有部分头文件include需要添加到工程。因此,我们需要添加相应路径。

.c源代码添加路径的方法见文章:

1.MDK-ARM_新建软件工程详细过程

2.EWARM_新建软件工程详细过程

这里主要想提醒的是:在IAR工程中有个汇编文件portasm.s包含了,需要我们添加所在文件下的路径。

注意:是在EWARM的Project -> Options -> Assembler -> Preprocessor中添加。

3.创建自己任务和添加相应代码

我们创建四个任务,还是使用比较经典的LED灯任务。

void AppTaskCreate(void)

{

xTaskCreate(vAppTask1, "Task1", TASK1_STACK_SIZE, NULL, TASK1_PRIORITY, NULL);

xTaskCreate(vAppTask2, "Task2", TASK2_STACK_SIZE, NULL, TASK2_PRIORITY, NULL);

xTaskCreate(vAppTask3, "Task3", TASK3_STACK_SIZE, NULL, TASK3_PRIORITY, NULL);

xTaskCreate(vAppTask4, "Task4", TASK4_STACK_SIZE, NULL, TASK4_PRIORITY, NULL);

}

void vAppTask1(void *pvParameters)

{

for(;;)

{

LED1_TOGGLE;

vTaskDelay(50);

}

}

我新建了app_task.c和app_task.h文件添加任务的源代码。

4.修改FreeRTOSConfig.h配置文件

这个文件是必须配置的,而且根据实际情况而定。我们系统的裁剪也与该文件有关,类似于UCOS中的os_cfg.h文件。

比如:主频、系统滴答、系统堆栈大小等。

#define configCPU_CLOCK_HZ ((unsigned long)72000000)

#define configTICK_RATE_HZ ((TickType_t)100)

#define configTOTAL_HEAP_SIZE ((size_t)(4 * 1024))

本文不讲述具体内容。后期详细分析FreeRTOSConfig.h中的每一个参数

至此,基本的步骤算是完成了。

代码下载

目前只提供了STM32F0、F1和F4的Demo工程,后期更新。

【提示:微信公众号不支持外链接】

FreeRTOS_STM32F0_Demo下载地址:

http://pan.baidu.com/s/1qYbmfy0

FreeRTOS_STM32F1_Demo下载地址:

http://pan.baidu.com/s/1jHDHRPc

FreeRTOS_STM32F4_Demo下载地址:

http://pan.baidu.com/s/1bplLZ7x

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 目录
    +关注

    关注

    3

    文章

    13

    浏览量

    8177
  • 源代码
    +关注

    关注

    95

    文章

    2929

    浏览量

    66064
  • FreeRTOS
    +关注

    关注

    12

    文章

    473

    浏览量

    61351
  • Source
    +关注

    关注

    0

    文章

    17

    浏览量

    9722
收藏 人收藏

    评论

    相关推荐

    用STVP将STVD生成的.hex文件直接下载到板子板子就不能跑,请问是什么原因?

    STVD仿真下载程序,程序下进去,板子可以跑起来,可是我用STVP将STVD生成的.hex文件直接下载到板子
    发表于 04-28 08:23

    MotorControl Workbench生成的代码是开环的吗,为什么电机跑起来很容易受到外力导致停机?

    请问各位高手 MotorControl Workbench 生成的代码是开环的吗?为什么我的电机跑起来很容易受到外力导致停机,我想它不停机,请问有什么好的办法吗 ?
    发表于 03-21 07:12

    CYPD5125 TYPE-C作为Consumer的时候,CYPD5125里的程序为什么没有跑起来

    CYPD5125 TYPE-C作为Consumer的时候,外接设备是有5V输出的,当TYPE-C作为Provider的时候,此时VBUS为5V,VDDD也有3.3V左右,CYPD5125里的程序为什么没有跑起来
    发表于 02-28 08:05

    psoc63能否不开启蓝牙的时候蓝牙不耗电?

    的情况下,功耗大概13mA,M4睡眠,M0唤醒的情况下待机功耗7mA。我M0跑起来的时候我是没有开启蓝牙广播的。 我记得之前用62的时候M0跑起来没有这么大的功耗。 好像也就2~3mA。我现在有个疑问,是不是
    发表于 02-19 07:38

    OpenHarmony北向-更广泛的应用开发者更容易参与

    的IDE,API和SDK。 要么就是对应的这个板块的IDE,API,SDK没有存档;要么就是这板子的版本,可能是前面的人乱写的。 三、怎么样才能跑起来呢 上面这种情况下,必须有固件更新烧录的流程,还得
    发表于 12-06 14:32

    ADSP-BF706生成的ldr文件烧写进flash后,转到SPI MASTER启动代码没有跑起来是为什么?

    生成的ldr文件,烧写进flash后(确认烧进去了),转到SPI MASTER启动,代码没有跑起来。怀疑是init code的问题,使用的是CCES1.1里面自带的BF707的init code,请问BF706的需要改哪些东西?
    发表于 11-29 06:15

    dayu210 编译后运行起不来

    有谁成功编译dayu210 并能在板子跑起来,方便给个编译指导么?
    发表于 09-25 16:28

    NPU跑起来迅为RK3588开发板设置交叉编译器

    NPU跑起来迅为RK3588开发板设置交叉编译器编译器下载地址是网盘资料“iTOP-3588 开发板\\\\02_【iTOP-RK3588 开发板】开发资料 \\\\12_NPU 使用配套资料
    发表于 09-14 09:42

    NPU跑起来iTOP_RK3588开发板Linux系统中使用NPU

    (buildroot 系统运行为例,来讲解如何快速上手运行。整体思路分为三步: 1 虚拟机Ubuntu20.04上交叉编译 demo程序 rknn_yolov5_demo(demo已经默认是rknn
    发表于 09-12 10:05

    MCU调试模式下运行正常,电自启动后运行不正常怎么解决?

    借助于仿真器,电路板keilmdk4环境下程序可以正常运行跑起来,(程序已下载到芯片中)。不断电拿掉仿真器脱离开发环境(keilmdk4),程序依然可以正常运行。但电路板断电后,重新加电后程序不能运行,跑不起来
    发表于 08-18 12:31

    【Milk-V Duo 开发板免费体验】开箱与

    “确定”后开始烧写: 直到烧写完成: 将TF卡插到板子电,稍等几秒钟,板子的蓝色指示灯开始闪烁: 说明
    发表于 08-09 13:38

    把LangChain跑起来的3个方法

    使用 LangChain 开发 LLM 应用时,需要机器进行 GLM 部署,好多同学第一步就被劝退了,
    的头像 发表于 07-05 09:59 880次阅读
    把LangChain<b class='flag-5'>跑起来</b>的3个方法

    你知道你写的代码是怎样跑起来的吗(下)

    今天我们来思考一个简单的问题,一个程序是如何在 Linux 上执行起来的? 我们就拿全宇宙最简单的 Hello World 程序来举例。
    的头像 发表于 05-05 14:36 277次阅读
    你知道你写的代码是怎样<b class='flag-5'>跑起来</b>的吗(下)

    你知道你写的代码是怎样跑起来的吗(上)

    今天我们来思考一个简单的问题,一个程序是如何在 Linux 上执行起来的? 我们就拿全宇宙最简单的 Hello World 程序来举例。
    的头像 发表于 05-05 14:36 322次阅读
    你知道你写的代码是怎样<b class='flag-5'>跑起来</b>的吗(上)

    STM32如何区分程序跑起来用的是HSE还是HSI呢?

    方法去区别HSE和HSI的话,我的问题就来了:烧到030f4并测到晶振有起振的程序(main下死循环),烧到030rb,晶振不起振了,但是通过仿真发现程序还在跑的。所以问一下大家,是怎么确定HSE跑起来了?由于程序会认为改错配置,导致跑HSI,所以问大家怎样区分当前
    发表于 05-05 10:47