搜索
bottom↓
回复: 42

分享 类OS调度器V2.0 & 小小调度器(793楼版)stm32F0 的移植

  [复制链接]

出0入0汤圆

发表于 2014-11-7 08:06:15 | 显示全部楼层 |阅读模式
抽时间做了这两个移植,这两个都使用了清风F0例程的一些库,做了些改变,小小的把os调度独立了出来,小小调度的移植非常简单,类OS 的除了移植定时器外还有看门狗  ,串口adc 没有移植,F0的库用了2014-11-07 从官网下载的最新库


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

发表于 2014-11-7 08:11:26 | 显示全部楼层
楼主辛苦了.

出0入0汤圆

发表于 2014-11-7 08:15:38 | 显示全部楼层
这是仿前段时间坛子里有两个哥们分亨出来的吗?  本质核心还是那个状态机思想,利用关键字__LINE__?

出0入0汤圆

 楼主| 发表于 2014-11-7 08:17:22 | 显示全部楼层
kinsno 发表于 2014-11-7 08:15
这是仿前段时间坛子里有两个哥们分亨出来的吗?  本质核心还是那个状态机思想,利用关键字__LINE__? ...

仿 山寨 ,也就是移植下用到F0上 感觉挺好,自用而已

出0入0汤圆

发表于 2014-11-7 08:18:38 | 显示全部楼层
Vmao 发表于 2014-11-7 08:17
仿 山寨 ,也就是移植下用到F0上 感觉挺好,自用而已

真心不错,送上99个赞!

出0入0汤圆

 楼主| 发表于 2014-11-7 08:19:47 | 显示全部楼层
kinsno 发表于 2014-11-7 08:15
这是仿前段时间坛子里有两个哥们分亨出来的吗?  本质核心还是那个状态机思想,利用关键字__LINE__? ...

F0 上OS RAM 紧张啊  stm32 官网的 Cube 平台就是freeRTOS 一个LED 工程占据了大部分RAM 没啥实际用途,想想还是用这个吧

出0入0汤圆

发表于 2014-11-7 08:22:02 | 显示全部楼层
Vmao 发表于 2014-11-7 08:19
F0 上OS RAM 紧张啊  stm32 官网的 Cube 平台就是freeRTOS 一个LED 工程占据了大部分RAM 没啥实际用途, ...

用OS,  其实OS代码本身所占的那RAM倒无关紧要,能有多少,关键是各任务所占的RAM才要了命,纯属多余啊,就好比我们裸奔需要16K,但在OS下面,至少需要32K,多余一里的事;

出0入8汤圆

发表于 2014-11-7 08:33:02 | 显示全部楼层
楼主高端,当年我就没移植好~

出0入0汤圆

发表于 2014-11-7 09:03:01 | 显示全部楼层
不错,顶。

出0入0汤圆

发表于 2014-11-7 09:07:01 | 显示全部楼层
抽个时间在看看,正在改进....,工作还没完成

出0入0汤圆

发表于 2014-11-7 09:08:25 | 显示全部楼层
这么好,一定要顶

出0入0汤圆

发表于 2014-11-7 09:11:58 | 显示全部楼层
好东西,有空学习一下

出0入0汤圆

发表于 2014-11-7 09:17:18 | 显示全部楼层
mark下,问哈这个调度器,要占用好多RAM和ROM?
想在RAM和ROM的M0上面试试看。

出0入0汤圆

 楼主| 发表于 2014-11-7 09:20:42 | 显示全部楼层
重庆酱油仔 发表于 2014-11-7 09:17
mark下,问哈这个调度器,要占用好多RAM和ROM?
想在RAM和ROM的M0上面试试看。 ...

Program Size: Code=7832 RO-data=224 RW-data=72 ZI-data=1784  

出0入0汤圆

发表于 2014-11-7 09:37:05 | 显示全部楼层
谢谢,目前在研究架构类的东东。

出0入0汤圆

发表于 2014-11-7 09:37:11 | 显示全部楼层
Vmao 发表于 2014-11-7 09:20
Program Size: Code=7832 RO-data=224 RW-data=72 ZI-data=1784

