掌上单片机实验室 – RT-Thread 运行性能评估(21)

一、背景

        已经基于 RT-Thread 实现了小车的基本控制,由于小车的编码器较为简陋,为实现PID调速,算法上做了不少处理,故增加了不少运算量。虽说从现象上看,程序运行正常,预期的功能均已实现。

        但如何要想得到一个可靠的程序,必须知道程序运行时的几个关键指标:堆栈使用情况、MCU的占用率、中断响应时间。这些对实时操作系统而言是至关重要的,合理的堆栈剩余空间、MCU占用率及中断响应时间是嵌入式设备连续运行状态下可靠性的保障。

        为此,打算基于前面所完成的程序,测试一下上述指标。

二、需求

        在最接近真实运行状态下,检测:

  1. 具备堆栈使用情况监测手段
  2. CPU(MCU)占用率
  3. 外部中断响应时间

        所谓“真实”,是指:所添加的测试代码尽量不影响原来程序的运行,同时又能反映程序在正常运行状态下,各种情况所对应的上述参数。

        至于为何选择这三个指标,网上应该有很多相关讨论,在此就不详述了。

三、测试方式及结果

3.1 堆栈使用情况监测

        一般多任务操作系统都需要监测堆栈使用情况,因为栈溢出将会导致程序跑飞,故一般OS会提供一个函数获取栈的最大使用情况。在FreeRTOS中,我就是用此方式获取的。

        但在RT-Thread中未找到类似函数,但它提供了两个更好的方式:

  1. 支持监测栈溢出:就是在程序出现栈溢出时,会通过FinSH 从串口输出信息,这个对使用者还是十分友好的,在使用FreeRTOS时,我是发现程序异常再打开栈监测(因为栈监测输出有点耗资源,故只在需要时打开),此时如果程序已经不能运行基本功能,则需要通过“试”来确定是不是栈溢出所致?是那个任务的栈不够?有点麻烦。在RT-Thread中直接就可以通过输出信息知道那个线程栈不够,很方便。
  2. 可以通过FinSH交互命令,通过串口终端命令,看到所有线程的栈使用情况;这个和之前我在 Arduino+FreeRTOS 下实现的功能类似,但无需自己编写代码,也是一个对用户十分友好的手段。

        有了栈溢出监测,为何还需要知道每个线程栈的使用情况?这是因为必须保证一定的余量,否则程序长期运行时就存在隐患。

     

