金牌会员
- 积分
- 1311
- 金钱
- 1311
- 注册时间
- 2021-4-28
- 在线时间
- 496 小时
|
楼主 |
发表于 2021-9-27 23:33:07
|
显示全部楼层
在进一步调试中
当删除text_show_string_middle()函数的时候,
exfuns_init(); //为fatfs相关变量申请内存
f_mount(fs[0],"0:",1); //挂载SD卡
res = f_mount(fs[1],"1:",1); //挂载FLASH.
这三行代码能过运行
当加入
text_show_string_middle()函数的时候 ,程序会在 f_mount(fs[0],"0:",1); //在这里卡死
代码如下
/**
* @brief 在指定宽度的中间显示字符串
* @note 如果字符长度超过了len,则用text_show_string_middle显示
* @param x,y : 起始坐标
* @param str : 字符串
* @param size : 字体大小
* @param width : 显示区域宽度
* @param color : 字体颜色
* @retval 无
*/
void text_show_string_middle(uint16_t x, uint16_t y, char *str, uint8_t size, uint16_t width, uint16_t color)
{
uint16_t strlenth = 0;
strlenth = strlen((const char *)str);
strlenth *= size / 2;
if (strlenth > width) /* 超过了, 不能居中显示 */
{
text_show_string(x, y, lcddev.width, lcddev.height, str, size, 1, color);
}
else
{
strlenth = (width - strlenth) / 2;
text_show_string(strlenth + x, y, lcddev.width, lcddev.height, str, size, 1, color);
}
}
我发现一个很神奇的点
当加入text_show_string()用来显示汉字 并不会卡死 这是为什么呢
前面测试返回值的
发现程序卡死在
switch (pdrv)
{
case SD_CARD :
res = sd_read_disk(buff, sector, count);
while (res) //卡死在这
{
{
sd_init(); //重新初始化SD卡
res = sd_read_disk(buff,sector,count);
printf("sd rd error:%d\r\n",res); //错误值为1
}
}
u8 SD_GetCardState(void)
{
return((HAL_SD_GetCardState(&SDCARD_Handler)==HAL_SD_CARD_TRANSFER )?SD_TRANSFER_OK:SD_TRANSFER_BUSY);
}
例程有段代码是这个 是不是 HAL_SD_CARD_TRANSFER 的问题 我修改为 HAL_SD_CARD_READY 程序 没有卡死在这了
但还是卡死在挂载函数中
|
|