几个任务啊?看来还是只有裸奔的命啊,一共只有2K的RAM.....

出0入0汤圆

发表于 2014-11-7 09:37:39 | 显示全部楼层
支持共享,谢谢

出0入0汤圆

发表于 2014-11-7 09:55:43 | 显示全部楼层
楼主有心,赞一个!

出0入0汤圆

发表于 2014-11-7 10:01:27 | 显示全部楼层
谢谢分享

出0入0汤圆

 楼主| 发表于 2014-11-12 10:27:59 | 显示全部楼层
lianglee 发表于 2014-11-12 08:54
楼主啊。

为什么会出现这样的错误呢?

你用的什么库,你把你keil 下的f0 的库升级到最新

出0入0汤圆

发表于 2014-11-12 11:00:39 | 显示全部楼层
好不错,赞,有空研究一下

出0入0汤圆

发表于 2014-11-12 11:02:20 | 显示全部楼层
不错,研究一下

出0入0汤圆

发表于 2014-11-12 11:02:33 | 显示全部楼层
谢谢楼主的分享 mark一下

出0入0汤圆

发表于 2014-11-12 11:05:15 | 显示全部楼层
谢谢楼主的分享,以后会用得上的

出0入0汤圆

发表于 2014-11-12 11:05:31 | 显示全部楼层
不错,辛苦了

出0入0汤圆

发表于 2014-11-12 11:29:49 | 显示全部楼层
谢谢分享!

出0入0汤圆

发表于 2014-11-13 19:08:04 | 显示全部楼层
LZ有心,赞!      

出0入0汤圆

发表于 2014-11-15 17:32:04 | 显示全部楼层
你好!我把你这个STM32f0的版本移植到了MSP430F149上跑起来挺好两个,任务如下:
void vLed1Test()
{
   SCHTaskBegin();
   while (1)
   {
      P2OUT |= 0xff;       //关
      SCHCurTaskDly(100);  //delay 100个时钟节拍,100*10ms = 1S
      P2OUT &= ~0xff;      //开
      SCHCurTaskDly(100);  //delay 100个时钟节拍,100*10ms = 1S
   }
   SCHTaskEnd();
}

后来无意中我写成下面这样:
void vLed1Test()
{
   unsigned char s = 0;
   SCHTaskBegin();
   while (1)
   {
        for(s=0;s<8;s++)
        {
                     P2OUT |= 1<<s;               //关
                      SCHCurTaskDly(100);  //delay 100个时钟节拍,100*10ms = 1S
                      P2OUT &= ~(1<<s);    //开
                      SCHCurTaskDly(100);  //delay 100个时钟节拍,100*10ms = 1S
        }
   }
   SCHTaskEnd();
}
写成上面这样后发现P2口8个灯没有 按顺序变化,仿真后发现s值不变化。我把S定义到函数外面,成为全局变量后好了,这是为啥啊?

后来我又写成下面这样:发现只有第一个灯闪烁,仿真跟踪,打断点第二个FOR跑不到,为啥?
void vLed1Test()
{
   unsigned char s = 0;
   SCHTaskBegin();
   while (1)
   {
        for(s=0;s<8;s++)
        {
                     P2OUT |= 1<<1;               //关
                      SCHCurTaskDly(100);  //delay 100个时钟节拍,100*10ms = 1S
                      P2OUT &= ~(1<<1);    //开
                      SCHCurTaskDly(100);  //delay 100个时钟节拍,100*10ms = 1S
        }

               for(s=0;s<8;s++)
        {
                     P2OUT |= 1<<2;               //关
                      SCHCurTaskDly(100);  //delay 100个时钟节拍,100*10ms = 1S
                      P2OUT &= ~(1<<2);    //开
                      SCHCurTaskDly(100);  //delay 100个时钟节拍,100*10ms = 1S
        }

   }
   SCHTaskEnd();
}
楼主帮我分析下,谢谢!

出0入0汤圆

