社区导航

 

搜索
查看: 1544|回复: 9

[讨论] 无操作系统的bare_metal中多个任务在运行一次后会退出,如何再次运行这些任务呢?

[复制链接]

96

TA的帖子

2

TA的资源

一粒金砂(中级)

Rank: 2

发表于 2017-7-3 14:09:57 | 显示全部楼层 |阅读模式
本帖最后由 bjemt 于 2017-7-3 14:18 编辑

NXP提供的BLE wireless_usrt 示例程序分为下图中所示的三个版本:
捕获5.PNG
我对比看了一下:bare_metal和FreeRTOS的代码基本都是一样的,只是差了一个宏的定义:
const uint8_t gUseRtos_c = USE_RTOS;  /* USE_RTOS = 0 for BareMetal and 1 for OS */
对于FreeRTOS分成多个任务好理解,多个伤务之间由操作系统来调度,但是对于bare_metal版本为什么也分成主应用任务:主任务,定时器作务,串口管理任务,系统空闲任务?如下所示是4个任务的处理函数:

void App_Thread (uint32_t param)
void TMR_Task
void SerialManagerTask(osaTaskParam_t argument)
static void App_Idle_Task(osaTaskParam_t argument)


在上面四个任务的最后都有下面一段代码:
        /* For BareMetal break the while(1) after 1 run */
        if (gUseRtos_c == 0)
        {
            break;
        }        

对于无操作系统的bare_metal中每个任务在运行一次后会退出(在FreeRTOS会因为没有中断while(1)而无限循环执行),而程序正常运行是需要周期性的运行这些任务,对于无操作系统的程序是如何再次运行这些任务的呢?

如果我需要增加ADC和DMA处理任务,应该如何把自己定义的任务加入主程序的循环中?




回复

使用道具 举报

1424

TA的帖子

1

TA的资源

纯净的硅(中级)

Rank: 5Rank: 5

发表于 2017-7-9 15:23:35 | 显示全部楼层
前面说的文档中也有说明,中断如何添加:
Connectivity Framework Reference Manual.pdf - WPS 文字.jpg

点评

发只贴科普一下。  详情 回复 发表于 2017-7-9 23:15
HELLO_WATER


回复

使用道具 举报

1424

TA的帖子

1

TA的资源

纯净的硅(中级)

Rank: 5Rank: 5

发表于 2017-7-9 15:19:06 | 显示全部楼层
bm 部分的内容建议你看一下docs/common/Connectivity Framework Reference Manual.pdf 这个文档,nxp定义了一个osa 层,在源码framework/OSAbstraction/fsl_os_abstraction_bm.c 这个文件里有调度源码、任务管理的源码,按理说这个这个调度比rtos的更好理解,rtos是通过中断然后跳离当前任务,而bm则是所有任务外面一个大while循环
MCUXpresso - Develop - frdmkw41z_wireless_examples_bluetooth_beacon_bmframeworkO.jpg

所有任务按优先级排列放在一个链表里,从最前面开始执行,执行的标志为haveToRun, 如果设置等待事件,则这个标志为false,自动跳出循环,执行后面的任务,但有事件需要处理的时候,这个标志为true,在下一个调度轮回中处理。

点评

谢谢您的回复,我找到了Connectivity Framework Reference Manual.pdf,之前没有看到这个文档。  详情 回复 发表于 2017-7-16 17:33
发只贴科普一下  详情 回复 发表于 2017-7-9 23:16
HELLO_WATER


回复

使用道具 举报

96

TA的帖子

2

TA的资源

一粒金砂(中级)

Rank: 2

 楼主| 发表于 2017-7-3 16:13:43 | 显示全部楼层
我理解的bare_meta就是裸机,系统不包括任何底层的控制代码,只有一个优先级较低的主任务进程,各种中断可以触发中断服务进程。
但是也有人说bare_meta并不是没有操作系统,是没有开放给用户的rtos,也是有OS的。
那使用KDS V3开发的KW41Z项目,如果使用的是bare_meta,生成的代码到底有没有OS?


回复

使用道具 举报

103

TA的帖子

0

TA的资源

一粒金砂(中级)

Rank: 2

发表于 2017-7-5 23:35:20 | 显示全部楼层
定义个软中断, 然后用定时器触发或者main loop里触发。


回复

使用道具 举报

1519

TA的帖子

1

TA的资源

纯净的硅(高级)

Rank: 6Rank: 6

发表于 2017-7-9 23:15:46 来自手机 | 显示全部楼层
shinykongcn 发表于 2017-7-9 15:23
前面说的文档中也有说明,中断如何添加:

发只贴科普一下。


回复

使用道具 举报

1519

TA的帖子

1

TA的资源

纯净的硅(高级)

Rank: 6Rank: 6

发表于 2017-7-9 23:16:10 来自手机 | 显示全部楼层
shinykongcn 发表于 2017-7-9 15:19
bm 部分的内容建议你看一下docs/common/Connectivity Framework Reference Manual.pdf 这个文档,nxp定义了 ...

发只贴科普一下

点评

不玩bm,只针对性的看了一下,没仔细研究。。。。  详情 回复 发表于 2017-7-10 09:05


回复

使用道具 举报

1424

TA的帖子

1

TA的资源

纯净的硅(中级)

Rank: 5Rank: 5

发表于 2017-7-10 09:05:51 | 显示全部楼层

不玩bm,只针对性的看了一下,没仔细研究。。。。
HELLO_WATER


回复

使用道具 举报

96

TA的帖子

2

TA的资源

一粒金砂(中级)

Rank: 2

 楼主| 发表于 2017-7-16 17:33:02 | 显示全部楼层
shinykongcn 发表于 2017-7-9 15:19
bm 部分的内容建议你看一下docs/common/Connectivity Framework Reference Manual.pdf 这个文档,nxp定义了 ...

谢谢您的回复,我找到了Connectivity Framework Reference Manual.pdf,之前没有看到这个文档。

点评

不用客气,玩的开心就好  详情 回复 发表于 2017-7-16 18:11


回复

使用道具 举报

1424

TA的帖子

1

TA的资源

纯净的硅(中级)

Rank: 5Rank: 5

发表于 2017-7-16 18:11:14 | 显示全部楼层
bjemt 发表于 2017-7-16 17:33
谢谢您的回复,我找到了Connectivity Framework Reference Manual.pdf,之前没有看到这个文档。

不用客气,玩的开心就好
HELLO_WATER


回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

  • 论坛活动 E手掌握

    扫码关注
    EEWORLD 官方微信

  • EE福利  唾手可得

    扫码关注
    EE福利 唾手可得

Archiver|手机版|小黑屋|电子工程世界 ( 京ICP证 060456 )

GMT+8, 2019-1-23 07:49 , Processed in 0.279768 second(s), 18 queries , Gzip On, MemCache On.

快速回复 返回顶部 返回列表