OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 3308|回复: 3

关于F429+FreeRTOS+emWin+TTF移植问题

[复制链接]

10

主题

23

帖子

0

精华

初级会员

Rank: 2

积分
92
金钱
92
注册时间
2017-6-21
在线时间
23 小时
发表于 2019-3-22 14:16:26 | 显示全部楼层 |阅读模式
3金钱
最近在移植TTF字体的时候遇到个问题,还请大家赐教!
开发环境:
        [MCU] STM32F429IGT6
        [OS] FreeRTOS
        [GUI] emWin 5.30
        [FS] Fatfs
        [TTF包] freetype 5.26
        [RAM] 外部扩展SDRAM
说明:因为为下载到与emWin版本相匹配的TTF包,故暂时先采用5.26版本进行调试,对此还不知道是否存在影响?
=========================================================================
        将TTF移植完成后,在SD卡中放入一个测试用ttf字体库,并在工程的初始化部分调用创建字体函数(代码如下):

        res = Create_TTFFont((u8 *)"0:calibri.ttf");
        if (res) {
            printf("TTF字体创建失败,%d\r\n", res);
       }
      else {
           printf("TTF字体创建成功,%d\r\n", res);
      }

//---------------------------------------------------------------------------------------
       int Create_TTFFont(u8 *fxpath)
       {
            int result;
            u16 bread;
            char *TtfBuffer;

#if SYSTEM_SUPPORT_OS
//        CPU_SR_ALLOC();
#endif

          result = f_open(&TTFFontFile, (const TCHAR*)fxpath, FA_READ); //打开字库文件
          if (result != FR_OK) {
               return 1;
          }

         TtfBuffer = mymalloc(SRAMEX, TTFFontFile.obj.objsize);//申请内存
         if (TtfBuffer == NULL) {
             return 3;//内存申请失败
         }

//读取字体数据
#if SYSTEM_SUPPORT_OS
         taskENTER_CRITICAL();
#endif
   
         result = f_read(&TTFFontFile, TtfBuffer, TTFFontFile.obj.objsize, (UINT *)&bread); //读取数据
         if (result != FR_OK) {
             return 4; //文件打开失败,跳出
         }

         f_close(&TTFFontFile); //关闭TTFFointFile文件
   
#if SYSTEM_SUPPORT_OS
         taskEXIT_CRITICAL();
#endif

         TTFData.pData = TtfBuffer; //指向文件地址
         TTFData.NumBytes = TTFFontFile.obj.objsize; //文件大小

        Cs0.pTTF  = &TTFData;
        Cs0.PixelHeight = 12;
        Cs0.FaceIndex = 0;

        Cs1.pTTF  = &TTFData;
        Cs1.PixelHeight = 18;
       Cs1.FaceIndex = 0;

       Cs2.pTTF  = &TTFData;
       Cs2.PixelHeight = 24;
       Cs2.FaceIndex = 0;

       Cs3.pTTF  = &TTFData;
       Cs3.PixelHeight = 36;
       Cs3.FaceIndex = 0;

       result = GUI_TTF_CreateFont(&TTF12_Font, &Cs0); //创建字体
       if (result) {
            return 5; //字体创建失败
       }
       result = GUI_TTF_CreateFont(&TTF18_Font, &Cs1); //创建字体
       if (result) {
            return 6; //字体创建失败
       }
       result = GUI_TTF_CreateFont(&TTF24_Font, &Cs2); //创建字体
       if (result) {
            return 7; //字体创建失败
       }
       result = GUI_TTF_CreateFont(&TTF36_Font, &Cs3); //创建字体
       if (result) {
           return 8; //字体创建失败
       }
      return 0;
  }

上述代码是从uCos系统下移植过来的,对函数中预编译宏进行了替换。

运行时,串口出现错误如下信息,程序阻塞。
Error:..\FreeRTOS\queue.c,1244
Error:..\FreeRTOS\queue.c,1245

对应代码是在“queue.c”文件中的断言部分

BaseType_t xQueueGenericReceive( QueueHandle_t xQueue, void * const pvBuffer, TickType_t xTicksToWait, const BaseType_t xJustPeeking )
{
       BaseType_t xEntryTimeSet = pdFALSE;
       TimeOut_t xTimeOut;
       int8_t *pcOriginalReadPosition;
       Queue_t * const pxQueue = ( Queue_t * ) xQueue;
       configASSERT( pxQueue );
       configASSERT( !( ( pvBuffer == NULL ) && ( pxQueue->uxItemSize != ( UBaseType_t ) 0U ) ) );

#if ( ( INCLUDE_xTaskGetSchedulerState == 1 ) || ( configUSE_TIMERS == 1 ) )
{
       configASSERT( !( ( xTaskGetSchedulerState() == taskSCHEDULER_SUSPENDED ) && ( xTicksToWait != 0 ) ) );
}
#endif
      ......
}

通过debug,函数
Create_TTFFont()文件数据读写都正常,程序卡在第一条“result = GUI_TTF_CreateFont(&TTF12_Font, &Cs0);”处,在xQueueGenericReceive函数中,
被断言的内容pxQueue为0值。

请问大家有没有遇到过这样的情况,请大家赐教!谢谢!




最佳答案

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

10

主题

23

帖子

0

精华

初级会员

Rank: 2

积分
92
金钱
92
注册时间
2017-6-21
在线时间
23 小时
 楼主| 发表于 2019-3-22 14:16:27 | 显示全部楼层
回复

使用道具 举报

109

主题

5564

帖子

0

精华

资深版主

Rank: 8Rank: 8

积分
10567
金钱
10567
注册时间
2017-2-18
在线时间
1913 小时
发表于 2019-3-22 18:07:46 | 显示全部楼层
帮顶~~
回复

使用道具 举报

11

主题

30

帖子

0

精华

初级会员

Rank: 2

积分
188
金钱
188
注册时间
2014-10-10
在线时间
68 小时
发表于 2019-6-10 11:30:10 | 显示全部楼层
请问,你这个怎么解决的,同样出现相同问题
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-5-14 21:11

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表