页次: 1
最近在研究D1跑裸机程序,工程使用xboot大佬的例程https://whycan.com/t_6683.html/,发现运行很慢,遂使用逻辑分析仪简单测量运行速度,如下所示:
void delay_clk(uint32_t count)
{
for (volatile uint32_t i = 0; i < count; i++) {
__asm__ volatile ("nop");
}
}
#define GPIO_INPUT (0x00)
#define GPIO_OUTPUT (0x01)
void xboot_main(void)
{
//小灯
d1_set_gpio_mode(GPIO_PORT_B, GPIO_PIN_12, GPIO_OUTPUT);
d1_set_gpio_mode(GPIO_PORT_D,GPIO_PIN_11,GPIO_OUTPUT);
d1_set_gpio_val(GPIO_PORT_B, GPIO_PIN_12, 0);
while(1)
{
d1_set_gpio_val(GPIO_PORT_D, GPIO_PIN_11, 1);
delay_clk(1000);
d1_set_gpio_val(GPIO_PORT_D, GPIO_PIN_11, 0);
delay_clk(1000);
}
}
delay_clk(1000)预计消耗4000-5000时钟周期(方式如有问题还望指出),测量得delay_clk(1000)实际耗时334us(忽略GPIO翻转时间),这显然远远达不到1Ghz的运行速度。
因为程序是在DDR中运行,所以初步怀疑是DDR配置问题,DDR型号是H5TQ4G63EFR。为了确认这个问题,考虑使用xfel工具将程序直接烧入SRAM A1的位置0x00020000,并在这个位置直接运行,于是修改link文件ram : org = 0x00020000, len = 32K,然后使用xfel工具烧录并直接在内存运行,测得耗时288us,快了一些,但速度还是不对。希望请教下我测量运行速度的方式是否有问题?程序运行慢可能的原因?
页次: 1