/*************************************************************** ** 作 者: 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 } }
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 } }
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; }
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; }