问题如题所说,我BootLoader程序加载用户程序,用户程序运行的是带ucosII系统的,但是用户程序就只运行了main函数的代码,并没有执行创建的任务。[mw_shl_code=c,true]//main函数
int main(void)
{
int res, i;
u32 total, free;
char *p[100];
FIL fp_test;
u8 testbuff[4]={0};
//system_init(); //系统初始化
SCB->VTOR = FLASH_BASE | 0x10000;//ʨ׃ƫӆ
HAL_Init();
OSInit();
Stm32_Clock_Init(432,25,2,9);//设置时钟,216Mhz
delay_init(216); //初始化延时函数
uart_init(108,115200); //初始化串口波特率为115200
SDRAM_Init(); //初始化SDRAM
MPU_Memory_Protection();
my_mem_init(SRAMIN); //初始化内部内存池
my_mem_init(SRAMEX); //初始化外部内存池
my_mem_init(SRAMTCM); //初始化TCM内存池
exfuns_init(); //FATFS 申请内存
PCM1794_Init();
Init_SRAM();
//EXTIX_Init();
EXTI_Init();
delay_ms(3000);
print_logo();
printf("built: %s %s",__TIME__,__DATE__);
//finsh_system_init();
FTL_Init();
audio_init();
f_mount(fs[2],"2:",1); //挂载NAND FLASH.
res = exf_getfree((u8*)"2:", &total, &free); //得到FLASH剩余容量和总容量
if(res == 0X0D) //文件系统不存在
{
printf("nand format fs:
");
res = f_mkfs("2:", FM_ANY,0, fatbuf, _MAX_SS); //格式化SPI FLASH,1:,盘符;FM_ANY,自动选择文件系统类型,0,自动选择簇大小
if(res == 0)
{
f_setlabel((const TCHAR *) "2:NAND"); //设置Flash磁盘的名字为:ALIENTEK
res = exf_getfree((u8*)"2:", &total, &free); //重新获取容量
}
}
printf("NAND Size:%dMB",(nand_dev.block_totalnum/1024)*(nand_dev.page_mainsize/1024)*nand_dev.block_pagenum);
printf("
Mount Flash to fs:2
");
printf("Flash Total Size: %d MB.
", total >> 10);
printf("Flash Free Size: %d MB.
", free >> 10);
audiodev.status = 0x83;
// shell_ls(0,NULL);
#if 0
res = f_open(&fp_test,"2:/MUSIC/20180824_112646.wav",FA_OPEN_EXISTING|FA_READ);
if(res)
{
printf("open 2:/MUSIC/20180824_112646.wav error res=%d
",res);
}
res = f_read(&fp_test,testbuff,4,&br);
if(res)
{
printf("read error res=%d
");
}
else
{
printf("0x%02x 0x%02x 0x%02x 0x%02x
",testbuff[0],testbuff[1],testbuff[2],testbuff[3]);
}
f_close(&fp_test);
while(1)
{
//20180818_192113.mp3
//mp3_play_song((u8*)"2:/MUSIC/tts_mp3.mp3");
//mp3_play_song((u8*)"2:/MUSIC/First_Dream.mp3");
wav_play_song((u8*)"2:/MUSIC/20180824_112646.wav");
delay_ms(2000);
}
#endif
#if 1
//OSInit();
OSTaskCreateExt((void(*)(void*) )start_task, //任务函数
(void* )0, //传递给任务函数的参数
(OS_STK* )&START_TASK_STK[START_STK_SIZE-1],//任务堆栈栈顶
(INT8U )START_TASK_PRIO, //任务优先级
(INT16U )START_TASK_PRIO, //任务ID,这里设置为和优先级一样
(OS_STK* )&START_TASK_STK[0], //任务堆栈栈底
(INT32U )START_STK_SIZE, //任务堆栈大小
(void* )0, //用户补充的存储区
(INT16U )OS_TASK_OPT_STK_CHK|OS_TASK_OPT_STK_CLR|OS_TASK_OPT_SAVE_FP);//任务选项,为了保险起见,所有任务都保存浮点寄存器的值
OSStart();
#endif
}[/mw_shl_code]
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
一周热门 更多>