usbfish 发表于 2007-9-9 23:54:49

一个最新的uCOS-II的GCCAVR移植版本

本人刚刚移植通过,基于atmega128的,时钟节拍采用的是8位定时器Timer0的比较匹配输出中断,频率200Hz。基于最新的uCOS-II v2.85,较新的GCCAVR 4.1.1(WinAVR20070122)。

我在网上看了很多,但是关于一个真正能够跑起来的基于GCCAVR最新版本的uCOS-II几乎没有./emotion/em040.gif,但是自己自小酷爱GCCAVR,于是独自捣鼓很久,终于搞出来了,用的移植方法也是作者Jean J. Labrosse在书籍《MicroC/OS-II》Second Edition里面推荐的最新的方法进行移植的。

点击此处下载armok01171130.zip

有不明白的可以联系我。
QQ:    20057607
Email: xiawei0311#gmail.com

ppa8086xp 发表于 2007-9-10 00:33:51

顶你。

ppa8086xp 发表于 2007-9-10 00:45:14

你的这个贴子,今天让我失眠。再顶一下。

tiger2023 发表于 2007-9-10 00:49:50

请问是否能直接应用的Mega64上,好象只是RAM与ROM大小不同吧?

tiger2023 发表于 2007-9-10 01:15:42

http://cache.amobbs.com/bbs_upload782111/files_8/armok01171167.JPG
我试了一下,会出现阶段avr-gcc: _spawnv: Invalid argument
make *** error 1 的错误,见附件图;
因为我机器上装了较多的编译器,所以我一般都用绝对路径使用make(应该没有问题)
clean 了一遍,还是相同的问题

tiger2023 发表于 2007-9-10 01:21:15

我用的GCC版本更新一些,不知是不是这个问题?

usbfish 发表于 2007-9-10 01:58:07

我这里并不报错啊!只是一个.eep的error而已。
这是我的截屏
http://cache.amobbs.com/bbs_upload782111/files_8/armok01171187.GIF

usbfish 发表于 2007-9-10 02:19:22

应用程序我也运行过了,一切正常啊,可能是你的编译器的问题吧,我的是4.1.1的了,已经是很新的了,没想到还有比我更新的GCCAVR。有空去单位再用4.1.2的GCCAVR给你试试。
哈哈,看来我还要再测试一下,“最新的GCC”+最新的“uCOS-II”。
明天再试,睡觉了。

minier 发表于 2007-9-10 08:55:56

简直是太酷了!

tiger2023 发表于 2007-9-10 09:36:47

我把机器上其它的编译器都删除了,清理了注册表,再重新编没问题了!可能是其它的东西造成的,谢谢!
另外请问是不是直接可以用在M64上,我看了二者好象没有什么差别!
再次感谢!

qianwei 发表于 2007-9-10 10:12:01

可以提供2.85的原版吗??

tiger2023 发表于 2007-9-10 10:27:20

点击此处下载armok01171348.ZIP
我这有官网上的下的,支持IAR及ICC的,但是好象少了APP.h(可能是希望你自己来配置)
本想用正版的,写邮件不回,打电话给他们办事处也不能很好解决问题,
同意阿莫说的,收费才能保证其价值(不是原话,大概这个意思);
只是觉得他为了让别人付费,可以不公开代码(编成.o文件发布),
但是给别人评估的东西最好能让傻子也顺利得用起来,要不怎么知道他好不好呢!

usbfish 发表于 2007-9-10 10:29:42

可以直接应用在atmega64上面,完全可以!
压缩包里面的OSsrc文件夹下的就是2.85的源码啊,一个字都没改动!

tiger2023 发表于 2007-9-10 10:33:10

呵呵,谢谢!

hetao7241 发表于 2007-9-10 10:41:18

有应用实例吗?哪怕一个非常简单的,非常感谢!

usbfish 发表于 2007-9-10 11:14:54

你改一下main.c文件即可,实现一个小例程。

#include <avr/io.h>

#include "ucos_ii.h"
#include "atmega128.h"

OS_STK TestTaskStk0;
OS_STK TestTaskStk1;

