OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 13795|回复: 22

STM32在什么情况下有必要用系统?一般应用感觉裸奔够用

[复制链接]

12

主题

29

帖子

0

精华

初级会员

Rank: 2

积分
131
金钱
131
注册时间
2012-1-13
在线时间
29 小时
发表于 2017-8-26 11:55:13 | 显示全部楼层 |阅读模式
1金钱
本帖最后由 newbuff 于 2017-8-26 11:55 编辑

知道如何在STM32 中使用比如RT Thread的系统,最近做个东西,用到3个串口,独立接收不同设备的数据。想着高大上一回,直接用了系统,建了3个任务处理三个串口接收的数据,当然数据是中断里接收的。运行着也没啥问题,但是突然又一想,完全裸奔都可以啊,如下
void main
{
     while(1)
     if(uart1_ok)
     {
         //do work1
     }
     if(uart2_ok)
     {
         //do work2
     }

     if(uart3_ok)
     {
         //do work3
     }

}
可能仅仅是无法区分优先级的劣势了。

到底根据什么需求,选择系统才有优势啊

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

35

主题

181

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1115
金钱
1115
注册时间
2016-8-1
在线时间
235 小时
发表于 2017-8-26 12:02:24 | 显示全部楼层
回复

使用道具 举报

120

主题

7878

帖子

13

精华

资深版主

Rank: 8Rank: 8

积分
12012
金钱
12012
注册时间
2013-9-10
在线时间
427 小时
发表于 2017-8-26 15:02:52 | 显示全部楼层
OS的好处是,没一个功能模块就是一个任务,结构清晰,需要屏蔽功能时,直接删除任务就可以了,互不干扰,呵呵
回复

使用道具 举报

14

主题

76

帖子

0

精华

初级会员

Rank: 2

积分
111
金钱
111
注册时间
2016-7-27
在线时间
73 小时
发表于 2017-8-26 15:13:06 | 显示全部楼层
个人使用的感觉是功能容易删减移植,不会相互干扰
回复

使用道具 举报

33

主题

984

帖子

1

精华

论坛元老

Rank: 8Rank: 8

积分
8017
金钱
8017
注册时间
2014-8-13
在线时间
1594 小时
发表于 2017-8-26 15:18:55 | 显示全部楼层
想要添加优先级,可以这样改,虽然不是真正级别的优先级(因为work2和work3无法被work1中断、work2无法中断work3)。
void main
{
      while(1)
      if(uart1_ok)
      {
          //do work1
      continue;
      }
      if(uart2_ok)
      {
          //do work2
      continue;
      }

      if(uart3_ok)
      {
          //do work3
      }

}
回复

使用道具 举报

0

主题

7

帖子

0

精华

新手上路

积分
30
金钱
30
注册时间
2017-8-26
在线时间
7 小时
发表于 2017-8-26 15:43:11 | 显示全部楼层
也可以让三个work同步执行,
回复

使用道具 举报

14

主题

112

帖子

0

精华

高级会员

Rank: 4

积分
500
金钱
500
注册时间
2017-4-25
在线时间
110 小时
发表于 2017-8-30 13:46:15 | 显示全部楼层
看了两个星期UC/OS 2,还没搞懂任务间是怎么切换的,知道是优先级,但优先级不应该设置后固定吗?任务调度怎么调度?
回复

使用道具 举报

14

主题

112

帖子

0

精华

高级会员

Rank: 4

积分
500
金钱
500
注册时间
2017-4-25
在线时间
110 小时
发表于 2017-8-30 13:46:43 | 显示全部楼层
两个多星期,求解?
回复

使用道具 举报

32

主题

236

帖子

0

精华

高级会员

Rank: 4

