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

📄 main.c

📁 ucOS下AD实验程序,可以任意更改AD寄存器的地址
💻 C
字号:
#include"uhal.h"
#include"myuart.h"
#include"..\UCOS-II\includes.h"               /* uC/OS interface */
#include <string.h>
#include"..\startup\drv\MotorCtrl.h"

#pragma import(__use_no_semihosting_swi)  // ensure no functions that use semihosting

///******************任务定义***************///

OS_STK SYS_Task_Stack[STACKSIZE]= {0, }; //system task刷新任务堆栈
#define SYS_Task_Prio				1
void SYS_Task(void *Id);

OS_STK Main_Stack[STACKSIZE*8]={0, };   	//Main_Task堆栈
void Main_Task(void *Id);             		//Main_Task
#define Main_Task_Prio     12

OS_STK Motor_Stack[STACKSIZE]={0, };   	//Motor_Stack 堆栈
void Motor_Task(void *Id);             		//Motor_Task
#define Motor_Task_Prio     10

OS_STK AD_Stack[STACKSIZE]={0, };   		//AD_Stack 堆栈
void AD_Task(void *Id);             			//AD_Task
#define AD_Task_Prio     9
int ADData[4];

int main(void)
{
	ARMTargetInit();	//开发版初始化
	OSInit();               // needed by uC/OS-II //	
	Uart_Printf("uart initialization is OK\n");
	Uart_Printf("Create task on uCOS-II...\n");
	OSTaskCreate(SYS_Task,  (void *)0,  (OS_STK *)&SYS_Task_Stack[STACKSIZE-1],  SYS_Task_Prio);
	OSTaskCreate(Main_Task,  (void *)0,  (OS_STK *)&Main_Stack[STACKSIZE*8-1],  Main_Task_Prio);// 1
	OSTaskCreate(AD_Task,  (void *)0,  (OS_STK *)&AD_Stack[STACKSIZE-1],  AD_Task_Prio);// 1
	OSTaskCreate(Motor_Task,  (void *)0,  (OS_STK *)&Motor_Stack[STACKSIZE-1],  Motor_Task_Prio);// 1

	Uart_Printf("Starting uCOS-II...\n");
	OSStart();              // start the game //
}

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void Main_Task(void *Id)             //Main_Test_Task
{
	for(;;){
//		Uart_Printf("test %f!\n", f);
//		Uart_Printf("task is running!\n");
		OSTimeDly(100);
	}
}

void AD_Task(void *Id)            		//AD_Task
{
	int i;
	float d;

	init_ADdevice();
  	for(;;){
		for(i=0; i<=3; i++){			//采样0~3路A/D值
			ADData[i] = GetADresult(i) ;
			d=ADData[i]*2.5/1023; // 数据 采集,处理
			Uart_Printf("a%d=%f\t",i,d);
		}	
		Uart_Printf("\r");
		OSTimeDly(100) ;
	}
}

void Motor_Task(void *Id)            		//Motor_Task
{
  	for(;;){		
		SetPWM((ADData[0]-512)*MOTOR_CONT/1024);
		OSTimeDly(100) ;
	}	
}

void SYS_Task(void *Id)
{
	OSRunning=TRUE;          //使能多任务切换

	uHALr_InstallSystemTimer();

	Uart_Printf("start system task.\n");

	for (;;)
	{
//		Uart_Printf("start system task.\n");
		OSTimeDly(10000);
	}
}

⌨️ 快捷键说明

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