void TestTask0(void* pdata);
void TestTask1(void* pdata);

int main(void)
{
DDRA=0xFF;/*PORTA口设置为输出*/
PORTA=0xFF;/*PORTA口全部置为高电平*/
DDRC=0xFF;/*PORTC口设置为输出*/
PORTC=0xFF;/*PORTC口全部置为高电平*/
OSInit();
OSTaskCreate(TestTask0,(void*)0,&TestTaskStk0,0);
OSTaskCreate(TestTask1,(void*)0,&TestTaskStk1,1);
OSStart();
}

void TestTask0(void* pdata)
{
INT8U LED=0xFF;
pdata=pdata;
init_timer0();/*初始化时钟节拍中断*/
while(1)
{
LED^=0x01;
PORTA=LED;
OSTimeDlyHMSM(0,0,1,0);/*PA0口电平每隔1秒改变一次*/
}
}

void TestTask1(void* pdata)
{
INT8U LED=0xFF;
pdata=pdata;
while(1)
{
LED^=0x01;
PORTC=LED;
OSTimeDlyHMSM(0,0,3,0);/*PC0口电平每隔3秒改变一次*/
}
}

hetao7241 发表于 2007-9-10 12:25:45

谢谢usbfish!

hetao7241 发表于 2007-9-10 16:07:04

请教usbfish:直接在AVR Stdio4中编译(WinAVR-2005或其它版本)需要修改哪些那些地方,能否也给一个源程序?谢谢!

hyue928 发表于 2007-9-10 16:52:17

狂顶顶下~!

lansedongtian 发表于 2007-9-10 17:08:54

下了
研究一下.
顶上去

1181zjf 发表于 2007-9-10 17:28:26

不错!刚试了!
可以在winavr2007上编译通过!
有一个.eep的报错!
可以生成hex文件!

littleboy 发表于 2007-9-10 17:39:44

好,顶上~

lrzxc 发表于 2007-9-10 21:00:56

精品顶起

sandman 发表于 2007-9-11 08:55:00

问一下,中断函数应该怎么写

usbfish 发表于 2007-9-11 09:50:19

为了照顾兼容性,暂时没有添加中断函数。我会在后面放出。

sandman 发表于 2007-9-11 10:28:38

很好,盼着能够早日完成

nicholasldf 发表于 2007-9-11 11:17:22

顶!
能否建一个QQ群?要usbfish兄给每个兄弟指点建议忙不过来,呵呵!

usbfish 发表于 2007-9-11 11:29:52

汗。。。。。
指点不敢当,大家共勉。

zkf0100007 发表于 2007-9-25 00:48:23

直接加到WINAVR中的工程里面,再写一个makefile这样可以吗?
还是非要用DOS命令才行?

AVRstudent 发表于 2007-9-25 18:49:32

very good!

jackiezeng 发表于 2007-9-25 22:59:09

好东西啊,

sswanglei 发表于 2007-12-15 11:13:50

好东西~帮顶!

sgsong 发表于 2007-12-29 12:51:56

太感动了!!!!!!!!!

jijuxie321 发表于 2007-12-29 13:31:03

能不能加我为好友啊..我也挺喜欢玩UC/OS-II..只是GCC不大会用.
我玩的是UC/OS-II+LPC2148 ADS环境.
QQ312008263

sswanglei 发表于 2008-1-17 15:17:04

好,用了你的移植程序,结果出现了下边的问题:
http://www2.ourdev.cn/bbs/bbs_content.jsp?bbs_sn=893493&bbs_page_no=1&search_mode=1&search_text=ucos&bbs_id=9999

呵呵,有点乱,对于软件堆栈和硬件堆栈。

PaulDE 发表于 2008-1-18 10:26:06

顶起

zsulrq 发表于 2008-1-22 09:52:26

谢谢!顶一下

rainbow 发表于 2008-1-22 13:23:56

试了,这个可以在M128上面用。很正常。
13K多程序。
但不能在M16上用,有空要好好研究一下,因为有个ICC的uCOS2(2.7X)(也本站网友的)可以在M8/16上跑。
不知楼主有没有试一下M16。

