发新帖本帖赏金 5.00元(功能说明)我要提问
1234下一页
返回列表
打印
[开发板与模块]

【HT32F52352 Starter Kit测评】+移植超轻量MOS系统

[复制链接]
2839|78
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
gddddd|  楼主 | 2022-4-25 13:13 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 eltonchang2001 于 2022-11-9 11:29 编辑

#申请原创#

    依照惯例,首先感谢合泰半导体!感谢21IC电子论坛!联合举办了这么优秀的活动,我有幸参与并获得合泰半导体赠送的Starter Kit开发板,不甚荣幸!
    Starter Kit开发板的美图就不上了,好些评测都已贴过,只是有一点想特别说一下的是收到的Starter Kit开发板连排针都已经焊接好的,拿来使用就只需连连杜邦线即可,这点特别贴心。
    Starter Kit开发板使用的是HT32F52352芯片,基于Cortex-M0+核心,最高主频不算高48MHz,128KB FLASH+16KB RAM很给力,外围设备也很丰富,支持USB2.0full-speed(12Mbps)模式,本次评测的主要目的是移植超轻量MOS系统到Starter Kit开发板上,同时跑跑Coremark看看HT32F52352的性能。
    因为之前有适配Cortex-M0核心的MCU,Cortex-M0+核心与Cortex-M0核心在代码上基本没什么差别,可以直接拿来使用,只是针对不同MCU定制一些参数适配就可以跑起来了,下面是具体过程:
    首先,使用Starter Kit开发板的官方配套例程,https://www.holtek.com.tw/esk32-30501 这里下载,如图所示标红的几个是需要下载的文档及软件。


    就决定选用USART中的Interrupt_FIFO例程来移植了。就例程来说,合泰半导体官网上下载的HT32_STD_5xxxx_FWLib_V1.0.25_5831.zip,使用方法有点点不同以往,使用时需要在解压后的目录中使用_CreateProject.bat创新Keil的项目,在第一次使用时还需选择一下编译器选项为KEIL的MDK_ARMv5,按N键后方可完成,虽然操作上会繁琐一点点,但主要是为了能在更多主流编译平台上通用,也是厂家用心良苦了。
    进入新建的目录MDK_ARMv5,将MOS核心代码拷贝过来,源代码悉数拷贝到src目录,引用文件拷贝到inc目录中,如图所示


    进入Keil新建好的项目,选择增加组Coremark并添加源代码coremark目录下的所有文件进去,选择增加组MOS并添加mos.s进去,最终如图所示


    在Keil编译器的C和ASM选项页中配置include paths选项,在其中均加入路径“..\MDK_ARMv5\inc”,如图所示


    在ht32f5xxxx_01_it.c中增加gTick定义并在SysTick_Handler函数中自加一,供MOS系统调用并在coremark中会需要这个变量来计数跑分的运行时长,如图所示


    修改一下startup_ht32f5xxxx_01.s中的代码,主要是更改PendSV_Handler和SysTick_Handler中断函数入口为MOS对应的中断函数,详见源代码。
    修改一下mos.inc中的RAM定义项用以适配HT32F52352芯片,主要就是调整一下那几个标示(参数可调)的项,HT32F52352芯片的16KB RAM对应上即可,和详见源代码。
    修改一下main.c,将原来main.c中的UxART_TxTest和UxART_RxTest串口发送显示代码单独定义到一个单独任务(任务task0,这样原例程中的功能依旧,可以在串口中收到自己发出字符串)中,再增加一个MOS的初始化函数和一个Coremark的守护任务就可以愉快的开跑了,详见源代码。


    等待一会后,跑分结果让人大吃一惊,实在太低了,有点不敢相信,所以一定是哪里有误!一般来说得分过低就得要找Flash零等待设置来背锅,果然查看例程中发现Flash零等待设置为1,参阅数据手册也能看到,Flash零等待设置为1是主频为24MHz和48MHz之间,所以修改system_ht32f5xxxx_01.c中Flash零等待设置为0等待,但是实测当Flash零等待设置为0时主频最大只能到32MHz(高到40MHz就直接跑飞),于是还得修改PLL倍频(PLL_NF2_DIV)为4(4 * 8 = 32MHz),mos.s的mos_start函数中也需要一起修改SysTICK重装值配合主频32MHz,再次开跑。。。

    好吧,得分有所提高,但每MHz得分1.216分还是偏低,试了开关PRE_FETCH_ENABLE和BCACHE_ENABLE跑分结果都没变化,一时间没想通还有什么原因可能影响到跑分了,因为时间所限未做过多分析,待有空时再深入研究一下。因为试用了Starter Kit开发板后一直有一种与其他MCU有点点不同的感觉,可能是例程的使用上或者数据手册的介绍中或者其他什么说不清道不明的原因,总之是有些不明觉厉!所以跑分结果偏低可能是我个人使用水平问题导致,回头还得仔细看看数据手册。
    最后附上本次评测的源代码: 评测用例子_coremark_HT32_STD_5xxxx_FWLib_V1.0.25_5831.zip (1.19 MB)