"多谢关注realboard,请访问慧至科技官方网站www.hugacy.com" 感谢大家关注realboard,再三感谢,尤其是众多发email过来询问的网友。 鉴于有网友怀疑realboad速度比qemu慢,事实胜于雄辩,提供测试方法如下: 测试方法: 分别运行两个batch程序,用秒表或PC时钟计时(大概1分钟左右结束) 计时方法: 程序启动开始计时; 出现UI画面结束计时. 测试代码(rt-thread 0.4.0 relese): 如果对测试代码有疑问,请联系rt-thread咨询 bsp/mini2440/sdcard.c rt_uint8_t sd_init(void) { //-- SD controller & card initialize int i; sd_delay(1000000); //此处增加一行对ARM仿真性能进行压力测试 /* Important notice for MMC test condition */ /* Cmd & Data lines must be enabled by pull up resister */ SDIPRE = PCLK/(INICLK)-1; SDICON = (0<<4) | 1; // Type A, clk enable SDIFSTA = SDIFSTA | (1<<16); SDIBSIZE = 0x200; /* 512byte per one block */ SDIDTIMER=0x7fffff; /* timeout count */ /* Wait 74SDCLK for MMC card */ for(i=0; i<0x1000; i++); sd_cmd0(); 参考配置: Pentium(R) Dual-Core CPU E5400 @ 2.70GHz 2.69GHz, 3.46GB of RAM 参考结果: qemu为47秒, realboard为28秒 realboard之所有没有达到23秒以内,是因为Timer处理和外设IO还有专门优化。 早期曾经对realboard核心指令集模拟器做过多媒体解码测试,综合性能是qemu的2倍。 详情请参考我的优快云 blog realboard -- 继续挑战ARM高性能软件仿真极限 <** 任何个人或团体学习者,教育培训机构,自由项目开发组织,在非商业赢利前提下,均可以无偿体验和使用realboard,商业使用请联系作者获得授权, email : lxzhg@hotmail.com **> 测试包中所含其它资源为自由软件开发组织所有,请参考各自许可协议。
<think> 嗯,用户这次想了解掌上实验室V8的具体功能、使用方法和下载信息。从用户提问方式看,ta可能是个嵌入式系统初学者,正在评估这款开发板是否适合自己。用户特意提到"可能包括功能、使用方法、下载等",说明需求比较明确,但缺乏系统认知。 注意到用户之前提供了三个引用片段,虽然内容零散但很有价值:引用[1]提到编码器转速测量功能,引用[2]涉及ADC模数转换,引用[3]则是Keil项目创建实例。这些恰好展示了开发板的三个核心应用场景——电机控制、模拟信号采集和基础开发。用户没直接问这些技术细节,但可能在暗示需要实际应用案例。 考虑到掌上实验室V8是AT32官方开发板,应该优先推荐官方资源。功能描述需要突出其"教学+实践"的双重定位:既要说明基础外设(GPIO/UART等),也要强调特色功能如编码器接口(引用[1])、多通道ADC(引用[2])。下载渠道必须确保官方性和安全性,特别要区分开发工具包和文档资料的下载路径。 用户没提具体开发方向,所以使用教程要分层推荐:Keil基础操作(引用[3]的代码示例很典型)适合纯新手,而ADC/编码器等教程(引用[1][2])则面向进阶者。最后补充的常见问题链接是预防性措施——既然引用[1]提到特定中断问题,用户后续很可能遇到类似坑点。 意外发现用户给出的引用[3]代码中GPIO初始化逻辑完整,但main函数里缺少延时直接死循环操作LED,这会导致视觉上看不到闪烁效果。虽然和当前问题无关,但后续如果用户问及LED实验时需要提醒这点。 </think> 以下是关于**掌上实验室V8(AT32 MCU开发板)**的功能、使用方法和下载信息的综合说明: --- ### **一、主要功能** 1. **核心处理器** - 搭载 **AT32F4 系列 MCU**(如AT32F403A/407),主频最高240MHz,内置FPU浮点单元。 2. **丰富外设接口** - 多路 **ADC**(12位精度,支持21路外部信号+2路内部信号采集)[^2] - 编码器接口(支持**4倍频计数**和**干扰脉冲滤除**,适用于电机控制)[^1] - 定时器(支持PWM输出、输入捕获等) - 通信接口:USART、SPI、I²C、CAN、USB等。 3. **开发支持** - 兼容Keil/IAR开发环境,提供标准外设库(BSP)和配置工具。 - 内置LED、按键、电位器等调试元件。 --- ### **二、使用方法** #### **1. 开发环境搭建** - **步骤**: 1. 安装 **Keil MDK** 或 **IAR Embedded Workbench**。 2. 下载 **AT32固件库**(含BSP驱动和示例代码)[官网链接](#)。 3. 新建工程(参考[引用3](#)的Keil配置流程)。 4. 编写代码,例如控制GPIO(点亮LED): ```c #include "at32f403a_407_conf.h" void main() { gpio_init_type gpio_init_struct; crm_periph_clock_enable(CRM_GPIOC_PERIPH_CLOCK, TRUE); // 使能GPIOC时钟 gpio_init_struct.gpio_pins = GPIO_PINS_13; // 配置PC13(LED) gpio_init_struct.gpio_mode = GPIO_MODE_OUTPUT; // 输出模式 gpio_init(GPIOC, &gpio_init_struct); while(1) { gpio_bits_toggle(GPIOC, GPIO_PINS_13); // LED闪烁 delay_ms(500); } } ``` [^3] #### **2. 关键功能示例** - **ADC采样**(读取电位器电压): ```c adc_convert_trigger_enable(ADC1, TRUE); // 使能ADC连续转换 adc_ordinary_conversion_trigger(ADC1); // 启动转换 uint16_t adc_value = adc_ordinary_data_read(ADC1); // 读取结果 ``` [^2] - **编码器测速**(通过定时器捕获模式): 配置TMR为**编码器模式**,自动计数旋转脉冲(支持方向识别和4倍频)[^1]。 --- ### **三、下载资源** 1. **官方资料** - **AT32 MCU固件库**:包含外设驱动、示例代码、BSP模板 [下载地址:AT32官网 > 支持 > 下载中心](#) - **开发工具**:AT32 IDE插件、配置工具(如Clock Configuration Tool) 2. **教程文档** - [《掌上实验室V8系列教程》](https://www.arterytek.com/cn/support/index.jsp?index=0):涵盖GPIO、ADC、编码器、中断等实验[^1][^2][^3]。 - **FAQ文档**(如编码器模式下的中断问题解决方案)[^1]。 --- ### **四、常见问题** - **Q1**:编码器模式下定时器不触发溢出中断? **A**:需参考官方FAQ0121文档,调整TMR配置或中断处理逻辑[^1]。 - **Q2**:ADC采样值波动大? **A**:检查参考电压稳定性,添加硬件滤波或软件均值滤波。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

嵌入之梦

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值