.bss的大小超出了1K,不知是不是这个问题。

our_avr 发表于 2008-3-25 17:09:40

全部顶上来,慢慢在看看。发现学习OS真是个痛苦的事情

xiaowei0588 发表于 2008-3-26 08:30:21

顶!

rkfch 发表于 2008-3-26 11:34:28

顶起

PaulDE 发表于 2008-3-26 12:14:59

用一楼代码


>make clean
……

>make all

-------- begin --------
avr-gcc (GCC) 4.2.2 (WinAVR 20071221)
Copyright (C) 2007 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.


Compiling: ../OSsrc/os_core.c
avr-gcc -c -mmcu=atmega128 -I. -gstabs -DF_CPU=1000000UL-Os -funsigned-char -f
unsigned-bitfields -fpack-struct -fshort-enums -Wall -Wstrict-prototypes -Wa,-ad
hlns=../OSsrc/os_core.lst -I../AVR -I../Config -I../OSsrc -std=gnu99 -MD -MP -MF
.dep/os_core.o.d ../OSsrc/os_core.c -o ../OSsrc/os_core.o

Compiling: ../OSsrc/os_flag.c
avr-gcc -c -mmcu=atmega128 -I. -gstabs -DF_CPU=1000000UL-Os -funsigned-char -f
unsigned-bitfields -fpack-struct -fshort-enums -Wall -Wstrict-prototypes -Wa,-ad
hlns=../OSsrc/os_flag.lst -I../AVR -I../Config -I../OSsrc -std=gnu99 -MD -MP -MF
.dep/os_flag.o.d ../OSsrc/os_flag.c -o ../OSsrc/os_flag.o

Compiling: ../OSsrc/os_mbox.c
avr-gcc -c -mmcu=atmega128 -I. -gstabs -DF_CPU=1000000UL-Os -funsigned-char -f
unsigned-bitfields -fpack-struct -fshort-enums -Wall -Wstrict-prototypes -Wa,-ad
hlns=../OSsrc/os_mbox.lst -I../AVR -I../Config -I../OSsrc -std=gnu99 -MD -MP -MF
.dep/os_mbox.o.d ../OSsrc/os_mbox.c -o ../OSsrc/os_mbox.o

Compiling: ../OSsrc/os_mem.c
avr-gcc -c -mmcu=atmega128 -I. -gstabs -DF_CPU=1000000UL-Os -funsigned-char -f
unsigned-bitfields -fpack-struct -fshort-enums -Wall -Wstrict-prototypes -Wa,-ad
hlns=../OSsrc/os_mem.lst -I../AVR -I../Config -I../OSsrc -std=gnu99 -MD -MP -MF
.dep/os_mem.o.d ../OSsrc/os_mem.c -o ../OSsrc/os_mem.o

Compiling: ../OSsrc/os_mutex.c
avr-gcc -c -mmcu=atmega128 -I. -gstabs -DF_CPU=1000000UL-Os -funsigned-char -f
unsigned-bitfields -fpack-struct -fshort-enums -Wall -Wstrict-prototypes -Wa,-ad
hlns=../OSsrc/os_mutex.lst -I../AVR -I../Config -I../OSsrc -std=gnu99 -MD -MP -M
F .dep/os_mutex.o.d ../OSsrc/os_mutex.c -o ../OSsrc/os_mutex.o

Compiling: ../OSsrc/os_q.c
avr-gcc -c -mmcu=atmega128 -I. -gstabs -DF_CPU=1000000UL-Os -funsigned-char -f
unsigned-bitfields -fpack-struct -fshort-enums -Wall -Wstrict-prototypes -Wa,-ad
hlns=../OSsrc/os_q.lst -I../AVR -I../Config -I../OSsrc -std=gnu99 -MD -MP -MF .d
ep/os_q.o.d ../OSsrc/os_q.c -o ../OSsrc/os_q.o

