自制国产精简内核 vnRTOS 第 3 节 让内核跑起来

自制国产实时内核——vnRTOS 所有文档: vnRTOS 文档

 

首先我们看下如何使用:

main函数部分:

	core_init();
	
	led1_id = task_create(led1_task, (void *)0, 10 * TASK_STACK_40_BYTE, USER_PRIO_BASE, "led1");
	led2_id = task_create(led2_task, (void *)0, 10 * TASK_STACK_40_BYTE, USER_PRIO_BASE, "led2");	

	
	core_start();

使用很简单,首先调用 core_init ,它负责内核的初始化工作,主要是创建 几个系统级的任务,同时初始化好内存分配等功能

然后我们使用 task_create 来创建任务

函数的参数说明:

/***************************************************************
功能:	创建一个任务
参数:	void (*task_fun)(void *pd)	任务的代码
		void *pdata				传递给任务的参数
		INT32U size				任务的栈的大小,单位是 TASK_STACK_SIZE 字节
								具体任务栈的大小,要考虑具体任务,而且
								该大小没有考虑到栈的头部也需要存储信息
								对于 Cortex-M3 内核而言,头部还要保持 
								16 个寄存器的数据 ,也就是 16*4 = 64字节的头部
								那么 size 的最小值
		INT8U	prio			任务优先级
		INT32U	runtime			任务的时间片
		INT8U* name				任务的名字
返回值	0				创建失败
		其他值			任务的 ID 号
****************************************************************/
INT32U task_create(void (*task_fun)(void *pd), void *pdata, INT32U size, INT8U prio, INT8U* name)

关于优先级的,一般建议使用  USER_PRIO_BASE 的优先级,也就是 10 。数值越 小,优先级越 高。

接下来我们就可以愉快的写我们的的任务了:


void led1_task(void *p)
{
	volatile INT32U i;

	LED_Init();

	for(;;)
	{	
		//task_change_prio(TASK_SELF, 25);
		for(i = 0; i < 2; i++)
		{
			GPIO_WriteBit(GPIOE, GPIO_Pin_3, Bit_SET);
			task_sleep(100);	//delay(1000); //task_sleep(100);
			GPIO_WriteBit(GPIOE, GPIO_Pin_3, Bit_RESET);

			task_sleep(200);	//task_sleep(100);
		}
	}
}



void led2_task(void *p)
{
	int i;
	LED_Init();
	
	for(;;)
	{
		//task_change_prio(TASK_SELF, 20);
		for(i = 0; i < 2; i++)
		{
			GPIO_WriteBit(GPIOE, GPIO_Pin_4, Bit_SET);
			task_sleep(300);	//task_sleep(100);	//
			GPIO_WriteBit(GPIOE, GPIO_Pin_4, Bit_RESET);
			task_sleep(200);	//delay(1000); //
		}
	}
}

事实上它就是两个 led 闪烁的功能。

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值