发表于 2014-11-15 19:32:09 | 显示全部楼层
yanjian305 发表于 2014-11-15 17:32
你好!我把你这个STM32f0的版本移植到了MSP430F149上跑起来挺好两个,任务如下:
void vLed1Test()
{

解决了呵呵,在变量前面加stadic就好了,但是原因还是不太清楚,好像是任务返回后,变量值不改变。

出0入0汤圆

 楼主| 发表于 2014-11-15 22:42:42 | 显示全部楼层
yanjian305 发表于 2014-11-15 19:32
解决了呵呵,在变量前面加stadic就好了,但是原因还是不太清楚,好像是任务返回后,变量值不改变。 ...

你详细看看protothread原理 就明白了 protothread使用 是避免swich 使用  全局函数和局部函数的注意事项。这两个调度都是基于protothread原理的

出0入0汤圆

 楼主| 发表于 2014-11-15 22:48:03 | 显示全部楼层
yanjian305 发表于 2014-11-15 19:32
解决了呵呵,在变量前面加stadic就好了,但是原因还是不太清楚,好像是任务返回后,变量值不改变。 ...

  
使用要点:

  1、任务中不能使用switch 语句(因为任务框架使用switch实现的),但是可以在任务调用的函数中使用
  2、任务中定义的变量一定要是静态变量(static),但是可以在任务调用的函数中使用局部变量.
  3、每个任务一定要有  延时SCHCurTaskDly()或者  SCHCurTaskPend();
  4、要在启动任务调度之前建立好所有的任务

且不能使用局部变量的原因是任务在调用延时,或等待消息命令时,任务会返回,则局部变量值可能会改变,下次进来继续使用局部变量值就会出错.

由此可知只要保证在任务中,局部变量在使用前要赋值,铕一次性运行直到得出结果再调用延时或等待消息命令,则也可以使用局部变量,如果这段话看不懂,任务中就直接使用静态变量.

另: 新版本有初始化定时计数器.

问: 任务的优先级怎么确定的,跟任务创建的先后有关?

答:如你有两儿子,长子的优先级高(因为他先出生),当每次你买好吃的东西回来后,都会先问下长子,是否要吃,之后才轮到次子.所以不管你买的东西是否有多份,长子如果想吃都能吃得到.

任务创建先后顺序优先级,就如长次了出生先后的优先级.

出0入0汤圆

发表于 2014-11-16 18:57:02 | 显示全部楼层
本帖最后由 yanjian305 于 2014-11-16 19:01 编辑
Vmao 发表于 2014-11-15 22:48
使用要点:

  1、任务中不能使用switch 语句(因为任务框架使用switch实现的),但是可以在任务调用 ...


明白了,谢谢!今天弄了个闪灯的任务,感觉跑商几个小时,会死掉,不知道啥原因,就是上面的两个闪灯任务。

出0入0汤圆

 楼主| 发表于 2014-11-16 19:27:35 来自手机 | 显示全部楼层
我的f0没问题430还没搞过

出0入0汤圆

发表于 2014-11-16 20:14:24 | 显示全部楼层
谢谢共享!

出0入0汤圆

发表于 2015-6-17 20:52:51 | 显示全部楼层
谢谢分享。挺受用的

出0入0汤圆

发表于 2016-2-14 18:17:27 | 显示全部楼层
tabc_123 发表于 2014-11-7 09:07
抽个时间在看看,正在改进....,工作还没完成

有关注你写的那个调度器,支持楼主继续改进,造福大众……

出0入0汤圆

发表于 2016-2-17 22:58:54 | 显示全部楼层
谢谢!我在8s上面见到过这个OS 真心不错!

出0入0汤圆

发表于 2016-2-18 09:12:16 | 显示全部楼层
mark一下

出0入0汤圆

发表于 2016-4-27 16:31:50 | 显示全部楼层
这里有份坛友自己整理的教程,可以看看。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出375入0汤圆

发表于 2022-6-30 14:13:38 | 显示全部楼层
问一下群主,为什么在使用SCHCurTaskDly时有时会报错,报错后在前面增加回车后就不报了,有什么办法解决?

出0入0汤圆

发表于 2023-7-9 22:11:09 来自手机 | 显示全部楼层
标记,谢谢
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-5-7 11:32

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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