Compiling: ../OSsrc/os_sem.c
avr-gcc -c -mmcu=atmega128 -I. -gstabs -DF_CPU=1000000UL-Os -funsigned-char -f
unsigned-bitfields -fpack-struct -fshort-enums -Wall -Wstrict-prototypes -Wa,-ad
hlns=../OSsrc/os_sem.lst -I../AVR -I../Config -I../OSsrc -std=gnu99 -MD -MP -MF
.dep/os_sem.o.d ../OSsrc/os_sem.c -o ../OSsrc/os_sem.o

Compiling: ../OSsrc/os_task.c
avr-gcc -c -mmcu=atmega128 -I. -gstabs -DF_CPU=1000000UL-Os -funsigned-char -f
unsigned-bitfields -fpack-struct -fshort-enums -Wall -Wstrict-prototypes -Wa,-ad
hlns=../OSsrc/os_task.lst -I../AVR -I../Config -I../OSsrc -std=gnu99 -MD -MP -MF
.dep/os_task.o.d ../OSsrc/os_task.c -o ../OSsrc/os_task.o

Compiling: ../OSsrc/os_time.c
avr-gcc -c -mmcu=atmega128 -I. -gstabs -DF_CPU=1000000UL-Os -funsigned-char -f
unsigned-bitfields -fpack-struct -fshort-enums -Wall -Wstrict-prototypes -Wa,-ad
hlns=../OSsrc/os_time.lst -I../AVR -I../Config -I../OSsrc -std=gnu99 -MD -MP -MF
.dep/os_time.o.d ../OSsrc/os_time.c -o ../OSsrc/os_time.o

Compiling: ../OSsrc/os_tmr.c
avr-gcc -c -mmcu=atmega128 -I. -gstabs -DF_CPU=1000000UL-Os -funsigned-char -f
unsigned-bitfields -fpack-struct -fshort-enums -Wall -Wstrict-prototypes -Wa,-ad
hlns=../OSsrc/os_tmr.lst -I../AVR -I../Config -I../OSsrc -std=gnu99 -MD -MP -MF
.dep/os_tmr.o.d ../OSsrc/os_tmr.c -o ../OSsrc/os_tmr.o

Compiling: ../OSsrc/os_dbg_r.c
avr-gcc -c -mmcu=atmega128 -I. -gstabs -DF_CPU=1000000UL-Os -funsigned-char -f
unsigned-bitfields -fpack-struct -fshort-enums -Wall -Wstrict-prototypes -Wa,-ad
hlns=../OSsrc/os_dbg_r.lst -I../AVR -I../Config -I../OSsrc -std=gnu99 -MD -MP -M
F .dep/os_dbg_r.o.d ../OSsrc/os_dbg_r.c -o ../OSsrc/os_dbg_r.o

Compiling: ../AVR/OS_CPU_C.c
avr-gcc -c -mmcu=atmega128 -I. -gstabs -DF_CPU=1000000UL-Os -funsigned-char -f
unsigned-bitfields -fpack-struct -fshort-enums -Wall -Wstrict-prototypes -Wa,-ad
hlns=../AVR/OS_CPU_C.lst -I../AVR -I../Config -I../OSsrc -std=gnu99 -MD -MP -MF
.dep/OS_CPU_C.o.d ../AVR/OS_CPU_C.c -o ../AVR/OS_CPU_C.o

Compiling: ../APP/main.c
avr-gcc -c -mmcu=atmega128 -I. -gstabs -DF_CPU=1000000UL-Os -funsigned-char -f
unsigned-bitfields -fpack-struct -fshort-enums -Wall -Wstrict-prototypes -Wa,-ad
hlns=../APP/main.lst -I../AVR -I../Config -I../OSsrc -std=gnu99 -MD -MP -MF .dep
/main.o.d ../APP/main.c -o ../APP/main.o

Assembling: ../AVR/OS_CPU_A.S
avr-gcc -c -mmcu=atmega128 -I. -x assembler-with-cpp -Wa,-adhlns=../AVR/OS_CPU_A
.lst,-gstabs../AVR/OS_CPU_A.S -o ../AVR/OS_CPU_A.o

