Lab 6:uC/OS II

 

目标:

移植uC/OS IIRPi上,实现两个任务的调度。这两个任务能轮流点亮LED,并通过串口发送消息表明自己正在运行

具体步骤:

助教给的代码已经很完整了,只要对目录里的usrApp.c代码改一改就行了。

一、修改usrApp.c

原来的代码中已经有usrApp1usrApp2两个函数输出运行显示,只要在里面加上控制led亮灭的语句就行了。参考Lab5中的blinker.c代码。具体代码如下:

#include "uart.h"

#include "ucos/includes.h"

extern void PUT32 ( unsigned int, unsigned int );

#define GPSET0  0x2020001C

#define GPCLR0  0x20200028

void userApp2(void * args)

{

while(1)

{

uart_string("LED OFF");

PUT32(GPSET0,1<<16);

OSTimeDly(1000);

}

}

void userApp1(void * args)

{

while(1)

{

uart_string("LED ON");

        PUT32(GPCLR0,1<<16);

OSTimeDly(500);

}

}

因为extern void PUT32 ( unsigned int, unsigned int );所以需要把lab5中的start.s汇编文件考到当前目录。

Lab 6:uC/OS II

二 、make

安装yagarto

到官网http://www.yagarto.de/#download下载YAGARTO GNU ARM toolchain (37 MB)YAGARTO Tools(2 MB)

安装后就可以make了。

修改makefile

编译前需要重新配置makefile中的 INCLUDEPATH ?= "C:/workspace/ucos_raspberryPi/h" 为实际工程的"h"文件夹所在的位置

还有makefile最后一行多了一个点

ARMGNU ?= arm-none-eabi

INCLUDEPATH ?= "E:\2012-2013年春夏学期\嵌入式\ucos_raspberryPi\h"

COPS = -Wall -O2 -nostdlib -nostartfiles -ffreestanding -mcpu=arm1176jzf-s -I $(INCLUDEPATH)

gcc : kernel.img

OBJS = build/startup.o 

OBJS += build/uart.o

OBJS += build/timer.o

OBJS += build/interrupts.o

OBJS += build/OS_Cpu_a.o

OBJS += build/OS_Cpu_c.o

OBJS += build/ucos_ii.o

OBJS += build/main.o

OBJS += build/userApp.o

OBJS += lib/libc.a

OBJS += lib/libgcc.a 

clean :

rm -f build/*.o

rm -f *.bin

rm -f *.hex

rm -f *.elf

rm -f *.list

rm -f *.img

rm -f build/*.bc

build/%.o : port/%.s

$(ARMGNU)-gcc $(COPS) -D__ASSEMBLY__ -c -o $@ $<

build/%.o : init/%.s

$(ARMGNU)-gcc $(COPS) -D__ASSEMBLY__ -c -o $@ $<

build/%.o : port/%.c

$(ARMGNU)-gcc $(COPS)  -c -o $@ $<

build/%.o : bsp/%.c

$(ARMGNU)-gcc $(COPS)  -c -o $@ $<

build/%.o : usrApp/%.c

$(ARMGNU)-gcc $(COPS)  -c -o $@ $<

build/ucos_ii.o : ucos/ucos_ii.c

$(ARMGNU)-gcc $(COPS) ucos/ucos_ii.c -c -o build/ucos_ii.o

kernel.img : raspberrypi.ld $(OBJS)

$(ARMGNU)-ld $(OBJS) -T raspberrypi.ld -o ucos_bcm2835.elf 

$(ARMGNU)-objdump -D ucos_bcm2835.elf > ucos_bcm2835.list

$(ARMGNU)-objcopy ucos_bcm2835.elf -O ihex ucos_bcm2835.hex

$(ARMGNU)-objcopy ucos_bcm2835.elf -O binary ucos_bcm2835.bin

$(ARMGNU)-objcopy ucos_bcm2835.elf -O binary kernel.img

之后启动cmd ucos的所在目录make

Lab 6:uC/OS II

ucos的当前文件夹里会生成50kkernel.img

三、启动

把生成的kernel.img改名为ucos.img,把他拷贝到树莓派sd卡的boot目录下.

修改启动配置文件config.txt 加上一句kernel=ucos.img(有的话改一下)

启动树莓派。发现树莓派的ACTled灯会间断的亮灭。

Lab 6:uC/OS II

开启putty连接树莓派串口得到两个线程的输出:

Lab 6:uC/OS II

 

 浙江大学嵌入式课程非荣誉出品

你可能感兴趣的:(树莓派,led,ucos)