积分
993
金钱
993
注册时间
2017-8-11
在线时间
137 小时
发表于 2017-8-30 14:16:07 | 显示全部楼层
当你的需求,对实时性要求较高的时候,用系统会很大帮助。举个例子,跑裸机,while(1){ }
里面肯定有时差,对于某些项目应用(一定时间段需要运行一次的任务)用裸机往往就会照成误差,而且实时响应不及时会造成这个项目的效果差。跑系统,一方面整个逻辑非常清晰,而且项目量大的时候,往往跑裸机的时候逻辑往往很复杂。
回复

使用道具 举报

16

主题

51

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
344
金钱
344
注册时间
2015-8-5
在线时间
53 小时
发表于 2017-8-30 17:00:34 | 显示全部楼层
八度空间 发表于 2017-8-26 15:02
OS的好处是,没一个功能模块就是一个任务,结构清晰,需要屏蔽功能时,直接删除任务就可以了,互不干扰,呵 ...

大虾,现在的实时操作系统那个比较稳,最适合在32上跑,想在研究一下,谢谢指教
坚持到感动自己
回复

使用道具 举报

27

主题

58

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
484
金钱
484
注册时间
2014-12-25
在线时间
83 小时
发表于 2017-8-30 17:26:11 | 显示全部楼层
那假如你第一次接收的串口数据还没处理完第二份数据就来了该怎么办?(甚至第三份,第四份...)
回复

使用道具 举报

0

主题

93

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1363
金钱
1363
注册时间
2016-7-17
在线时间
153 小时
发表于 2017-8-30 17:29:08 | 显示全部楼层
个人觉得跟资源有关,要是你的内存足够,要不要用OS全凭自己的喜好,如果内存不够,那就只能用裸机了,当然,要是你能力强,能将OS裁剪到到符合内存要求,那也行,用OS还能保持较好的实时性,如果任务逻辑比较复杂,对实时性要求比较高,那采用OS是比较可靠的。
回复

使用道具 举报

2

主题

685

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3448
金钱
3448
注册时间
2017-7-4
在线时间
869 小时
发表于 2017-8-30 17:52:53 | 显示全部楼层
说明你以往做的项目都太简单了,只有实际用上了才会知道操作系统的优势是什么。拿这3个串口处理来说,裸机单一任务执行,假设串口1一直有数据,那么就会引起阻塞,下面的处理无法及时执行。
回复

使用道具 举报

1

主题

9

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
355
金钱
355
注册时间
2016-3-26
在线时间
49 小时
发表于 2017-8-30 18:34:50 | 显示全部楼层
ZTO13 发表于 2017-8-30 13:46
看了两个星期UC/OS 2,还没搞懂任务间是怎么切换的,知道是优先级,但优先级不应该设置后固定吗?任务调度 ...

1、任务切换:主要就是给PC指针和堆栈指针重新赋值,当然在这之前要先将它们原来的指向给保存起来。这两个指针决定的是运行哪块代码(任务)和哪里的数据(任务堆栈)。具体的还是多看下任哲的UCOSII吧,通俗易懂。
2、优先级不固定的其中两个原因是:(1)可以根据实际需要实时更改任务优先级。(2)可以通过更改优先级来防止“优先级反转”的问题。
以上均为个人理解。具体的还是那句,认真看看任哲的UCOSII吧。
回复

使用道具 举报

2

主题

8

帖子

0

精华

初级会员

Rank: 2

积分
56
金钱
56
注册时间
2017-8-27
在线时间
14 小时
发表于 2017-8-30 19:54:19 | 显示全部楼层
哈哈哈,当一个系统同时要处理按键扫描触摸屏串口USB CAN总线还要有控制6个轴运行,还要及时响应限位开关急停开关缓停开关采用367个不同意义的浮点参数,读取Flash中文件解析运行的时候。只能说LZ你遇到的问题太简单了。
回复

使用道具 举报

120

主题

7878

帖子

13

精华

资深版主

Rank: 8Rank: 8