Linking: uCOS-II.elf
avr-gcc -mmcu=atmega128 -I. -gstabs -DF_CPU=1000000UL-Os -funsigned-char -funs
igned-bitfields -fpack-struct -fshort-enums -Wall -Wstrict-prototypes -Wa,-adhln
s=../OSsrc/os_core.o -I../AVR -I../Config -I../OSsrc -std=gnu99 -MD -MP -MF .dep
/uCOS-II.elf.d ../OSsrc/os_core.o ../OSsrc/os_flag.o ../OSsrc/os_mbox.o ../OSsrc
/os_mem.o ../OSsrc/os_mutex.o ../OSsrc/os_q.o ../OSsrc/os_sem.o ../OSsrc/os_task
.o ../OSsrc/os_time.o ../OSsrc/os_tmr.o ../OSsrc/os_dbg_r.o ../AVR/OS_CPU_C.o ..
/APP/main.o ../AVR/OS_CPU_A.o --output uCOS-II.elf -Wl,-Map=uCOS-II.map,--cref
-lm

Creating load file for Flash: uCOS-II.hex
avr-objcopy -O ihex -R .eeprom uCOS-II.elf uCOS-II.hex

Creating load file for EEPROM: uCOS-II.eep
avr-objcopy -j .eeprom --set-section-flags=.eeprom="alloc,load" \
      --change-section-lma .eeprom=0 -O ihex uCOS-II.elf uCOS-II.eep
c:\WinAVR-20071221\bin\avr-objcopy.exe: --change-section-lma .eeprom=0x00000000
never used

Creating Extended Listing: uCOS-II.lss
avr-objdump -h -S uCOS-II.elf > uCOS-II.lss

Creating Symbol Table: uCOS-II.sym
avr-nm -n uCOS-II.elf > uCOS-II.sym

Size after:
uCOS-II.elf:
section   size      addr
.data      266   8388864
.text      11190         0
.bss      1629   8389130
.stab      28644         0
.stabstr    8031         0
Total      49760



-------- end --------

spy2008 发表于 2008-3-26 12:34:43

mark

yaya001 发表于 2008-3-26 14:18:12

我也标记一下

yzz163 发表于 2008-4-9 09:27:41

顶。

yzlyear 发表于 2008-4-9 09:30:00

简直酷B了

Forever 发表于 2008-4-23 10:33:53

酷,我试了好几个都不行,编译路径不会配,谢了!

loyalty14 发表于 2008-5-10 23:46:18

顶!
我是刚开始学gcc
为什么不直接用gcc的集成开发环境
而要用dos命令呢
小弟不解其有什么好处??

mxpopstar 发表于 2008-5-25 23:35:05

楼主你好
我把你的UCOS用在了mage64上了可以运行
但是有个奇怪的问题
运行TCCR3B=0;后 TCCR3B的值却变成了1
其他很多寄存器如TCCR0B 等等都是一样的情况
至于堆栈分配是足够的
请问这是什么原因呀
谢谢

mxpopstar 发表于 2008-5-25 23:40:00

还有一个问题就是
在足够堆栈的情况下
在一个任务中使用三个以上的char变量;
则只有一个或两个变量可以被赋值为0
而把其他的变量赋值为0,结果却变成了1;
不知道大家有没有出现和我一样的问题!
超级郁闷中!

liuyuema09 发表于 2008-5-28 15:32:40

lfh1986 发表于 2008-7-1 17:29:53

马个客

lfh1986 发表于 2008-7-2 10:27:26

不知道用在m32上,用iccavr编译需要做哪些改动。

yuanhuaize 发表于 2008-7-11 12:53:34

我也凑下热闹

lu_zq 发表于 2008-7-16 17:32:05

顶起来!

cnlostain 发表于 2008-12-17 15:00:27

非常感谢LZ的无私奉献

OSIntCtxSw:

#if&nbsp;OS_CPU_HOOKS_EN>&nbsp;0

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CALL&nbsp;&nbsp;&nbsp;OSTaskSwHook&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;&nbsp;Call&nbsp;user&nbsp;defined&nbsp;task&nbsp;switch&nbsp;hook