使用特权

评论回复

打赏榜单

eltonchang2001 打赏了 5.00 元 2022-04-29
理由:coremark 实测

相关帖子

沙发
mxkw0514| | 2022-5-5 11:28 | 只看该作者
上次看了楼主在雅特力M4上移植MOS,不能完全体现“轻量化”的特点,这次终于在M0中移植了MOS,如尝所愿了

使用特权

评论回复
板凳
eltonchang2001| | 2022-5-6 17:41 | 只看该作者
移植超轻量MOS系统 -->MOS网路找半天,  是指 uCOS ?

使用特权

评论回复
地板
gouguoccc| | 2022-5-7 08:09 | 只看该作者
幽出来个MOS系统

使用特权

评论回复
5
fuqinyyy| | 2022-5-10 08:20 | 只看该作者
这个系统稳定吗?

使用特权

评论回复
6
gddddd|  楼主 | 2022-5-10 13:08 | 只看该作者
初衷是激发一下大家的兴趣,自己DIY一款适合自己的轻量RTOS,代码量不大吃透不算难,RAM及各变量定义好不要出现堆栈溢出,就很稳定(毕竟是纯汇编的内核,代码和思路不出错就非常稳定)

使用特权

评论回复
7
tifmill| | 2022-5-16 09:48 | 只看该作者
MOS是什么操作系统的

使用特权

评论回复
8
averyleigh| | 2022-5-16 10:45 | 只看该作者
Coremark性能很给力呢。  

使用特权

评论回复
9
deliahouse887| | 2022-5-16 12:44 | 只看该作者
这个最高的主频是多少呢   

使用特权

评论回复
10
jtracy3| | 2022-5-16 13:17 | 只看该作者
HT32F52352芯片性能怎么样

使用特权

评论回复
11
jonas222| | 2022-5-16 14:10 | 只看该作者
有其他的系统可以参考吗

使用特权

评论回复
12
eltonchang2001| | 2022-5-16 23:07 | 只看该作者

