gpt4 book ai didi

c - ARM Cortex M4 处理器中耗时的测试 C 代码中出现错误 SEGV

转载 作者:行者123 更新时间:2023-11-30 17:25:14 24 4
gpt4 key购买 nike

我正在为我的 stm32f429 板编写嵌入式操作系统代码。我正在测试这段代码的运行时间:

#include <stdio.h>
#include <stdlib.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <time.h>
#include <stdint.h>


#define DEFAULT_DELAY 1

uint32_t m_nStart; //DEBUG Stopwatch start cycle counter value
uint32_t m_nStop; //DEBUG Stopwatch stop cycle counter value
#define DEMCR_TRCENA 0x01000000

/* Core Debug registers */
#define DEMCR (*((volatile uint32_t *)0xE000EDFC))
#define DWT_CTRL (*(volatile uint32_t *)0xE0001000)
#define CYCCNTENA (1<<0)
#define DWT_CYCCNT ((volatile uint32_t *)0xE0001004)
#define CPU_CYCLES *DWT_CYCCNT



#define STOPWATCH_START { m_nStart = *(*(volatile unsigned int*)0xE0001004);}//DWT_CYCCNT;}
#define STOPWATCH_STOP { m_nStop = *(*(volatile unsigned int *)0xE0001004);}




static inline void stopwatch_reset(void)
{
/* Enable DWT */
DEMCR |= DEMCR_TRCENA;
*DWT_CYCCNT = 0;
/* Enable CPU cycle counter */
DWT_CTRL |= CYCCNTENA;
}

static inline uint32_t stopwatch_getticks()
{
return CPU_CYCLES;
}

static inline void stopwatch_delay(uint32_t ticks)
{
stopwatch_reset();
while(1)
{
if (stopwatch_getticks() >= ticks)
break;
}
}

uint32_t CalcNanosecondsFromStopwatch(uint32_t nStart, uint32_t nStop)
{
uint32_t nTemp;
uint32_t n;
uint32_t SystemCoreClock = 180000000;
nTemp = nStop - nStart;

nTemp *= 1000; // Scale cycles by 1000.
n = SystemCoreClock / 1000000; // Convert Hz to MHz
nTemp = nTemp / n; // nanosec = (Cycles * 1000) / (Cycles/microsec)

return nTemp;
}



int main( int argc, char **argv )
{
int delay = DEFAULT_DELAY; // Initial value for the delay

int timeDiff = 0;

STOPWATCH_START;
printf("Try\n\n");
STOPWATCH_STOP;
timeDiff = CalcNanosecondsFromStopwatch(m_nStart, m_nStop);
printf("My function took %d nanoseconds\n", timeDiff);


return( 0 );
}

它编译时没有错误,但是当我在 stm32f429 上运行这个程序时,我收到一个 SEGV 错误,可能是在 #define STOPWATCH_START 中。也许我的寄存器有问题(?)。

代码是http://pastebin.com/qr6sF9eU (它删除了我使用的系统调用的调用)

make的输出是:http://pastebin.com/Q14xTaXH

我在 stm32f429 板上运行测试时的输出是:http://pastebin.com/sGmjZjxj

你能帮我吗?

最佳答案

NVIC 寄存器很可能受 MPU 保护,并且用户代码无法访问。使用操作系统时,你不能搞乱一切。

关于c - ARM Cortex M4 处理器中耗时的测试 C 代码中出现错误 SEGV,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27092331/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com