/***************************************************************
** 作   者: Songyimiao
** 官    网:http://www.miaowlabs.com
** 淘    宝:http://miaowlabs.taobao.com
** 日   期: 2015年11月29日
** 函数名称: main()
** 功能描述: 主函数            
** 输   入:   
** 输   出:   
** 备    注: 
********************喵呜实验室版权所有**************************
***************************************************************/
void main()
{
	DisableInterrupts;//禁止总中断

	DriversInit();	  //MCU底层驱动初始化
	MPU6050Init();	  //MPU6050配置初始化
	CarStandInit();	  //应用程序变量初始化
	UltraInit();	  //超声波配置初始化
	Delaynms(50);	  //延时50ms 
	ON_LED0;		  //指示灯亮起,表示初始化完毕
	
	EnableInterrupts; //使能总中断	 

	while(1)
	{ 
		STC_ISP();
		Delaynms(50);	        //延时50ms 
		if(g_ucUart2Flag>=1)
		{
			BluetoothControl();	//蓝牙遥控函数
			g_ucUart2Flag = 0;
		}
		BatteryChecker();		//电池电量检测(电量不足时,亮红灯)
		if(EchoFlag)			//判断是否测距完成
		{ 
			g_ucUltraDis=UltraDis();//读取超声波测距结果
		}

#if DEBUG_UART  //调试启用 预编译命令 
//若要观察波形进行调试,需将DEBUG_UART设置成1,该版本不需要注释蓝牙控制函数
	
   		OutData[0] = g_fCarAngle;
   		OutData[1] = g_fGyroAngleSpeed;
   		OutData[2] = g_fLeftMotorOut ;
   		OutData[3] = g_fAngleControlOut;
   		OutPut_Data();		
		 	  
#endif	 		
					
	}
}
Exemple #2
0
void MainTask(void * pvParameters)
{	
//	RCC_ClocksTypeDef RCC_Clocks;
		
	// Initial hardware
	DriversInit();
	
		
	BuzzerTick(1000);
		
//	RCC_GetClocksFreq(&RCC_Clocks);
	
		
	CreateFEPProcess();
	//
//	LED_Run_Task_Create();
	
	for( ;; )
  	{
    	vTaskDelete(NULL); // exit by itself
  	}
}
Exemple #3
0
void
StartOS (AppModeType mode)
{
  /* Set application mode */
  sdvos_appmode = mode;

  /*
   * Initialize the MCU we are using. This involves low
   * level initialization which usually at least include
   * a stack switch after disabling interrupts globally for
   * initialization. It is OK because StartOS will never
   * return and we already processed the parameter.
   * Procedures after this call will be carried out in
   * SDVOS kernel context.
   *
   * McuInit can either be a C function, assembly function
   * or a macro on different platforms.
   */
  McuInit ();

  /*
   * Board specific initialization. Might include clock
   * configuration, flash setup, etc.
   */
  BoardInit ();

  /* Initialize Interrupt Handling */
  InterruptInit ();

  /* Initialize all the drivers configured */
  DriversInit ();

  /* Activate auto start tasks */
  TaskAutoStart (sdvos_appmode);

  /* Initialize Alarm/Counter */
  AlarmInit ();

#ifdef USE_SCHEDTBL
  /*
   * Initialize schedule table. This is mostly schedule
   * table auto start. And it has to be done after task
   * and alarm auto start. [SWS_Os_00510]
   */
  ScheduleTableInit ();
#endif

  /*
   * StartupHook is called by the OS at the end of the
   * initialization and before the scheduler is running.
   */
  STARTUPHOOK ();

#ifdef DEBUG_SDVOS_VERBOSE
  IntegrityCheck ();
#endif

#ifdef PRINT_BANNER
  PrintBanner ();
#endif

  DEBUG_PRINTF ("Starting SDVOS in mode %d...\n", sdvos_appmode);

  /* Switch to the first user task */
  JumpNext ();

  /* Should never reach here */
  return;
}
Exemple #4
0
int kmain(UInt32 initial_stack, MultibootHeader* mboot, UInt32 mboot_magic) {
	initial_esp = initial_stack;
	
	CLI_Init();
	Cls();
	
	UInt32 initrd_end = *(UInt32*)(mboot->mods_addr+4);
	
	placement_address = (Pointer) initrd_end;
	
	// Set up our new stack here.
	//UInt32 stack = (UInt32) kmalloc_a(8192, TRUE);
	MultibootHeader* mboot_hdr = mboot; //kmalloc(sizeof(MultibootHeader));
	//memcpy(mboot_hdr, mboot, sizeof(MultibootHeader));
	
	kprintf("Starting init...\n");

	//new_start(stack, mboot_hdr);
	GDT_Init();
	IDT_Init();
	ISR_Init();
	asm volatile("sti");
	
	kprintf("Basics\t\t\t[OK]\n");

	PIT_Init(PIT_MSTIME);

	kprintf("PIT\t\t\t[OK]\n");

	init_kheap();
	InitPaging((mboot_hdr->mem_lower+mboot_hdr->mem_upper)&~3);
	InitKernelHeap();

	kprintf("Heap\t\t\t[OK]\n");

	VFS_Init();
	DevFS_Init();
	
	kprintf("VFS\t\t\t[OK]\n");

	DriversInit();

	kprintf("Drivers\t\t\t[OK]\n");

	Screen_Init();

	FloppyInit();

	checkAllBuses();
	DumpPCIDeviceData();
	kprintf("PCI\t\t\t[OK]\n");

	/*kprintf("Keyboard Init... ");
	KB_Init(0);
	kprintf("[ok]\n");*/

	FAT12_Init(FAT12_GetContext(FloppyGetDevice()), "/", "sys");
	
	InitTasking();

	KernelSymbolsLoad();

	//Cls();

	kprintf("kOS v0.6.13\n");

	VFS_Node* rd = GetNodeFromFile(GetFileFromPath("/sys"));
	kprintf("rd = %x\n", rd);
	
	ArrayList* list = ListFiles(rd);
	ALIterator* itr = ALGetItr(list);

	while(ALItrHasNext(itr)) {
		VFS_Node* node = ALItrNext(itr);
		kprintf("file: %s\n", node->name);
	}

	ALFreeItr(itr);
	
	ALFreeList(list);

	//kprintf("kprintf symbol = %x\n", getKernelSymbol("kprintf"));
	File* initScript = GetFileFromPath("/sys/init.script");
	FileSeek(0, initScript); // Due to these being global objects, we have to do such ugly things as this.

	#ifdef INIT_DEBUG
	kprintf("initScript=%x\n", initScript);
	#endif

	char* lineBuf = kalloc(256);
	int doBreak = 0;
	while(!doBreak) {
		if(fgetline(initScript, lineBuf, 256, '\n')==-1) {
			if(strlen(lineBuf) > 0) {
				doBreak = 1;
			} else {
				break; // We've processed everything that needs to be processed.
			}
		}

		// Now parse it.
		char* tok = strtok(lineBuf, " ");
		kprintf("%s, %x\n", tok,tok);
		if(!strcmp(tok, "load_driver")) {
			#ifdef INIT_DEBUG
			kprintf("load_driver ");
			#endif

			tok = strtok(NULL, " ");

			// Load the driver specified.
			File* drv = GetFileFromPath(tok);
			if(drv != NULL) {
				int drvLength = FileSeek(SEEK_EOF, drv);
				FileSeek(0, drv);
				void* drvBuf = kalloc(drvLength);

				#ifdef INIT_DEBUG
				kprintf("%s\n", GetNodeFromFile(drv)->name);
				#endif

				ReadFile(drvBuf, drvLength, drv);
				ELF* elf = LoadKernelDriver(drvBuf);

				#ifdef INIT_DEBUG
				kprintf("elf->start=%x\n", elf->start);
				#endif

				if(elf->error == 0) {
					void (*driverInit)() = (void (*)()) elf->start;
					driverInit();
				}

				kfree(drvBuf);
				drvBuf = NULL;

				CloseFile(drv);
			}
		}
	}

	CloseFile(initScript);
	kfree(lineBuf);

	kprintf("Kernel init done...\n");

	File* elf = GetFileFromPath("/sys/helloworld");
	
	FileSeek(SEEK_EOF, elf);
	int length = FileTell(elf);
	FileSeek(0, elf);
	UInt8* elfBuf = kalloc(length);
	ReadFile(elfBuf, length, elf);
	ELF* elfExe = Parse_ELF(elfBuf);
	CreateTaskFromELF(elfExe);

	// Kernel main logic loop
	while(1) {
		asm volatile("hlt");
	}

	return 0;
}