Lab 6:uC/OS II

 

目标:

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

具体步骤:

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

一、修改usrApp.c

原来的代码中已经有usrApp1和usrApp2两个函数输出运行显示,只要在里面加上控制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汇编文件考到当前目录。

二 、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

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

三、启动

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

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

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

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

 

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

转载于:https://my.oschina.net/daijy/blog/134752

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值