OpenEdv-开源电子网

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

在micrium官网下载的uCOS-II源代码,是已经移植好了的吗?

[复制链接]

12

主题

51

帖子

0

精华

初级会员

Rank: 2

积分
120
金钱
120
注册时间
2014-1-22
在线时间
0 小时
发表于 2014-11-2 19:58:42 | 显示全部楼层 |阅读模式
5金钱

我在官网下载的源码,uCOS-II文件夹中有Ports和Source,我看资料知道,ucosii\src 下的代码是 ucosii 中无需修改部分,ucosii\Source 下的代码是移植时需要修改的。

但是我发现ucosii\Source 中的os_cpu_c.c  os_cpu.h  os_cpu_a.asm这三个程序已经和原子哥例程中的代码一样了。

是否我只需要修改os_cfg.h中的宏定义就好了?

最佳答案

查看完整内容[请看2#楼]

不用改,可以直接跑的, 根据需要配置os_cfg.h就可以了,注意一下os_cpu_a.asm的PendSV_Handler名字 和stm32的启动文件的向量名一样就行了,我以前就碰过壁,因为官方给的demo是命名成OS_CPU_PendSVHandler的。 顺便问下,麦克泰公司是不是也打你电话了啊! 我以前也在Micrium上下载过最新的uCOS-2.91的, 然后那货就打电话过来:我们这个用于商业是要收版权费的,bbbbb........ 笑死我了
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

5

主题

154

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
205
金钱
205
注册时间
2013-6-8
在线时间
2 小时
发表于 2014-11-2 19:58:43 | 显示全部楼层
不用改,可以直接跑的, 根据需要配置os_cfg.h就可以了,注意一下os_cpu_a.asm的PendSV_Handler名字
和stm32的启动文件的向量名一样就行了,我以前就碰过壁,因为官方给的demo是命名成OS_CPU_PendSVHandler的。

顺便问下,麦克泰公司是不是也打你电话了啊!
我以前也在Micrium上下载过最新的uCOS-2.91的,
然后那货就打电话过来:我们这个用于商业是要收版权费的,bbbbb........
笑死我了
即使爬到最高的山上,一次也只能脚踏实地地迈一步。
回复

使用道具 举报

12

主题

51

帖子

0

精华

初级会员

Rank: 2

积分
120
金钱
120
注册时间
2014-1-22
在线时间
0 小时
 楼主| 发表于 2014-11-2 20:42:37 | 显示全部楼层
回复【2楼】倒拔萝卜:
---------------------------------
那么这样看来根据需要配置os_cfg.h就可以了,那整体来说不就还算比较简单啦?
没有啊。我下载的是2.92的,
回复

使用道具 举报

5

主题

154

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
205
金钱
205
注册时间
2013-6-8
在线时间
2 小时
发表于 2014-11-3 17:01:07 | 显示全部楼层
回复【3楼】why always me:
---------------------------------
→.→,当时我好傻,注册账号时填了手机号......
即使爬到最高的山上,一次也只能脚踏实地地迈一步。
回复

使用道具 举报

12

主题

51

帖子

0

精华

初级会员

Rank: 2

积分
120
金钱
120
注册时间
2014-1-22
在线时间
0 小时
 楼主| 发表于 2014-11-3 19:06:02 | 显示全部楼层
回复【4楼】倒拔萝卜:
---------------------------------
话说我也填了手机号啊。

这个下载下来的代码都是可以直接用的吗? 昨天搞了下还是没怎么对
回复

使用道具 举报

5

主题

154

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
205
金钱
205
注册时间
2013-6-8
在线时间
2 小时
发表于 2014-11-3 22:43:50 | 显示全部楼层
回复【5楼】why always me:
---------------------------------
看来我运气背了点,打了我电话o(╯□╰)o

我的建议哈:别移植了,移植这个一点技术含量都没有,port下的代码
适用于任何一个版本的uCOS-II,你折腾几天也就是知道怎么建立一个
工程而已,你直接用别人能够运行的开始编程吧,版本高低也是无所谓的。

然后边运行边去分析内核源码,打断点跟踪函数,这样你很快就会掌握
它的运行原理的,真的不骗你哦!
即使爬到最高的山上,一次也只能脚踏实地地迈一步。
回复

使用道具 举报

12

主题

51

帖子

0

精华

初级会员

Rank: 2

积分
120
金钱
120
注册时间
2014-1-22
在线时间
0 小时
 楼主| 发表于 2014-11-3 22:46:07 | 显示全部楼层
回复【6楼】倒拔萝卜:
---------------------------------
嗯,也许吧。那你怎么回答的呢?

嗯,我看了不少uCOS-II的资料,到头来发现移植也就是搬代码,对于内核源码也不是很理解。
我也想在以后慢慢的应用中来理解。
请问你当初是怎么学习的呢?
回复

使用道具 举报

5

主题

154

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
205
金钱
205
注册时间
2013-6-8
在线时间
2 小时
发表于 2014-11-3 23:11:27 | 显示全部楼层
回复【7楼】why always me:
---------------------------------
是个妹子哦,调戏了下呗(*^__^*) ……

你就试试这样:
1.下载战舰版的实验53 UCOSII实验1-任务调度。这个工程只有两个任务,后台还有一个OS_TaskIdle()任务。
void led0_task(void *pdata)
{  
while(1)
{
LED0=0;
delay_ms(80);
LED0=1;
delay_ms(920);
}
}

void led1_task(void *pdata)
{   
while(1)
{
LED1=0;
delay_ms(300);
LED1=1;
delay_ms(300);
}
}

2.你死命的打断点,好好分析这3个任务到底是怎么相互切换,然后记录下
这期间遍历过了哪些函数。

3.没错,这些遍历过的函数就是任务调度的具体过程。一定要记下函数的调用过程哦。

要有耐心,一步一步慢慢打断点,打它一个星期包你能够看到任务调度原理。
还有在开发板上调试打断点打太久可能会死机,你直接把keil设置成软件仿真,
这样也是可以的。


比如你可以像这样记录调用过程,不相干的语句先别管它:
led0_task-main.c
delay_ms-delay.c
OSTimeDly-os_time.c
OS_Sched-os_core.c
OS_TASK_SW
OSCtxSw-os_cpu_a.asm

...
...

一步一步这样分析,奇迹就会出现,跟的跟居然跟到了OS_TaskIdle来了,
然后又跟到led1_task来了。
即使爬到最高的山上,一次也只能脚踏实地地迈一步。
回复

使用道具 举报

5

主题

154

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
205
金钱
205
注册时间
2013-6-8
在线时间
2 小时
发表于 2014-11-3 23:13:46 | 显示全部楼层
空格被吃了,缩进代表调用关系
 led0_task-main.c 
      delay_ms-delay.c 
           OSTimeDly-os_time.c 
                 OS_Sched-os_core.c 
                       OS_TASK_SW 
                              OSCtxSw-os_cpu_a.asm 

                       ... 
                  ...
即使爬到最高的山上,一次也只能脚踏实地地迈一步。
回复

使用道具 举报

12

主题

51

帖子

0

精华

初级会员

Rank: 2

积分
120
金钱
120
注册时间
2014-1-22
在线时间
0 小时
 楼主| 发表于 2014-11-4 08:53:58 | 显示全部楼层
回复【9楼】倒拔萝卜:
---------------------------------
嗯,好的。谢谢你
我发现入门实验,任务创建删除挂起恢复,我现在可以挂起恢复,没法删除?
OSTaskDelReq() 难道不是这个函数吗?
回复

使用道具 举报

12

主题

51

帖子

0

精华

初级会员

Rank: 2

积分
120
金钱
120
注册时间
2014-1-22
在线时间
0 小时
 楼主| 发表于 2014-11-4 10:54:03 | 显示全部楼层
回复【9楼】倒拔萝卜:
---------------------------------
我根据你说的方法试过了,但是我发现了一个问题。我用的是MINI版UCOSII实验1-任务调度。这个工程也只有两个任务,
//LED0任务,任务优先级为7
void led0_task(void *pdata)
{  
while(1)
{
LED0=0;
delay_ms(250);
LED0=1;
delay_ms(250);
};
}

//LED1任务,任务优先级为6
void led1_task(void *pdata)
{   
while(1)
{
LED1=0;
delay_ms(500);
LED1=1;
delay_ms(500);
};
}
我在 led1_task()的while(1)这儿打的断点,然后不断的按F10。当经过LED1=0的时候LED1亮了,经过delay_ms(500);LED0闪烁一下,经过LED1=1的时候LED1灭了,经过delay_ms(500);LED0闪烁一下。
但是按F11进入调试的时候,就只有LED1的亮灭情况,LED0没有变化,请问这个是怎么回事呢?
回复

使用道具 举报

5

主题

154

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
205
金钱
205
注册时间
2013-6-8
在线时间
2 小时
发表于 2014-11-4 11:12:21 | 显示全部楼层
回复【11楼】why always me:
---------------------------------
led控制脚是不是被jtag占用了呢?

顺便说一下,你改一下delay_ms(),不要让他们呈倍数关系了,
当两个任务延时同时超时的时候,会优先调度任务优先级别高的,
容易把你看晕的。

是3个任务哦,led0_task  led1_task  OS_TaskIdle,delay_ms的时候,
是调度到了OS_TaskIdle去了。

如果硬件有问题的话,可以先用软件仿真慢慢打,软件仿真上面也是可以看到
led引脚寄存器的高低电平的。
即使爬到最高的山上,一次也只能脚踏实地地迈一步。
回复

使用道具 举报

12

主题

51

帖子

0

精华

初级会员

Rank: 2

积分
120
金钱
120
注册时间
2014-1-22
在线时间
0 小时
 楼主| 发表于 2014-11-4 11:21:33 | 显示全部楼层

回复【12楼】倒拔萝卜:
---------------------------------
LED0,LED1也没有和其他管脚共用的。

delay_ms()也改过了,按F10和按F11的效果总是不一样的。按F10能看到LED0的变化,按F11却没有


还有我想问一下,当任务正在运行的时候被打断了,那么就运行就绪表中任务优先级最高的任务,那么刚才那个正在运行的任务处于什么状态呢?

回复

使用道具 举报

5

主题

154

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
205
金钱
205
注册时间
2013-6-8
在线时间
2 小时
发表于 2014-11-4 14:11:47 | 显示全部楼层
回复【13楼】why always me:
---------------------------------
F10:step over  F11:step
F11单步跟踪会很慢的,要按很多次才会看到的(按好几百次吧o(╯□╰)o),你直接打断点,
然后run到那个断点就是了。

刚才那个正在运行的任务在就绪表中就会被清'0'撒,然后os就把cpu给下一个任务用了,就是
PC指针已经指到下一个就绪任务了。看下面这段代码,被 &= ~ 了,就是清0。
OSTimeDly
     .....
     y            =  OSTCBCur->OSTCBY;        /* Delay current task                                 */
     OSRdyTbl[y] &= (OS_PRIO)~OSTCBCur->OSTCBBitX;
     if (OSRdyTbl[y] == 0u) {
         OSRdyGrp &= (OS_PRIO)~OSTCBCur->OSTCBBitY;
     }
     ...

你才刚刚开始,要有耐心,慢慢来,有问题先自己记下来,等你熟悉了它的调度过程后,这些问题
不攻自破。

笔记很重要,一定要用笔记下它的调度过程的哦,单靠眼睛看,两下就跟丢了。不要指望一两天就出结果,
这是个慢慢熟悉慢慢理解的过程,一个星期左右,就开始有感觉了。
即使爬到最高的山上,一次也只能脚踏实地地迈一步。
回复

使用道具 举报

12

主题

51

帖子

0

精华

初级会员

Rank: 2

积分
120
金钱
120
注册时间
2014-1-22
在线时间
0 小时
 楼主| 发表于 2014-11-4 18:29:42 | 显示全部楼层
回复【14楼】倒拔萝卜:
---------------------------------
嗯,我知道按F11要按很多次,但是我从LED1=0; 开始经过了delay_ms(500); 到达了LED1=1; delay_ms(500); 也没有看见什么变化,如果你有时间可以试试看,不知道是否是我有错,我试过几次了。

嗯,一开始总是会遇到很多不懂的,谢谢你的帮助。
回复

使用道具 举报

94

主题

260

帖子

0

精华

高级会员

Rank: 4

积分
650
金钱
650
注册时间
2013-10-23
在线时间
48 小时
发表于 2015-2-2 23:31:10 | 显示全部楼层
回复【3楼】why always me:
---------------------------------
能不能把你下的源码给我一份呀
回复

使用道具 举报

13

主题

40

帖子

0

精华

初级会员

Rank: 2

积分
130
金钱
130
注册时间
2015-4-21
在线时间
8 小时
发表于 2015-6-28 23:16:50 | 显示全部楼层
为什么你在官网下的ucosii源码有source和port。为什么我下的就没有!
回复

使用道具 举报

13

主题

40

帖子

0

精华

初级会员

Rank: 2

积分
130
金钱
130
注册时间
2015-4-21
在线时间
8 小时
发表于 2015-6-28 23:17:29 | 显示全部楼层
能不能把具体在官网下的步骤发出来?
回复

使用道具 举报

15

主题

95

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
267
金钱
267
注册时间
2012-11-5
在线时间
11 小时
发表于 2015-12-10 15:41:02 | 显示全部楼层
我想问问纯净版的uCOSII和移植版的uCOSII是不是有很大的差别的?
如果我下载的是纯净版的uCOSII,请问要怎么移植?
学习之路漫长而修远......
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-21 05:58

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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