另一位同学的移植,同样是48Mhz,结果 1.8925 Iteration/Mhz  (https://bbs.21ic.com/icview-3218890-1-1.html)

问题一:这个OS是否把 CoreMark拖慢了?问题二:另注解中提到32Mhz, Wait State = 0 跑得起来,但48Mhz, Wait State = 0 跑不起来,Wait State = 1 才跑得起来,为什麽?/* auto-select wait state*/
/* 001 = 0 WS = 0 MHz < HCLK ≤ 24 MHz */
/* 010 = 1 WS =24 MHz < HCLK ≤ 48 MHz */

//HT_FLASH->CFCR = (((HT_FLASH->CFCR) & ~7UL) | 2UL);   
HT_FLASH->CFCR = (((HT_FLASH->CFCR) & ~7UL) | 1UL);    /* 实测 0等待时, 32MHz程序还能跑,40MHz就飞了 */

* 各种不同 Arm Cortex-M 内核跑分比较的参考数值,如附件。 Arm-Cortex-M-Comparison-Table-v9.pdf (101.4 KB)



使用特权

评论回复
13
eltonchang2001| | 2022-5-16 23:14 | 只看该作者
另外一位同学的移植结果和你的结果不一样,请参考 https://bbs.21ic.com/icview-3218890-1-1.html

你的OS是否拖慢了coremark?

使用特权

评论回复
14
gddddd|  楼主 | 2022-5-23 13:18 | 只看该作者
本帖最后由 gddddd 于 2022-5-23 16:10 编辑

看了同学链接中的帖子,Coremark最终得分不同是因为编译器(GCCClang 13.0.0 和 armcc v5.06)不同和MOS本身代码应该没有什么关系,我再自查一下(因为代码用了另外MCU的原始代码修改,万一是哪里不匹配导致得分低了就是我的罪过了,本着实事求是的态度,我会再用Coremark1.01源代码直接移植一份跑跑分)。Keil得分一直不高的说(隐藏的一点好处是:性能实在不够用了还能换其他编译器抢救一下),不过MOS我是一直用的Keil默认编译器来编译以此作为得分参照的

使用特权

评论回复
15
gddddd|  楼主 | 2022-5-23 13:29 | 只看该作者
Wait State的值就是flash等待周期,flash为0等待时MCU主频最高只能运行在32MHz下,再高的话flash时序跟不上MCU主频了,就会跑飞,同理STM32的主频PLL后很高,同时flash等待周期就会对应加大用以匹配MCU的高主频,GD32有的型号是把flash放ram中的,所以可以很高主频跑在flash为0等待状态下。关于flash等待周期和MCU主频的关系一般在数据手册中都有详细说明。比如本款HT32F52352虽然flash为0等待时(可以看作flash在超频运行)可以跑在主频32MHz下,但实际应用时还是应该以数据手册中为准,也就是24MHz以下可以设置为Wait State = 0

使用特权

评论回复
16
gddddd|  楼主 | 2022-5-23 18:10 | 只看该作者
eltonchang2001 发表于 2022-5-16 23:14
另外一位同学的移植结果和你的结果不一样,请参考 https://bbs.21ic.com/icview-3218890-1-1.html

你的OS ...

MOS本身任务切换时会消耗一点CPU资源,同时多个任务的运行也会消耗一点CPU资源,不过对coremark跑分的影响还是比较小的。复测了不使用MOS直接裸机跑coremark1.01,在Keil armcc v5.06编译器下确实得分很低,48MHz时只有50分

复测源代码: 48MHz_coremark_HT32_STD_5xxxx_FWLib_V1.0.25_5831.zip (1.62 MB)


使用特权

评论回复
17
eltonchang2001| | 2022-5-24 16:13 | 只看该作者
下载版主专案後 (MDK-ARM community V5.36.0.0 版本)

一、如下,在“C/C++”编译设定,将"Optimize for Time"点选,跑分结果为 87.09 Iterations/Sec。

        


二、在“Target”分页,将ARM编译改为V6版,同时将"Optimization"点选为 "-OFast",Language C++设为 "gnu++ 17",跑分结果为 90.909 Iterations/Sec。






使用特权

评论回复
18
eltonchang2001| | 2022-5-24 16:23 | 只看该作者
编译器的选项,将 "Optimize for Time" 打勾,再试一下,可以接近到 90 Iterations/Sec。

使用特权

评论回复
19
gddddd|  楼主 | 2022-5-25 08:58 | 只看该作者
是的,是我的疏忽导致的锅,因为使用的官方原始例程没有勾选-Otime选项,我在移植的时候也没注意到这个问题,打开选项之后得分才是正常水平,感谢指正

使用特权

评论回复
20
phoenixwhite| | 2022-5-28 13:10 | 只看该作者
HT32F52352 怎么样?

使用特权

评论回复
发新帖 本帖赏金 5.00元(功能说明)我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

9

主题

378

帖子

1

粉丝