硬汉嵌入式论坛

 找回密码
 立即注册
查看: 2285|回复: 5
收起左侧

[其它] 硬汉代码移植到外部的注意事项总结

[复制链接]

17

主题

101

回帖

152

积分

初级会员

积分
152
发表于 2019-11-18 15:43:43 | 显示全部楼层 |阅读模式
1、如果使用外部CMSIS-RTOS2,只需要添加cmsis_os2.c跟h文件,os_tick跟clib可以不用添加。main中不要使用 __set_PRIMASK(1)否则无法运行系统  主要是os封装层IS_IRQ()的原因
2、mbedtls如果使用外部文件,C/C++中添加宏定义:MBEDTLS_CONFIG_FILE=<mbedtls_config.h>,否则会报3个错。
3、使用SDMMC1操作SD卡,可以将sct文件中0x2000 0000改成AXI起始0x2400 0000,省去了使用section的作用,后面使用stemwin的时候就方便了。
4、ff14更新了,将unicode集合了,文件定义在ffconf中,ff_gen_drv是st将diskio进行了封装需要用的东西,免去用户使用switch(drv)选择了。所以移植ff14,只需要加ffconf、ff、ffsystem、ffunicode,ffconf在原有基础上宏定义添加了FF_,所以跟旧版一样,unicode宏定义置1就能使用cc936了。
5、我个人使用的操作系统heap是section DTCM,一共就128k都给他算了。
6、DSP库的cmsis版本要高,添加了dsp相关宏定义。
6、想到新bug再继续提。其他的比如RL系列的我还没怎么用,以后再说啦。

回复

使用道具 举报

17

主题

101

回帖

152

积分

初级会员

积分
152
 楼主| 发表于 2019-11-18 15:46:04 | 显示全部楼层
ffsystem没有RTOS2的函数,这里发下
  1. const osMutexAttr_t Mutex[FF_VOLUMES];        /* Table of CMSIS-RTOS2 mutex */


  2. int ff_cre_syncobj (        /* 1:Function succeeded, 0:Could not create the sync object */
  3.         BYTE vol,                        /* Corresponding volume (logical drive number) */
  4.         FF_SYNC_t* sobj                /* Pointer to return the created sync object */
  5. )
  6. {
  7.                 /* Win32 */
  8. //        *sobj = CreateMutex(NULL, FALSE, NULL);
  9. //        return (int)(*sobj != INVALID_HANDLE_VALUE);

  10.         /* uITRON */
  11. //        T_CSEM csem = {TA_TPRI,1,1};
  12. //        *sobj = acre_sem(&csem);
  13. //        return (int)(*sobj > 0);

  14.         /* uC/OS-II */
  15. //        OS_ERR err;
  16. //        *sobj = OSMutexCreate(0, &err);
  17. //        return (int)(err == OS_NO_ERR);

  18.         /* FreeRTOS */
  19. //        *sobj = xSemaphoreCreateMutex();
  20. //        return (int)(*sobj != NULL);

  21.         /* CMSIS-RTOS2 */
  22.         *sobj = osMutexNew(&Mutex[vol]);
  23.         return (int)(*sobj != NULL);
  24. }


  25. /*------------------------------------------------------------------------*/
  26. /* Delete a Synchronization Object                                        */
  27. /*------------------------------------------------------------------------*/
  28. /* This function is called in f_mount() function to delete a synchronization
  29. /  object that created with ff_cre_syncobj() function. When a 0 is returned,
  30. /  the f_mount() function fails with FR_INT_ERR.
  31. */

  32. int ff_del_syncobj (        /* 1:Function succeeded, 0:Could not delete due to an error */
  33.         FF_SYNC_t sobj                /* Sync object tied to the logical drive to be deleted */
  34. )
  35. {
  36.                 /* Win32 */
  37. //        return (int)CloseHandle(sobj);

  38.         /* uITRON */
  39. //        return (int)(del_sem(sobj) == E_OK);

  40.         /* uC/OS-II */
  41. //        OS_ERR err;
  42. //        OSMutexDel(sobj, OS_DEL_ALWAYS, &err);
  43. //        return (int)(err == OS_NO_ERR);

  44. //        /* FreeRTOS */
  45. //  vSemaphoreDelete(sobj);
  46. //        return 1;

  47.         /* CMSIS-RTOS2 */
  48.         return (int)(osMutexDelete(sobj) == osOK);
  49. }


  50. /*------------------------------------------------------------------------*/
  51. /* Request Grant to Access the Volume                                     */
  52. /*------------------------------------------------------------------------*/
  53. /* This function is called on entering file functions to lock the volume.
  54. /  When a 0 is returned, the file function fails with FR_TIMEOUT.
  55. */

  56. int ff_req_grant (        /* 1:Got a grant to access the volume, 0:Could not get a grant */
  57.         FF_SYNC_t sobj        /* Sync object to wait */
  58. )
  59. {
  60.                 /* Win32 */
  61. //        return (int)(WaitForSingleObject(sobj, FF_FS_TIMEOUT) == WAIT_OBJECT_0);

  62.         /* uITRON */
  63. //        return (int)(wai_sem(sobj) == E_OK);

  64.         /* uC/OS-II */
  65. //        OS_ERR err;
  66. //        OSMutexPend(sobj, FF_FS_TIMEOUT, &err));
  67. //        return (int)(err == OS_NO_ERR);

  68.         /* FreeRTOS */
  69. //        return (int)(xSemaphoreTake(sobj, FF_FS_TIMEOUT) == pdTRUE);

  70.         /* CMSIS-RTOS2 */
  71.         return (int)(osMutexAcquire(sobj, FF_FS_TIMEOUT) == osOK);
  72. }


  73. /*------------------------------------------------------------------------*/
  74. /* Release Grant to Access the Volume                                     */
  75. /*------------------------------------------------------------------------*/
  76. /* This function is called on leaving file functions to unlock the volume.
  77. */

  78. void ff_rel_grant (
  79.         FF_SYNC_t sobj        /* Sync object to be signaled */
  80. )
  81. {
  82.         /* Win32 */
  83. //        ReleaseMutex(sobj);

  84.         /* uITRON */
  85. //        sig_sem(sobj);

  86.         /* uC/OS-II */
  87. //        OSMutexPost(sobj);

  88.         /* FreeRTOS */
  89. //        xSemaphoreGive(sobj);

  90.         /* CMSIS-RTOS2 */
  91.         osMutexRelease(sobj);
  92. }
