我有这段代码,它实现了一个简单的计数器,并通过thread_code (void *arg)函数中的printk将其写入日志文件,然后通过__init rtcode_init( void )在实时线程中实现它。这是一道考试题。
我不确定为什么代码会导致linux崩溃。是不是因为静态函数,因为如果访问函数的内存地址被多个线程访问,可能会导致争用情况?如果有人能指出代码的错误所在,那就太好了。
#define ARG 0
#define STACK_SIZE 1024
#define PRIORITY RT_SCHED_HIGHEST_PRIORITY
#define USE_FPU 1
#define NOW rt_get_time()
#define PERIOD nano2count(1000000)
/* Store data needed for the thread */
RT_TASK thread_data;
void thread_code(void *arg)
{
int counter = 0;
while (1) {
counter += 1;
printk("Counter = %d\n",counter);
}
return 0;
}
static int __init rtcode_init(void)
{
rt_set_periodic_mode();
start_rt_timer(PERIOD);
rt_task_init(&thread_data, thread_code, ARG, STACK_SIZE, PRIORITY, USE_FPU, NULL);
rt_task_make_periodic(&thread_data, NOW, PERIOD);
return 0;
}发布于 2014-10-18 01:57:08
这段代码创建了一个具有实时优先级的任务,该任务不断运行。如果您的系统只有一个CPU核心,这将阻止其他任何东西运行,从而使系统不可用。准确地说,我不认为它会“崩溃”,但它会停止对输入的响应。
https://stackoverflow.com/questions/26430633
复制相似问题