|
Вопрос по volatile |
|
|
|
 |
Ответов
|
Jan 20 2017, 04:17
|
Местный
  
Группа: Участник
Сообщений: 301
Регистрация: 13-12-15
Из: Харьков
Пользователь №: 89 682

|
Цитата(Alt.F4 @ Jan 19 2017, 09:32)  Я не против volatile, просто хочется понять, когда без него ну совсем не обойтись и код точно не будет работать. Ожидание готовности периферии - sp, twi, usart и прочее. Регистры, содержащие флаги объявлены как volatile: в противном случае неизбежно зацикливание. Но у volatile есть и обратная сторона: использовать их нужно через не-volatile копии. Совершенно искуственный, но показательный пример: Код volatile unsigned char tick = 1; volatile unsigned char res_yes_volatile=0; unsigned char res_no_volatile=0; unsigned char flag=0;
__irq void IRQ_Handler(void) { tick++; flag = tick; }
int main() { while(flag < 6) { res_yes_volatile = tick*tick; // 2*2 = 6 res_no_volatile = tick*tick; } return 0; } Имеем в итоге: 1. вечный цикл из-за того, что flag не объявлена как volatile. 2. второй оператор умножения в цикле компилятор просто выбросил за ненадобностью. 3. команды для первого оператора цикла компилятор добросовестно сгенерировал, но так как volatile-ный tick использован напрямую, без посредников, возможны коллизии типа 2*2 = 6, 5*5 = 30. Код // 16 int main() // 17 // 18 { main: LDR.N R0,??DataTable1 // 19 // 20 // 21 while(flag < 6) LDRB R1,[R0, #+3] CMP R1,#+6 BGE.N ??main_0 // 22 { // 23 res_yes_volatile = tick*tick; ??main_1: LDRB R1,[R0, #+0] LDRB R2,[R0, #+0] MULS R1,R2,R1 STRB R1,[R0, #+1] // 24 res_no_volatile = tick*tick; LDRB R1,[R0, #+0] LDRB R1,[R0, #+0] B.N ??main_1 // 25 } // 26 // 27 return 0; ??main_0: MOVS R0,#+0 BX LR ;; return
Сообщение отредактировал aiwa - Jan 20 2017, 04:18
|
|
|
|
Сообщений в этой теме
Alt.F4 Вопрос по volatile Jan 14 2017, 09:00 Lagman Для 51 в кейле такое объяснение http://www.keil.co... Jan 14 2017, 18:17 XVR Чтения этих переменных делается напрямую или тоже ... Jan 15 2017, 20:39 Alt.F4 Если вообще смотреть на проблемы в примерах, то он... Jan 15 2017, 21:05 jcxz Цитата(Alt.F4 @ Jan 14 2017, 12:00) В оче... Jan 16 2017, 13:19 Укушенный воблой Цитата(jcxz @ Jan 16 2017, 14:19) Атомарн... Jan 18 2017, 16:14  zltigo Цитата(Укушенный воблой @ Jan 18 2017, 18... Jan 18 2017, 17:06   Baser Цитата(zltigo @ Jan 18 2017, 19:06) Никак... Jan 18 2017, 18:09 SlavaV Тогда и я своё видение изложу
В документацию не л... Jan 16 2017, 14:43 jcxz Цитата(SlavaV @ Jan 16 2017, 17:43) PS а ... Jan 16 2017, 15:00 SlavaV Переменная не "путешествует" во время вы... Jan 16 2017, 15:14 jcxz Цитата(SlavaV @ Jan 16 2017, 18:14) Перем... Jan 16 2017, 15:41 SlavaV int x;
void f()
{
x += N1; //1
...
x += N2; //2... Jan 16 2017, 15:55 Сергей Борщ QUOTE (SlavaV @ Jan 16 2017, 17:55) вы сч... Jan 16 2017, 16:44 gerber Цитата(SlavaV @ Jan 16 2017, 18:55) вы сч... Jan 16 2017, 16:55  jcxz Цитата(gerber @ Jan 16 2017, 19:55) А в в... Jan 16 2017, 17:40 Alt.F4 Снова приведен пример, как и во всех статьях. В ре... Jan 16 2017, 17:10 XVR Пример (https://gcc.godbolt.org/)
Код (компилятор ... Jan 16 2017, 19:03 Alt.F4 Цитата... Дальше например можете в цикле ждать ког... Jan 17 2017, 07:57 jcxz Цитата(Alt.F4 @ Jan 17 2017, 10:57) Если ... Jan 17 2017, 14:01 RobFPGA Приветствую!
Не забывайте о том что не только... Jan 17 2017, 14:20 Alt.F4 jcxz, вот именное такие: "например можете в ц... Jan 17 2017, 21:45 jcxz Цитата(Alt.F4 @ Jan 18 2017, 00:45) Значи... Jan 18 2017, 08:39 Kabdim А если включить lto то оптимизироваться будет совс... Jan 18 2017, 08:44 Alt.F4 jcxz, сейчас я тоже начну вас оскорблять
Изменять... Jan 18 2017, 10:53 jcxz Цитата(Alt.F4 @ Jan 18 2017, 13:53) jcxz,... Jan 18 2017, 11:12 RobFPGA Приветствую!
Цитата(Alt.F4 @ Jan 18 2017... Jan 18 2017, 11:23 Alt.F4 jcxz, читаю "на входе в эту функцию, компилят... Jan 18 2017, 11:24 RobFPGA Приветствую!
Цитата(Alt.F4 @ Jan 18 2017,... Jan 18 2017, 11:49 Baser Цитата(Alt.F4 @ Jan 18 2017, 13:24) jcxz,... Jan 18 2017, 11:52 jcxz Цитата(Alt.F4 @ Jan 18 2017, 14:24) И как... Jan 18 2017, 14:05 Alt.F4 RobFPGA, думаю, если буфер объявлен глобально, то ... Jan 18 2017, 12:33 Baser Цитата(Alt.F4 @ Jan 18 2017, 14:33) Ну ка... Jan 18 2017, 14:06  RobFPGA Приветствую!
Цитата(Baser @ Jan 18 2017, ... Jan 18 2017, 15:08 aiwa Цитата(Alt.F4 @ Jan 17 2017, 23:45) RobFP... Jan 18 2017, 13:54 DASM Господа никогда не понимал таких споров. Процесс в... Jan 18 2017, 14:32 Baser Цитата(RobFPGA @ Jan 18 2017, 17:08) Прос... Jan 18 2017, 16:38 Укушенный воблой А если я работаю с переменной через указатель на н... Jan 18 2017, 18:31 jcxz Цитата(Укушенный воблой @ Jan 18 2017, 21... Jan 19 2017, 07:37 aiwa Цитата(Укушенный воблой @ Jan 18 2017, 20... Jan 18 2017, 22:36 Укушенный воблой Цитата(aiwa @ Jan 18 2017, 22:36) Правила... Jan 19 2017, 04:18  XVR Цитата(Укушенный воблой @ Jan 19 2017, 07... Jan 19 2017, 06:34   Укушенный воблой Цитата(XVR @ Jan 19 2017, 06:34) Нет. Ком... Jan 19 2017, 17:24    XVR Цитата(Укушенный воблой @ Jan 19 2017, 20... Jan 19 2017, 19:21     Укушенный воблой Цитата(XVR @ Jan 19 2017, 20:21) Так не б... Jan 19 2017, 19:42      XVR Цитата(Укушенный воблой @ Jan 19 2017, 22... Jan 19 2017, 19:52 Alt.F4 jcxz, а мне Ваши примеры напоминают троллинг, повт... Jan 19 2017, 06:54 jcxz Цитата(Alt.F4 @ Jan 19 2017, 09:54) jcxz,... Jan 19 2017, 07:09 jcxz Цитата(Alt.F4 @ Jan 19 2017, 09:54) Да и ... Jan 19 2017, 07:18 Сергей Борщ QUOTE (Alt.F4 @ Jan 19 2017, 08:54) Пока ... Jan 19 2017, 07:11 Alt.F4 ЦитатаОчевидно что Вы и читать исходники не умеете... Jan 19 2017, 07:32 Укушенный воблой Вы ошибаетесь.
Просто я не хочу обсуждать вкус уст... Jan 19 2017, 20:30 XVR Цитата(Укушенный воблой @ Jan 19 2017, 23... Jan 20 2017, 09:40  AHTOXA Цитата(XVR @ Jan 20 2017, 14:40) Требую п... Jan 20 2017, 11:19   zltigo Цитата(AHTOXA @ Jan 20 2017, 13:19) Ну вы... Jan 20 2017, 20:21 jcxz Цитата(aiwa @ Jan 20 2017, 07:17) res_yes... Jan 20 2017, 10:03 Укушенный воблой Цитата(aiwa @ Jan 20 2017, 05:17) 2. втор... Jan 21 2017, 09:09  XVR Цитата(Укушенный воблой @ Jan 21 2017, 12... Jan 23 2017, 10:13 ViKo Побейтесь еще за пустой мешок! Jan 20 2017, 09:57 aiwa Цитата(jcxz @ Jan 20 2017, 12:03) Здесь к... Jan 20 2017, 10:28 sigmaN Цитата(Сергей Борщ @ Jan 19 2017, 10:11) ... Jan 22 2017, 17:59 Укушенный воблой Нет.
Если с умом подходить к разработке программ... Jan 25 2017, 15:51
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|