Esempio n. 1
0
File: main.c Progetto: hank-fan/vsf
void main(void)
{
	struct vsf_module_t *module;
	struct vsf_module_info_t *minfo =
						(struct vsf_module_info_t *)APPCFG_MODULES_ADDR;
	int32_t pagesize;

	vsf_enter_critical();
	vsfhal_core_init(NULL);
	vsfhal_flash_capacity(0, (uint32_t*)&pagesize, NULL);
	pagesize = msb(pagesize);
	vsf_bufmgr_init(app.bufmgr_buffer, sizeof(app.bufmgr_buffer));

	// register modules
	while (minfo->entry != 0xFFFFFFFF)
	{
		module = vsf_bufmgr_malloc(sizeof(struct vsf_module_t));
		if (NULL == module)
		{
			break;
		}

		module->flash = minfo;
		minfo = (struct vsf_module_info_t *)((uint8_t *)minfo +\
			((minfo->size + (1 << pagesize) - 1) & ~((1 << pagesize) - 1)));
		vsf_module_register(module);
	}

	vsf_module_load("vsf.os", true);
	// vsfos module SHALL never return;
}
Esempio n. 2
0
File: main.c Progetto: kevin988/vsf
int main(void)
{
	uint32_t app_main_ptr;
	
	vsf_leave_critical();
	
	// system initialize
	vsf_bufmgr_init(app.bufmgr_buffer, sizeof(app.bufmgr_buffer));
	core_interfaces.core.init(NULL);
	core_interfaces.tickclk.init();
	core_interfaces.tickclk.start();
	vsftimer_init();
	core_interfaces.tickclk.set_callback(app_tickclk_callback_int, NULL);
	
	if (app.hwcfg.key.port != IFS_DUMMY_PORT)
	{
		core_interfaces.gpio.init(app.hwcfg.key.port);
		core_interfaces.gpio.config_pin(app.hwcfg.key.port, app.hwcfg.key.port,
										GPIO_INPU);
	}
	if ((IFS_DUMMY_PORT == app.hwcfg.key.port) ||
		core_interfaces.gpio.get(app.hwcfg.key.port, 1 << app.hwcfg.key.pin))
	{
		// key release
		// load and call application
		app_main_ptr = *(uint32_t *)APP_MAIN_ADDR;
		if (app_main_ptr < 128 * 1024)
		{
			app_main_ptr += APP_MAIN_ADDR;
			((int (*)(struct app_hwcfg_t *hwcfg))app_main_ptr)(&app.hwcfg);
		}
		else
		{
			goto bootlaoder_init;
		}
	}
	else
	{
		// run bootloader
	bootlaoder_init:
		
	}
	
	while (1)
	{
		vsfsm_poll();
		
		vsf_enter_critical();
		if (!vsfsm_get_event_pending())
		{
			// sleep, will also enable interrupt
			core_interfaces.core.sleep(SLEEP_WFI);
		}
		else
		{
			vsf_leave_critical();
		}
	}
}