Инициализация глобальной переменной ядра

Я пытаюсь изменить механизм планирования в Minix203. Мне нужна почему-то глобальная переменная

unsigned short QuantTime[3] = {1,1,1};

Я поместил его в файл /usr/src/kernel/proc.c, а затем добавил

extern unsigned short QuantTime[3];

в /usr/src/kernel/proc.h

Я сделал системный вызов, который принимает значение из массива, но кажется, что массив остается инициализированным до 0, хотя я инициализировал его с 1.

Системный вызов работает хорошо, потому что с другим я могу установить значения в этом массиве, и они прочитают их еще раз, получив ожидаемые результаты.

Я делаю системный вызов следующим образом: тестовая программа -> _syscall -> _taskcall -> здесь, в /usr/src/kernel/system.c. Я получаю значение

Как я могу инициализировать этот массив тогда?


person Julian Rubin    schedule 22.03.2015    source источник


Ответы (2)


extern int var = 0;
int main(void)
{
 var = 10;
 return 0;
}

Когда extern используется с переменной, она просто объявляется не определенной. однако в качестве исключения, когда переменная extern объявляется с инициализацией (как в вашем случае), она также принимается как определение переменной.

person ashish    schedule 22.03.2015
comment
Итак, ответ: он должен работать правильно? Для меня это не имеет смысла... Значит, extern переменной с инициализацией делает копию? - person Julian Rubin; 22.03.2015

Кажется, где-то еще что-то пошло не так. Взял свежую версию minix 2.0.3 и больше проблем с этим массивом не было.

person Julian Rubin    schedule 22.03.2015