求一个基于UCOSII流水灯的程序代码,结合STM32完成,麻烦请在KEIL UVISION4上建立起工程

求一个基于UCOSII流水灯的程序代码,结合STM32完成,麻烦请在KEIL UVISION4上建立起工程,第1张

只有一个任务为什么还要使用 *** 作系统呢!我没有流水灯的程序。我给你提供一个LED闪烁的程序。

程序里面建立三个任务,开始任务,LED0任务和LED1任务。LED0每秒钟亮80毫秒,LED1亮300毫秒,灭300毫秒,以此循环。

#include <stm32f10x.h>

#include "sys.h"

#include "usart.h"

#include "delay.h"

#include "led.h"

#include "includes.h"

#define START_TASK_PRIO 10

#define START_STK_SIZE 64

OS_STK START_TASK_STK[START_STK_SIZE]

void start_task(void *pdata)

//LED0ÈÎÎñ

#define LED0_TASK_PRIO 7

#define LED0_STK_SIZE 64

OS_STK LED0_TASK_STK[LED0_STK_SIZE]

void led0_task(void *pdata)

#define LED1_TASK_PRIO 6

#define LED1_STK_SIZE 64

OS_STK LED1_TASK_STK[LED1_STK_SIZE]

void led1_task(void *pdata)

int main(void)

{

Stm32_Clock_Init(9)

delay_init(72)

LED_Init()

LED_Init()

OSInit()

OSTaskCreate(start_task,(void *)0,(OS_STK *)&START_TASK_STK[START_STK_SIZE-1],START_TASK_PRIO )

OSStart()

}

void start_task(void *pdata)

{

OS_CPU_SR cpu_sr=0

pdata = pdata

OS_ENTER_CRITICAL()

OSTaskCreate(led0_task,(void *)0,(OS_STK*)&LED0_TASK_STK[LED0_STK_SIZE-1],LED0_TASK_PRIO)

OSTaskCreate(led1_task,(void *)0,(OS_STK*)&LED1_TASK_STK[LED1_STK_SIZE-1],LED1_TASK_PRIO)

OSTaskSuspend(START_TASK_PRIO)

OS_EXIT_CRITICAL()

}

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)

}

}

具体详解请参考开源电子网。

1.这个就不知道了,要你自己去调试,体会之间的区别。

2.PROC表示这是一段子程序,FAR属性表示,它可以被其他代码段中的其他程序用如下方式调用。

CALL FAR 子程序名称

内部 *** 作为,程序下一条指令的段地址、偏移地址入栈(即CS,IP入栈),CS、IP指向子程序的第一条指令的位置。

此外,有的子程序属性为NEAR,表示它只能被同一代码段中的其他子程序调用,调用方式为

CALL NEAR 子程序名称

这里NEAR可省,内部 *** 作为,CS不变,仅偏移地址入栈(IP入栈),IP指向子程序的第一条指令的位置。

3.根据以上的解释,这里的FAR是表示远调用,即被调用子程序跟调用子程序不字同一个代码段。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/11564801.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-17
下一篇 2023-05-17

发表评论

登录后才能评论

评论列表(0条)

保存