程序里面建立三个任务,开始任务,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是表示远调用,即被调用子程序跟调用子程序不字同一个代码段。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)