|
Про реентерабельность, малоизвестная фича GCC |
|
|
|
Feb 15 2009, 23:51
|
;
     
Группа: Участник
Сообщений: 5 646
Регистрация: 1-08-07
Пользователь №: 29 509

|
Только не говорите, что знали и часто пользуетесь!  В общем, тем, кому позарез нада получить сабж, оказалось все очень просто Код void somefunc (volatile int param) { volatile int local1; volatile char local2; //body local1 |= param; return; } Как объявили все volatile - компилятор все, включая входные параметры, кладет в стек-фрейм. И логика проста: без соответствующих оптимизаций функции генерятся реентерабельными. Volatile как-раз и отключает эту оптимизацию локальных переменных. В общем, в мануале ГЦЦ настолько туманно это описано, что побудило поделиться радостной новостью.
|
|
|
|
|
 |
Ответов
|
Feb 16 2009, 07:10
|
;
     
Группа: Участник
Сообщений: 5 646
Регистрация: 1-08-07
Пользователь №: 29 509

|
Цитата(Сергей Борщ @ Feb 16 2009, 03:37)  А как стековый фрейм связан с реентерабельностью? Обеспечивает копию блока локальных переменных - одно из необходимых условий. ЗЫ: Кстати, в WinAVR красивый код коррекции стека Код in r0,SREG cli .... атомарные операции out SPL,YL out SREG,r0 out SPH,YH Поскольку сам так никогда не делал - на первый взгляд показалось, что бага - прерывания разрешаются при восстановлении SREG до того как завершена коррекция стека. На самом деле все правильно, т.к. следующая после out SREG,r0 команда гарантированно выполнится и прерывание наступит только после out SPH,YH. Таким образом, прерывания разрешаются максимально раньше
|
|
|
|
Сообщений в этой теме
_Pasha Про реентерабельность Feb 15 2009, 23:51 Rst7 Вы меня, конечно, извините, но это - "ацкий б... Feb 16 2009, 00:13  aesok Цитата(_Pasha @ Feb 16 2009, 10:10) Обесп... Feb 16 2009, 07:51   demiurg_spb Цитата(aesok @ Feb 16 2009, 10:51) В Атме... Feb 16 2009, 09:10   ReAl Цитата(aesok @ Feb 16 2009, 09:51) В Атме... Feb 16 2009, 09:56 Rst7 ЦитатаВот условия реентерабельности:
Тут _Pasha и... Feb 16 2009, 08:26 Сергей Борщ Цитата(Rst7 @ Feb 16 2009, 10:26) Тут _Pa... Feb 16 2009, 08:51 _Pasha Цитата(Rst7 @ Feb 16 2009, 12:26) Тут _Pa... Feb 16 2009, 23:30  ReAl Цитата(_Pasha @ Feb 17 2009, 01:30) Кодty... Feb 17 2009, 07:50   _Pasha Цитата(ReAl @ Feb 17 2009, 10:50) возможн... Feb 17 2009, 08:27    ReAl Цитата(_Pasha @ Feb 17 2009, 10:27) Если ... Feb 17 2009, 16:40     ReAl Цитата(ReAl @ Feb 17 2009, 18:40) Не увер... Mar 15 2009, 12:52 _Pasha Цитата(Rst7 @ Feb 16 2009, 03:13) Куда бе... Feb 16 2009, 08:46 Rst7 Че то я уже не пойму. Судя по предыдущей теме, ник... Feb 16 2009, 09:08 Rst7 Лучше бы - не ядро править, а в компиляторы вменяе... Feb 16 2009, 10:12 ReAl Цитата(Rst7 @ Feb 16 2009, 12:12) Лучше б... Feb 16 2009, 20:42 Rst7 Нет, с плюсами конечно, неплохо получается. Но хот... Feb 16 2009, 21:52 ReAl Цитата(Rst7 @ Feb 16 2009, 23:52) Нет, с ... Feb 16 2009, 22:11 _Pasha В общем, пока ясно одно: нельзя смешивать синхронн... Feb 17 2009, 17:05 _Pasha Еще одна ТАСКАЛКА (от слова task) получилась.
Не... Sep 13 2009, 07:01 ReAl Цитата(_Pasha @ Sep 13 2009, 10:01) Еще о... Sep 13 2009, 09:21  _Pasha Цитата(ReAl @ Sep 13 2009, 12:21) Да, sys... Sep 13 2009, 11:55   ReAl Цитата(_Pasha @ Sep 13 2009, 14:55) Имхо,... Sep 13 2009, 17:02    _Pasha Цитата(ReAl @ Sep 13 2009, 20:02) Ну и чт... Sep 13 2009, 20:19     ReAl Цитата(_Pasha @ Sep 13 2009, 23:19) Допус... Sep 14 2009, 08:58 _Pasha Понял, спасибо. Но не сразу Если локальных параме... Sep 15 2009, 05:17 _Pasha Кстати, о protothread
parallel.h
CODE
#ifndef PAR... Sep 15 2009, 06:42 _Pasha Решил скрестить прототредоподобную кооперативку и ... Dec 25 2009, 08:47
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|