STM32(Cortex-M3)开发,RVDS和MDK谁优谁劣?

简介: 目前针对Cortex-M3的开发示例大都以MDK的工程来提供,所以MDK更适合Cortex-M3的开发才对

目前针对Cortex-M3的开发示例大都以MDK的工程来提供,所以MDK更适合Cortex-M3的开发才对,难到几万元的RVDS其开发表现不如万元左右的MDK开发工具吗,实际情况又如何呢?

开发板:EM-STM3210E 和 EM-STM3210E-EVAL

CPU:STM32F103ZE

目标源码:Microsoft .Net Micro Framework v4.0 for Cortex-M3

一、编译
1.png
所谓异常,其实问题很简单,就是CRC计算的代码出了问题,相关代码如下:

UINT32 SUPPORT_ComputeCRC( const void* rgBlock ,int         nLength , UINT32      crc)

{

    const UINT8* ptr = (const UINT8*)rgBlock;

    while(nLength-- > 0)

    {

        crc = c_CRCTable[ ((crc >> 24) ^ (*ptr++)) & 0xFF ] ^ (crc << 8);

    }

    return crc;

}

 在出现异常的版本中,代码运行到crc = c_CRCTable[ ((crc >> 24) ^ (*ptr++)) & 0xFF ] ^ (crc << 8);时,程序即出现异常,并且是rgBlock地址在外扩SRAM或片内FLASH时才出现这个问题,有时执行多个循环才会出现这种情况(为了锁定和捕捉该错误,花了我许久的时间才定位到此处)。STM32F103ZE包含CRC计算功能,但是以4个字节为计算单位,所以不太适用。

从以上表现来看,MDK和RVDS的编译结果还是有比较大的区别的,所以建议嵌入式开发者要多测试几款工具,才能真正定位自己的问题。

二、调试

由于目前EM-STM3210E 和 EM-STM3210E-EVAL开发板并没有提供一款直接初始化片外SRAM的软件,所以要调试RAM版本的程序,MDK或RVDS都需要编写调试脚本(如何编写调试脚本?请参见:)

用MDK调试Cortex-M3和调试ARM9或ARM7平台一样,直接调试即可。但是用RVDS调试却有不同,为了能正常调试,还是费了不少周折的。

image.png

 

在用RVDS调试Cortex-M3时,要确保上图所示的 [State]中的“t”为“T”。

有意思的是,这个选项和BOOT的启动选项有很大关系,如果设为“系统启动”模式,则上图的“t”自动为“T”,可以直接进行调试,其它两种模式“用户启动”和“RAM启动”都默认为“t”,需要手动切换为“T”。

此外RVDS显示的指令地址有些问题(最低位并不为1),而MDK却一切正常。

三、其它

image.png
 

ARM开发板,其中基于STM32F103ZE CPU的开发板有三款 

从我目前的调试经验来看,如果调试基于ARM7或ARM9的开发板,RVDS还是非常强大的,不过如果要调试基于Cortex-M3的开发板(特别是STM32系列),我倒是建议采用MDK来进行调试,不仅价格便宜,综合表现也不错。

最近一段时间,.Net Micro Framework for Cortex-M3除了USB驱动移植成功外,还开发了一个轻量级TinyGUI,在低内存的Cortex-M3开发板上有不俗的表现,我在后续的博文中会进行相关的介绍。

相关文章
|
存储 编译器 C语言
STM32开发 -- Keil基本使用
STM32开发 -- Keil基本使用
847 0
|
2月前
【寄存器开发速成】半小时入门STM32寄存器开发(二)
【寄存器开发速成】半小时入门STM32寄存器开发(二)
|
2月前
|
芯片
【寄存器开发速成】半小时入门STM32寄存器开发(一)
【寄存器开发速成】半小时入门STM32寄存器开发(一)
|
5月前
|
传感器 编解码 API
【STM32开发入门】温湿度监测系统实战:SPI LCD显示、HAL库应用、GPIO配置、UART中断接收、ADC采集与串口通信全解析
SPI(Serial Peripheral Interface)是一种同步串行通信接口,常用于微控制器与外围设备间的数据传输。SPI LCD是指使用SPI接口与微控制器通信的液晶显示屏。这类LCD通常具有较少的引脚(通常4个:MISO、MOSI、SCK和SS),因此在引脚资源有限的系统中非常有用。通过SPI协议,微控制器可以向LCD发送命令和数据,控制显示内容和模式。
217 0
|
7月前
|
缓存 编译器 程序员
嵌入式开发环境Vscode开发STM32单片机程序
嵌入式开发环境Vscode开发STM32单片机程序
188 0
|
API 芯片
STM32CubeMX + STM32F1系列开发时遇到的四个问题及解决方案分享
STM32CubeMX + STM32F1系列开发时遇到的四个问题及解决方案分享
274 0
|
6月前
使用STM32F103标准库实现定时器控制LED点亮和关闭
通过这篇博客,我们学习了如何使用STM32F103标准库,通过定时器来控制LED的点亮和关闭。我们配置了定时器中断,并在中断处理函数中实现了LED状态的切换。这是一个基础且实用的例子,适合初学者了解STM32定时器和中断的使用。 希望这篇博客对你有所帮助。如果有任何问题或建议,欢迎在评论区留言。
492 2
|
5月前
stm32f407探索者开发板(十七)——串口寄存器库函数配置方法
stm32f407探索者开发板(十七)——串口寄存器库函数配置方法
822 0
|
6月前
|
IDE 开发工具
使用STM32F103标准库实现自定义键盘
通过本文,我们学习了如何使用STM32F103标准库实现一个简单的自定义键盘。我们首先初始化了GPIO引脚,然后实现了一个扫描函数来检测按键状态。这个项目不仅能够帮助我们理解STM32的GPIO配置和按键扫描原理,还可以作为进一步学习中断处理和低功耗设计的基础。希望本文对你有所帮助,祝你在嵌入式开发的道路上不断进步!
540 4