[国民技术MCU] dmr库nonos时间轮询任务组件

发布于:2022-11-29 ⋅ 阅读:(231) ⋅ 点赞:(0)

一、背景

        某些任务想要固定时间进行重复的查询,需要使用定时器来辅助,所以做成了类似RTOS的查询效果,但没有优先级中断抢占,需要任务跑完才能轮到下一个就绪的任务,所以不能随意的使用delay,Task代码也没有vTaskDelay相对/绝对的延迟来使用。

        但可以替代在裸机下,使用cnt计数器轮询的情况,可以在基本相同的时间间隔下轮询某一个任务,若能分配好时间,则每个任务可以做到互不干扰。

        dmr库在gitee上已经开源了

        名字为 : dmr-for-n32

        链接 : dmr-for-n32: 针对国民技术的MCU进行标准库封装目前仅对N32G430进行抽象封装

二、搭建工程

        随意在example文件夹下找一份示例工程

        我使用example\USART\printf工程,将工程复制到桌面

        首先先编译一次

        然后在工程目录上创建文件夹

        将dmr库中的components里面的dmr_nonos文件复制到printf工程中

 包含h路径

包含C文件

 三、添加代码

#include <stdio.h>
#include "main.h"

#include "dmr_delay.h"
#include "dmr_usart.h"
#include "dmr_nonos.h"


#define TASK_LOOP_TIME 1000 //ms


void SysTick_Handler(void)
{
	dmr_nonosAddCnt();
}


void printfTask(void* arg)
{
	printf("Hello World\r\n");
}

int main(void)
{
	dmr_usartHandle usartHandle = {0};
	dmr_nonosTaskHandle printfTaskHandle;
	
	dmr_delayInit();
	dmr_usartInit(&usartHandle,DMR_USART1_TX_PA9_RX_PA10,DMR_USART_DEFAULT_CONFIG(115200));
	
	dmr_nonosStaticCreateTask(&printfTaskHandle,TASK_LOOP_TIME,printfTask,NULL);

    while (1)
    {
		dmr_nonosHandler();
    }
}

编译之后,会提示SysTick_Handler函数重复,原因是n32g430_it.c里面默认有一个SysTick_Handler,所以屏蔽掉就行了。

 

之后再编译就通过了。

四、效果

能用


网站公告

今日签到

点亮在社区的每一天
去签到