复制代码
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106757
QQ
发表于 2019-11-18 15:57:32 | 显示全部楼层
1、CMSIS-RTOS V2这个不需要用户添加,直接RTE添加即可,使用和管理最简单,现在RTX5和FreeRTOS,我已经统一采用这种方式了。维护一套代码即可。
2、xxxxxx
3、不推荐,无法发挥最大性能。
4、新版本主要是exFAT的bug修正,升级的意义不大
5、这个可以的,使用FreeRTOS自己的动态内存管理这个DTCM即可
6、新版的DSP库已经很简单,推荐源码方式。
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106757
QQ
发表于 2019-11-18 15:59:57 | 显示全部楼层
初晴sama 发表于 2019-11-18 15:46
ffsystem没有RTOS2的函数,这里发下

这个东西是最不需要的,像emWin和FatFS,都推荐在一个任务里面操作,不推荐多任务。你在一个独立的任务里面管理FatFS即可,那个任务需要操作时,直接给这个任务发消息,这是最推荐,也是最安全的。
回复

使用道具 举报

17

主题

101

回帖

152

积分

初级会员

积分
152
 楼主| 发表于 2019-11-18 16:04:41 | 显示全部楼层
eric2013 发表于 2019-11-18 15:59
这个东西是最不需要的,像emWin和FatFS,都推荐在一个任务里面操作,不推荐多任务。你在一个独立的任务里 ...

好的,收到,那我就把和这个宏定义注释了,直接使用dma管够了。官方的例程加了rtos管控,可以不加吧,平时项目
回复

使用道具 举报

17

主题

101

回帖

152

积分

初级会员

积分
152
 楼主| 发表于 2019-11-18 16:24:08 | 显示全部楼层
eric2013 发表于 2019-11-18 15:57
1、CMSIS-RTOS V2这个不需要用户添加,直接RTE添加即可,使用和管理最简单,现在RTX5和FreeRTOS,我已经统 ...

硬汉说的的确是,主要我喜欢全面,所以RTE跟外部包含我都搞了,想用哪个用哪个,可能有点强迫症
回复

使用道具 举报

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

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-5-5 00:13 , Processed in 0.208140 second(s), 25 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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