⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.c

📁 uCosII是一个小型的多任务调度内核
💻 C
字号:
#include <assert.h>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>

#include "drv_extr.h"
#include "kal.h"

KL_thread_t task;
KL_thread_t task2;
KL_timer_t timer;
KL_mailbox_t mailbox;
KL_queue_t queue;
KL_eventgrp_t evt;

#define TASK_STACK_SIZE 1024
//u8_t task_stack[TASK_STACK_SIZE];
//u8_t task2_stack[TASK_STACK_SIZE];
u32_t queue_stack[8];

typedef struct{
	u32_t id;
	u32_t para;
}TMSG;


void task_1(void *argv, u32_t argc);
void task_2(void *argv, u32_t argc);
void timer_func(u32_t id);
void uart1_LISR(int vector);


void OSMain(void)
{
	Status s;
	void *p;

	p = KL_malloc(TASK_STACK_SIZE);
	assert(p != NULL);

	s = KL_CreateThread(&task, "task1", task_1, NULL, 0, p, TASK_STACK_SIZE, 10);
	assert(s == KL_SUCCESS);

	s = KL_CreateTimer(&timer, "timer1", timer_func, 0, 100, 500, KL_TIMER_PERIODLY);
	assert(s == KL_SUCCESS);

	s = KL_CreateMailbox(&mailbox, "mailbox");
	assert(s == KL_SUCCESS);

	p = KL_calloc(8, sizeof(u32_t));
	assert(p != NULL);
	s = KL_CreateQueue(&queue, "queue", p, 8, 2);
	assert(s == KL_SUCCESS);

	s = KL_CreatEventGroup(&evt, "event");
	assert(s == KL_SUCCESS);

	s= KL_RegisterISR(IRQ_VECTOR_UART1, uart1_LISR);

	uart_init();
	lcd_init();

}

void task_1(void *argv, u32_t argc)
{
	Status s;
	char msg;
	void *p;
	KL_flags flag;

	printf("==============================\n\r");
//	s = KL_StartTimer(&timer);
//	assert(s == KL_SUCCESS);

/*
	p = KL_malloc(TASK_STACK_SIZE);
	assert(p != NULL);
	s = KL_CreateThread(&task2, "task1", task_2, NULL, 0, p, TASK_STACK_SIZE, 8);
	assert(s == KL_SUCCESS);
*/

	while(1){
#if 0		
		s = KL_PendEventGroup(&evt, 0x0111, KL_FLAG_WAIT_ALL_CONSUME, &flag, KL_SUSPEND_FOREVER);
		assert(s == KL_SUCCESS);
		printf("recv event[0x%08x].\n", flag);
#endif

#if 1
		s = KL_ReceiveMail(&mailbox, (void **)(&msg), KL_SUSPEND_FOREVER);
		assert(s == KL_SUCCESS);
		if ((msg == 0x0d)||(msg == 0x0a)){
			uart1_send_char("\n");
			uart1_send_char("\r");
		}
		else
			uart1_send_char(&msg);
//		printf("msg.id = %d\n", msg.id);
//		printf("msg.para = %d\n", msg.para);
#endif


/*
		OSTimeDly(500*5);
		p = (void *)OS_malloc(0x80000);	
		if (p){
			memset(p,0x11,0x80000);
			printf("%03d: 0x%08x\n", i++, (unsigned int)p);
		}	
		else{
			printf("%d: no memory!\n", i++);
			break;
		}
*/		
	}
}


void task_2(void *argv, u32_t argc)
{
	Status s;
	TMSG msg;
	int i = 2007;
	KL_flags f = 1;

	while(1){
#if 0
		msg.id = i++;
		msg.para = KL_GetSysClock();
		s = KL_SendMessage(&queue, &msg, 0);
		assert(s == KL_SUCCESS);
		msg.id = i++;
		msg.para = KL_GetSysClock()+10;
		s = KL_SendMessage(&queue, &msg, 0);
		assert(s == KL_SUCCESS);
		msg.id = i++;
		msg.para = KL_GetSysClock()+10;
		s = KL_SendMessage(&queue, &msg, 0);
		assert(s == KL_SUCCESS);
#endif
#if 0			
		s = KL_PostEventGroup(&evt, f, KL_FLAG_SET);
		assert(s == KL_SUCCESS);

		printf("send event[0x%08x].\n", f);
		
		KL_Sleep(500*2);

		f <<= 1;
#endif
	}
}

void timer_func(u32_t id)
{
	Status s;
	u32_t msg = KL_GetSysClock();
	s = KL_SendMail(&mailbox, (void *)msg, KL_SUSPEND_NEVER);
	assert(s == KL_SUCCESS);
}


⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -