我电子贼菜 2023-03-22 14:09 采纳率: 0%
浏览 27

lv_init()出错

问题:使用我自己设计的STM32F407板子,在使用LVGL图形库 lv_init();初始化时,进入tlsf_assert()触发断言,程序不再继续向下执行,停留在函数的static block_header_t * search_suitable_block(control_t * control, int * fli, int * sli)函数中的tlsf_assert(sl_map && "internal error - second level bitmap is null");语句,但该程序在正点原子的探索者STM32F407的开发板上运行没问题。

猜想:可能是因为外部的SRAM的电路线路长度相差较大导致的信号时序出现问题,导致LVGL使用外部SRAM分配空间的时候出现错误。但我单独使用SRAM的相关程序在我的板子上是可以正常运行的,例如在我的板子上可以运行正点原子的SRAM测试例程,内存管理例程,以及正点原子的avi视频播放例程,这些例程都使用到了SRAM,都可正常运行,所以这个SRAM出问题的可能性应该也很低,但也想不出是其他什么的原因了。

  • 写回答

2条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2023-03-27 19:29
    关注
    不知道你这个问题是否已经解决, 如果还没有解决的话:
    • 你可以看下这个问题的回答https://ask.csdn.net/questions/7568738
    • 除此之外, 这篇博客: STM32学习100步之第三十九-四十步——RTC实时时钟中的 这里值得注意的是,0xA5A5是作为标志检查位而写入的,当后备电源断电之后,RTC相关寄存器和后备寄存器的值必定会丢失,这时可以根据此来判断是否需要进行首次RTC设置,进行首次RTC值设置之后,还应该对相应的一个后备寄存器写入该值,以便下次进行检查,代码中还有上电复位和外部SET复位,可向相应的if语句中写入上电复位和外部SET复位对应的不同效果,而且作为初学者,我们只需要调用一般的初始化函数即可,因为该函数中已经包含首次RTC设置的判断语句,除非强制首次RTC设置。另外初学者只要学会调用下面两条程序即可 部分也许能够解决你的问题, 你可以仔细阅读以下内容或者直接跳转源博客中阅读:
      u8 RTC_Get(void);                  //读出当前时间值
      { //写入当前时间(1970~2099年有效),
      	u16 t;
      	u32 seccount=0;
      	if(syear<2000||syear>2099)return 1;//syear范围1970-2099,此处设置范围为2000-2099       
      	for(t=1970;t<syear;t++){ //把所有年份的秒钟相加
      		if(Is_Leap_Year(t))seccount+=31622400;//闰年的秒钟数
      		else seccount+=31536000;                    //平年的秒钟数
      	}
      	smon-=1;
      	for(t=0;t<smon;t++){         //把前面月份的秒钟数相加
      		seccount+=(u32)mon_table[t]*86400;//月份秒钟数相加
      		if(Is_Leap_Year(syear)&&t==1)seccount+=86400;//闰年2月份增加一天的秒钟数        
      	}
      	seccount+=(u32)(sday-1)*86400;//把前面日期的秒钟数相加
      	seccount+=(u32)hour*3600;//小时秒钟数
      	seccount+=(u32)min*60;      //分钟秒钟数
      	seccount+=sec;//最后的秒钟加上去
      	RTC_First_Config(); //重新初始化时钟
      	BKP_WriteBackupRegister(BKP_DR1, 0xA5A5);//配置完成后,向后备寄存器中写特殊字符0xA5A5
      	RTC_SetCounter(seccount);//把换算好的计数器值写入
      	RTC_WaitForLastTask(); //等待写入完成
      	return 0; //返回值:0,成功;其他:错误代码.    
      }	
      
      u8 RTC_Set(u16 syear,u8 smon,u8 sday,u8 hour,u8 min,u8 sec);       //写入当前时间
      {//读出当前时间值 //返回值:0,成功;其他:错误代码.
      	static u16 daycnt=0;
      	u32 timecount=0;
      	u32 temp=0;
      	u16 temp1=0;
      	timecount=RTC_GetCounter();		
      	temp=timecount/86400;   //得到天数(秒钟数对应的)
      	if(daycnt!=temp){//超过一天了
      		daycnt=temp;
      		temp1=1970;  //从1970年开始
      		while(temp>=365){
      		     if(Is_Leap_Year(temp1)){//是闰年
      			     if(temp>=366)temp-=366;//闰年的秒钟数
      			     else {temp1++;break;} 
      		     }
      		     else temp-=365;       //平年
      		     temp1++; 
      		}  
      		ryear=temp1;//得到年份
      		temp1=0;
      		while(temp>=28){//超过了一个月
      			if(Is_Leap_Year(ryear)&&temp1==1){//当年是不是闰年/2月份
      				if(temp>=29)temp-=29;//闰年的秒钟数
      				else break;
      			}else{
      	            if(temp>=mon_table[temp1])temp-=mon_table[temp1];//平年
      	            else break;
      			}
      			temp1++; 
      		}
      		rmon=temp1+1;//得到月份
      		rday=temp+1;  //得到日期
      	}
      	temp=timecount%86400;     //得到秒钟数      
      	rhour=temp/3600;     //小时
      	rmin=(temp%3600)/60; //分钟     
      	rsec=(temp%3600)%60; //秒钟
      	rweek=RTC_Get_Week(ryear,rmon,rday);//获取星期  
      	return 0;
      }  
      

    如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^
    评论

报告相同问题?

问题事件

  • 创建了问题 3月22日

悬赏问题

  • ¥20 服务器redhat5.8网络问题
  • ¥15 如何利用c++ MFC绘制复杂网络多层图
  • ¥20 要做柴油机燃烧室优化 需要保持压缩比不变 请问怎么用AVL fire ESE软件里面的 compensation volume 来使用补偿体积来保持压缩比不变
  • ¥15 python螺旋图像
  • ¥15 算能的sail库的运用
  • ¥15 'Content-Type': 'application/x-www-form-urlencoded' 请教 这种post请求参数,该如何填写??重点是下面那个冒号啊
  • ¥15 找代写python里的jango设计在线书店
  • ¥15 请教如何关于Msg文件解析
  • ¥200 sqlite3数据库设置用户名和密码
  • ¥15 AutoDL无法使用docker install吗?