积分
12012
金钱
12012
注册时间
2013-9-10
在线时间
427 小时
发表于 2017-8-30 22:00:45 | 显示全部楼层
小二郎123 发表于 2017-8-30 17:00
大虾,现在的实时操作系统那个比较稳,最适合在32上跑,想在研究一下,谢谢指教

楼下都回答了,呵呵
现在,程序把烂铜烂铁变得智能化了,人呢,一旦离开了这烂铜烂铁就不知道干啥了
回复

使用道具 举报

39

主题

212

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
303
金钱
303
注册时间
2016-4-21
在线时间
129 小时
发表于 2017-8-30 22:19:10 | 显示全部楼层
ZTO13 发表于 2017-8-30 13:46
看了两个星期UC/OS 2,还没搞懂任务间是怎么切换的,知道是优先级,但优先级不应该设置后固定吗?任务调度 ...

也许你可以看看这个:http://blog.csdn.net/guet_kite/article/details/76020069
本人交流群:136045527,欢迎各位大佬和萌新
回复

使用道具 举报

14

主题

112

帖子

0

精华

高级会员

Rank: 4

积分
500
金钱
500
注册时间
2017-4-25
在线时间
110 小时
发表于 2017-8-31 09:21:40 | 显示全部楼层
谢谢,我再仔细看看理解。
回复

使用道具 举报

0

主题

13

帖子

0

精华

新手上路

积分
46
金钱
46
注册时间
2017-7-8
在线时间
9 小时
发表于 2017-8-31 09:32:35 | 显示全部楼层
好处大大的
回复

使用道具 举报

57

主题

121

帖子

0

精华

高级会员

Rank: 4

积分
643
金钱
643
注册时间
2016-10-5
在线时间
50 小时
发表于 2017-8-31 14:05:26 | 显示全部楼层
当你的任务对实时性要求比较高的时候,你就用到了
回复

使用道具 举报

0

主题

2

帖子

0

精华

新手上路

积分
28
金钱
28
注册时间
2017-8-30
在线时间
9 小时
发表于 2017-8-31 14:33:28 | 显示全部楼层
就算是裸奔,其实也是要做一些相应的工作的,比如:存储管理分配、功能(任务)的划分和管理、中断管理等。
操作系统集中把这些管理都给你做了,使你在实现功能的时候,每个功能资源分配后基本隔离,需要共享或者互斥的时候,也可以通过信号量等来保证。
使用操作系统,有以下几个好处:
1.代码可移植行强。移植代码的时候,如果是相同的操作系统,修改很少。
2.并发性好。操作系统可以很高效调度各个任务,我们设置任务优先级后,任务的调度工作就几乎不用考虑,感觉有多个任务并行运行。
3.实时性好。对于抢占式实时操作系统,任务调度会及时把CPU时间分配给最需要的任务。
4.稳定。操作系统把各个任务隔离起来,某个任务有bug,一般不影响其他的任务。操作系统经过了无数应用的检验,一般流行的嵌入操作系统bug很少,比你自己裸跑可能还要稳定。

操作系统大概这些优点吧,我自己拍脑袋写的,不会很全
回复

使用道具 举报

0

主题

6

帖子

0

精华

初级会员

Rank: 2

积分
50
金钱
50
注册时间
2017-8-30
在线时间
10 小时
发表于 2017-8-31 14:41:41 | 显示全部楼层
while(1)
{
    if(任务1)
   {
        //delay了N久
   }
    else if(任务2)
    {
        //delay了N久
    }
else if(任务3)
    {
        //delay了N久
    }
}
这样子执行某一个任务的时候就会一直等待,......所以用实时系统就可以解决这个问题
回复

使用道具 举报

0

主题

4

帖子

0

精华

新手入门

积分
13
金钱
13
注册时间
2021-9-14
在线时间
1 小时
发表于 2021-9-16 05:46:02 | 显示全部楼层
也和楼主同样的疑问,留个脚印。
回复

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-5 11:57

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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