嵌入式导论实验报告Guo-Lab3
TM4C123GXL Performance
实验题目
熟悉实验环境和实验工具
熟练使用C语言和GPOI的定义和改变
实验目的
搭建实验环境—Code Compose Studio,熟悉开发板EK-TM4C123GXL
改变编译优先级观察开平方根运行效率
实验要求
先选择不同优化级别,运行程序,观察elapsed记录的对100和230400两个数求平方根的执行时间。
使用PF1开灯和关灯语句取代用定时器测量的elapsed语句,用逻辑分析仪观察PF1波形,计算函数运算时间
板级运行程序,观察pf2灯的亮灭、观察存入内存记录的PF2状态值,以及tt所求的ss平方根值
实验过程
- 先选择不同优化级别,运行程序,观察elapsed记录的对100和230400两个数求平方根的执行时间。
ss = 230400;//100或100000;
unsigned long sum=0;
unsigned long i=10;
while(i--)
{
before = NVIC_ST_CURRENT_R;//开始计时
tt = sqrt(ss);
elapsed = (before-NVIC_ST_CURRENT_R)&0x00FFFFFF;//相减计算出sqrt计算时间
sum=sum+elapsed;
}
sum/=10;
优先级为1的10次开方平均时间
优先级为3的10次开方平均时间
- 使用PF1开灯和关灯语句取代用定时器测量的elapsed语句,用逻辑分析仪观察PF1波形,计算函数运算时间
GPIO_PORTF_DATA_R= 0x02; // turn on led LED
tt = sqrt(ss);
GPIO_PORTF_DATA_R = 0x00; // turn off led LED
优先级为1的波形
优先级为3的波形
- 板级运行程序,观察pf2灯的亮灭、观察存入内存记录的PF2状态值,以及tt所求的ss平方根值
Data的值,记录了LED的亮灭过程
当Data[i]=0
,灯灭;
当Data[i]=2
,灯亮;
Sqrt的值,记录了开根号的结果
//拍照
//Dump data to memory
unsigned long i;
unsigned long Sqrt[50];
unsigned long Data[50];
unsigned long Led;
i = 0; // array index
ss=10;
while(1)
{
Led = GPIO_PORTF_DATA_R; // read previous
Led = Led^0x02; // toggle red LED
GPIO_PORTF_DATA_R = Led; // output GPIO_PORTF_DATA_R;
tt = sqrt(ss);
if(i<50)
{
Sqrt[i] = sqrt(ss); // sqrt
Data[i] = GPIO_PORTF_DATA_R&0x02; // record PF2
i++;
ss=ss*2;
}
SysTick_Wait10ms(100);// wait 1s
}
实验总结
板子开根号速度很快,如果用灯去观察计算的时间,灯亮灭就在瞬间除非加延迟。
板子开根号速度只是灯不能捕捉,但是相对于普通加减乘除运算是很慢的了。开根号是加减乘除的500倍左右的时间。
进行加减法运算
进行乘除法运算
进行开根号运算