用M0516玩了一下多任务
http://v.youku.com/v_show/id_XNTgwNjA2MTMy.html新唐M0516单片机做的一个多任务调度器,M0516单片机从2.4G上读取GPS信号值及3轴重力传感器的三轴值显示在LCD上!
int main(void)
{
SYS_Init();
SPI1_Init();
LCD_Init9320();
GUI_Initialize();
GUI_FillSCR(WHITE);
/*---------------------------------------------------------------------------------------------------------*/
/* Init UART */
/*---------------------------------------------------------------------------------------------------------*/
/* Reset IP */
// SYS->IPRSTC2 |=SYS_IPRSTC2_UART0_RST_Msk;
//SYS->IPRSTC2 &= ~SYS_IPRSTC2_UART0_RST_Msk;
/* Configure UART0 and set UART0 Baudrate */
// UART0->BAUD = UART_BAUD_MODE2 | UART_BAUD_DIV_MODE2(SystemCoreClock, 115200);
//_UART_SET_DATA_FORMAT(UART0, UART_WORD_LEN_8 | UART_PARITY_NONE | UART_STOP_BIT_1);
//printf("\n\nCPU @ %dHz\n", SystemCoreClock);
if (SysTick_Config (SystemCoreClock/1000 *10)) //10ms tick
{ /* Setup SysTick for 10 msec interrupts */
; /* Handle Error */
while (1);
}
OS_MsgInt(); //初始化消息指针
OSSemCreat(LCD, 1); //lcd可用
OSSemCreat(GPMRC, 1); //数据区可用
OSSemCreat(GPGSV, 1); //数据区可用
OSSemCreat(G_SENSOR, 1); //数据区可用
//任务1,把从2.4g模块收到的GPS GPMRC数据送到LCD显示
Ex_OSTaskCreate(Task0, (uint32_t *)&TASK0_STK, (uint32_t *)&TASK0_STK, Task0_Prio);
//任务2,统计2.4G中断次数
Ex_OSTaskCreate(Task1, (uint32_t *)&TASK1_STK, (uint32_t *)&TASK1_STK, Task1_Prio);
//任务3,在LCD上显示CPU利用率
Ex_OSTaskCreate(Task2, (uint32_t *)&TASK2_STK, (uint32_t *)&TASK2_STK, Task2_Prio);
//任务4,在LCD上显示系统运行时间
Ex_OSTaskCreate(Task3, (uint32_t *)&TASK3_STK, (uint32_t *)&TASK3_STK, Task3_Prio);
//任务5,在LCD的一个区域上流动显示"- \ | * / | _"
Ex_OSTaskCreate(Task4, (uint32_t *)&TASK4_STK, (uint32_t *)&TASK4_STK, Task4_Prio);
//任务6,把从2.4g模块收到的GPS GPGSV数据送到LCD显示
Ex_OSTaskCreate(Task5, (uint32_t *)&TASK5_STK, (uint32_t *)&TASK5_STK, Task5_Prio);
//任务7,把从2.4g模块收到的3轴重力传感器分析数据送到LCD显示
Ex_OSTaskCreate(Task6, (uint32_t *)&TASK6_STK, (uint32_t *)&TASK6_STK, Task6_Prio);
//任务8,空闲任务,主要是统计CPU的利用率并送给任务3
//任务9, NRF24L01中断接收任务,主要是负责把2.4G收到的数据读出来
/*
OSTaskCreate(Task0, (uint32_t *)&TASK0_STK, Task0_Prio);
OSTaskCreate(Task1, (uint32_t *)&TASK1_STK, Task1_Prio);
OSTaskCreate(Task2, (uint32_t *)&TASK2_STK, Task2_Prio);
OSTaskCreate(Task3, (uint32_t *)&TASK3_STK, Task3_Prio);
*/
OSStart();
return 0;
}
哎,用了5年的RTOS至今不知道具体原理,特别是上下文切换的撸过。。。。。一直没空。 这个是精简OS吗 是的,主要是为了小RAM的单片机跑OS 用的真溜。 这是m0吗 程序写的不错,视频拍的要命,晃动成那样也不容易 下载看看
页:
[1]