我在使用ARM Cortex-M4的stm32f429上实现了嵌入式Linux操作系统。在我的代码中,我需要为了个人目的而实现clocksource.h库来测量经过的时间。我系统调用的代码是:
#include <linux/syscalls.h>
#include <linux/gpio.h>
#include <linux/delay.h>
#include <linux/time.h>
#include <linux/clocksource.h>
SYSCALL_DEFINE2(mycall, int*, arg1, char *, arg2)
{
struct timecounter *tc;
struct cyclecounter *cc;
long int value;
local_irq_disable(); /*Disabling local interrupt*/
spin_lock(&my_lock);
timecounter_init(&tc,&cc,0);
printk(KERN_INFO "PRINT\n");
value = timecounter_read(&tc);
local_irq_enable(); /*Enabling local interrupt*/
return( value );
}
当我在我的主板上加载测试应用程序并运行时,输出结果给了我:
KERNEL: fault at 0xd00877e0 [pc=0xd00877e0, sp=0xd0019f58]
Escalated to Hard Fault
Invalid ISA state
Pid: 17, comm: test
CPU: 0 Not tainted (2.6.33-arm1 #594)
pc : [<d00877e0>] lr : [<d009ec19>] psr: 6000000b
sp : d0019f58 ip : 08060501 fp : 00000000
Code dump at pc [d00877e0]:
d0094a69 d009122f d0087dc5 d00b2231
r10: 01000000 r9 : d0018000 r8 : d0257ec4
r7 : 00000000 r6 : 00000000 r5 : ffffffff r4 : d0019f84
r3 : d00877e0 r2 : 00000000 r1 : d0019f80 r0 : d0019f80
Flags: nZCv IRQs on FIQs on Mode UK11_26 ISA ARM Segment kernel
Kernel panic - not syncing:
Rebooting in 10 seconds..
我该如何解决?我必须初始化cyclecounter cc?如果是,怎么样?
答案 0 :(得分:0)
如果您使用Emcraft的SDK,那么您需要检查CFLAGS和LDFLAGS 像这样
CFLAGS="-Os -mcpu=cortex-m3 -mthumb -I /opt/linux-cortexm-1-12/A2F/root/usr/include"
和
LDFLAGS="-mcpu=cortex-m3 -mthumb -L/opt/linux-cortexm-1-12/A2F/root/usr/lib"