#endif

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LDS&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;R16,OSPrioHighRdy&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;&nbsp;OSPrioCur&nbsp;=&nbsp;OSPrioHighRdy

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;STS&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;OSPrioCur,R16&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;



&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LDS&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;R30,OSTCBHighRdy&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;&nbsp;Z&nbsp;=&nbsp;OSTCBHighRdy->OSTCBStkPtr

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LDS&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;R31,OSTCBHighRdy+1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;STS&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;OSTCBCur,R30&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;&nbsp;OSTCBCur&nbsp;=&nbsp;OSTCBHighRdy

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;STS&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;OSTCBCur+1,R31&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;



&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LD&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;R28,Z+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;&nbsp;Restore&nbsp;Y&nbsp;pointer

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;OUT&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_SFR_IO_ADDR(SPL),R28

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LD&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;R29,Z+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;OUT&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_SFR_IO_ADDR(SPH),R29



&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;POPRS&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;&nbsp;Restore&nbsp;all&nbsp;registers&nbsp;and&nbsp;status&nbsp;register

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;RET

但是感觉在中断级的任务切换这一点上有些没有理解清楚&nbsp;好像并没有做堆栈结构的调整这一步工作。

我的感觉是被中断调度挂起的任务的栈顶指针丢失了。

只是凭感觉而言,如果犯了低级错误请大家不要见笑。&nbsp;&nbsp;希望LZ和各位大侠能给解答一下:)

ecat 发表于 2008-12-17 16:06:25

好,记录一下。

rkfch 发表于 2008-12-22 17:25:03

mark

lihongguang 发表于 2008-12-23 09:37:18

请usbfish&nbsp;按网友的更正重新发一个新的,

谢谢

lihongguang 发表于 2008-12-23 09:40:27

chiooo:

是usbfish的程序有问题,我按"cnlostain"&nbsp;、widesoft&nbsp;通关的更正后,proteus&nbsp;仿真通过

caixiong 发表于 2008-12-23 15:12:00

yufanmiao 发表于 2008-12-25 09:22:01

lihongguang&nbsp;:我试用了一下,第一个任务执行,第二个任务不能正常运行,why?具体如何修正

lvjunyang 发表于 2008-12-26 08:45:29

"是usbfish的程序有问题,我按"cnlostain"&nbsp;、widesoft&nbsp;通关的更正后,proteus&nbsp;仿真通过&nbsp;"



具体怎么样?能否给个说明?

valley 发表于 2008-12-27 15:07:47

“自小酷爱GCCAVR”——楼主太牛逼了,不知GCCAVR出来多久了?楼主中学毕业没有?哈哈

piston47 发表于 2009-2-24 22:19:57

学习中,感激楼主

mxh0506 发表于 2009-5-14 23:20:18

cnlostain: OSIntCtxSw函数没问题,根本不需要在这个函数里调整堆栈。如果你是按照ucOS-II第二版书上的移植方法去考虑,那就不对了。那本书有几处已经明显过时,不符合当前源码的现状了。
其实,如果你看过官方移植代码的话,会发现早在2.7x版中就已经不再调整堆栈了。调整堆栈是一种过时的做法,会牵扯到CPU和编译器两方面的移植,还和相关函数的局部变量等影响堆栈的因素有关,非常麻烦。如果换一个思路:在堆栈被“污染”之前就把SP保存到TCB,那不就省事了吗?最新的代码就是这么做的!
所以,不要完全相信那本书上讲的,其中有些内容已经过时了。举几个例子:
书上提到,ucOS-II目前不支持事件标志,实际上已经支持了
系统支持的最大任务数不是64,而是256
...

关于LZ贴出来的这份代码,我下来试着编译了一把,虽然可以运行,但是感觉有点不对头,源码部分是否被改过?
os_core.c中的几个钩子函数的调用怎么都没有条件编译呢?这样一来,os_cfg.h中的相关配置还有什么用?
怀疑中...

ozo 发表于 2009-6-10 23:58:48

mark

cgbabc 发表于 2009-6-11 08:40:31

还真不错呀

iiset 发表于 2009-6-14 17:01:20

mark

shhachqi 发表于 2009-6-19 16:32:19

