嵌入式学习小组
直播中

刘秀兰

7年用户 196经验值
私信 关注

SDIO中断导致uC/OS-II运行卡死

STM32f103zet6中已经成功移植过了uC/OS-II 3.03 和uCGUI,在加入SDIO中断后系统不能运行,指示三个任务的流水灯最后只亮了一个,SDIO中断按如下写的:[C] 纯文本查看 复制代码
void SDIO_IRQHandler(void){//  OSIntEnter(); //  /* Process All SDIO Interrupt Sources *///  SD_ProcessIRQSrc();//处理所有SDIO相关中断//  printf("SD卡中断有效");//  OSIntExit();  CPU_SR_ALLOC();  OS_CRItiCAL_ENTER();  //保存全局中断标志,关总中断/* Tell uC/OS-II that we are starting an ISR*/  OSIntNestingCtr++;  OS_CRITICAL_EXIT();  //恢复全局中断标志  SD_ProcessIRQSrc();//处理所有SDIO相关中断    OSIntExit();  //在os_core.c文件里定义,如果有更高优先级的任务就绪了,则执行一次任务切换}请问这是什么原因呢?用SDIO方式读写SD卡只能使用中断方式么?

回帖(6)

曹雪琰

2019-4-25 06:37:30
FILINFO finfo; 
  DIR dirs;
这些很占SRAM的。。。
放全局变量!!!
举报

罗莹

2019-4-25 06:52:58
堆栈不够吧。
举报

张梅

2019-4-25 06:58:19
打开中断之前运行SDIO中断处理服务函数,完毕之后再打开中断开关看下
举报

袁喆

2019-4-25 07:11:23
堆栈改大了也是卡死哦,不过后来我调试了下,发现程序是卡在打开路径函数那里了,单独的读一个文件运行正常,是我的文件系统没设置好么请问
[C] 纯文本查看 复制代码
void OutPutFile(void){ unsigned int a;  FRESULT res;  FILINFO finfo;  DIR dirs;//  int i;//  char *fn;  char path[50]={""};        printf("n  file system(Tini-FatFa0.09a) starting! n");     //f_mount(0, &fsk); //main中已经定义过了  res = f_open(&fsrc,"hanhan.txt",  FA_READ);if(!res){        br=1;a=0;for (;;) {for(a=0; a<512; a++) buffer[a]=0;         res = f_read(&fsrc, buffer, sizeof(buffer), &br);printf("%sn",buffer);        if (res || br == 0) break;   // error or eof        }}f_close(&fsrc);  //if (f_opendir(&dirs, path) == FR_OK) //在操作系统中却不能执行,卡死在这//  {//    while (f_readdir(&dirs, &finfo) == FR_OK)  //    {//      if (finfo.fattrib & AM_ARC) //      {//        if(!finfo.fname[0])//          break;         //        printf("rn file name is:n   %sn",finfo.fname);                          //      }  //}//   }}void MainTask(void) {OS_ERR err;u32 total,free;    GUI_Init();//NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);uart_init(9600); //串口初始化为9600//SD_Init();    FSMC_SRAM_Init();//初始化外部SRAMmem_init(SRAMIN);//初始化内部内存池mem_init(SRAMEX);//初始化外部内存池exfuns_init();//为fatfs相关变量申请内存//SD_InitializeCards();//检测SD卡disk_initialize(0);   f_mount(0,fs[0]);  //挂载SD卡 //f_mount(1,fs[1]);     //挂载FLASH.//GUI_SetColor(GUI_RED);//GUI_Clear();if(exf_getfree("0",&total,&free))//得到SD卡的总容量和剩余容量{GUI_DispStringAt("FAT Error",12,90);printf("FAT Errorrn");}GUI_DispDecAt(total>>10,10,10,6);GUI_DispDecAt(free>>10,10,30,6);show_sdcard_info();//打印SD卡相关信息OutPutFile();while(1){OSTimeDly(  (OS_TICK    )200,                     (OS_OPT     )OS_OPT_TIME_DLY,                     (OS_ERR     *)&err);}//while(1);}
举报

更多回帖

发帖
×
20
完善资料,
赚取积分