不错呀!

mikefeiee 发表于 2009-7-30 09:14:03

标记

locku 发表于 2009-8-17 15:20:19

哇塞,牛人牛贴,顶

ilxsh 发表于 2009-8-17 16:07:47

这篇文章太棒了,mark一下

zhanghao 发表于 2009-8-31 00:49:32

mark

yanggang2880 发表于 2009-9-1 10:40:19

下载下来看了下,楼主进入退出临界区使用了方法一,我在M64上跑运行成功.但我把临界区改成方法三就运行不成功,不知道哪里出了问题。方法一不允许临界区嵌套,但程序要是复杂了很难避免不会出现临界区嵌套。还有我用它驱动12664显示出现问题,我让12864第一行显示,结果第一第二次是在第一行显示,但以后却跑到第8行显示去了。不知道是不是参数传递用到的寄存器遭到了破坏(应该不是堆栈溢出,因为我把堆栈改大了好多次都没有用)。代码还在分析ing.

Ljay207 发表于 2009-9-15 14:05:54

xiexie

yurifeng 发表于 2009-9-24 20:53:51

顶!!!

wchqq 发表于 2009-9-29 08:20:43

万分感激啊

gxy508 发表于 2009-9-29 13:12:37

mark

binly 发表于 2009-10-19 21:01:11

一个最新的uCOS-II的GCCAVR移植版本!!好东西啊!mark!!!

yest 发表于 2009-10-24 10:58:35

mark

kong 发表于 2009-10-25 03:56:39

问下4楼,tiger2023 岁月催人老

我在编译时也出现了你的问题,把机子上的IAR for ARM,IAR for AVR,iccavr,keilc51,编译器全删了,只有VC6.0和winavr

还是编译不过去,

超级郁闷,请教下四楼,是把那个编译器删掉,就可以编译通过了???

ggyyll8683 发表于 2009-10-25 09:31:00

mark

kong 发表于 2009-10-27 21:49:02

楼主,下了你的文件,感谢,任务中不能调用OSTaskDel();函数,查了下,发现OS_CFG.H文件里的#define OS_TASK_DEL_EN   0

定义为 0 ,改为 1 ,保存,重新编译文件,编译器还是提示41: undefined reference to `OSTaskDel'

将整个工程保存,在重新打开,仍然提示41: undefined reference to `OSTaskDel',不明白问题在那里,

望楼主或者路过的大虾看到,指点下,

kong 发表于 2009-10-27 22:48:11

问题已经解决,是AVRStudio编译器编译一次源文件后,即使你修改源文件相关头文件,也不会在下次编译

时重新编译该文件了,

解决办法就是如果修改了源文件调用的头文件,将上次编译产生的所有文件删除,

在重新编译就可以了,

hnzjc 发表于 2009-11-12 20:22:35

一定要留记号啊

bcfai123 发表于 2009-11-15 17:45:56

mark

Yun0 发表于 2009-11-15 18:13:56

收藏,谢谢~

Dream_catcher 发表于 2009-11-23 10:04:16

收藏学习

wchp314 发表于 2009-11-24 20:43:18

mark

281638360 发表于 2009-12-29 19:47:38

回复【楼主位】usbfish
-----------------------------------------------------------------------

热泪盈眶啊!!!!

281638360 发表于 2009-12-29 19:47:57

回复【楼主位】usbfish
-----------------------------------------------------------------------

热泪盈眶啊!!!!

hjjun 发表于 2010-1-5 17:07:32

MARK!

wakou 发表于 2010-1-11 20:54:36

系统从ucos开始

Sendzimir 发表于 2010-3-17 13:21:54

mark

user22901 发表于 2010-3-17 13:42:54

不能不顶哦

zzh241 发表于 2010-4-3 16:36:35

mark

joni 发表于 2010-4-3 19:00:38

mark

hm_huang 发表于 2010-4-12 15:58:44

谢谢分享

moon0213 发表于 2010-5-16 17:19:57

收藏
页: [1] 2
查看完整版本: 一个最新的uCOS-II的GCCAVR移植版本