|
__LDREX __STREX в STM32F407 |
|
|
|
Jun 4 2017, 13:18
|
Участник

Группа: Участник
Сообщений: 23
Регистрация: 23-03-15
Пользователь №: 85 852

|
Всем доброе время суток! IDE - IAR+плагин IAR для eclipse+eclipse. Решил проверить, как работает синхронизация с использованием __LDREX/__STREX. Пишем следующий код CODE typedef struct { ... volatile unsigned long sync; //переменная для синхонизации доступа к данному элементу } burst_measur;
burst_measur cur_mes;
void mpu_cfg_test() { //настраиваем область внутренней RAM, как разделяемую __DMB(); SCB->SHCSR &= ~SCB_SHCSR_MEMFAULTENA_Msk; MPU->CTRL = 0U;
MPU->RNR = 0UL; MPU->RBAR = 0x20000000UL; MPU->RASR = (0x10UL << MPU_RASR_SIZE_Pos) | MPU_RASR_C_Msk | MPU_RASR_S_Msk | (0x3 << MPU_RASR_AP_Pos) | MPU_RASR_ENABLE_Msk;
MPU->CTRL = MPU_CTRL_PRIVDEFENA_Msk | MPU_CTRL_ENABLE_Msk; SCB->SHCSR |= SCB_SHCSR_MEMFAULTENA_Msk; __DSB(); __ISB();
//выполняем запрос эксклюзивного доступа к переменной cur_mes.sync DWORD sync=0; sync = __LDREX(&cur_mes.sync); __DMB(); soft_int_ini(); //настойка программного прерывания soft_int_on(); //вызов программного прерывания __WFI(); } в обработчике программного прерывания: CODE DWORD sync; do { sync = __LDREX(&cur_mes.sync); sync++; sync = __STREX(sync, &cur_mes.sync); } while (sync); Т.е. сначала выполняется __LDREX(&cur_mes.sync), потом происходит прерывание и выполняется __LDREX(&cur_mes.sync) + __STREX(sync, &cur_mes.sync). По всем документациям, как я их понял, __STREX(sync, &cur_mes.sync) должна возвратить "не ноль", однако возвращает "ноль". Помогите, пожалуйста, разобраться, что я делаю не правильно?
|
|
|
|
|
 |
Ответов
|
Jun 8 2017, 11:54
|
Профессионал
    
Группа: Свой
Сообщений: 1 241
Регистрация: 15-11-05
Из: Челябинск
Пользователь №: 10 882

|
Цитата(jcxz @ Jun 8 2017, 11:17)  И правильно! Через DMA и пр. - ЗАЧЕМ??? Импульсивный Вы наш, по делу бы что сказали! Цитата(AHTOXA @ Jun 8 2017, 11:21)  Добавьте в ваш список выводов, что монитор может срабатывать на любое изменение уровня прерываний Добавил, куда можно было. Весь этот раздел A3.4 - сплошные выводы. Читать и читать. Цитата(AHTOXA @ Jun 8 2017, 11:21)  ЗЫ. Хотя насчёт DMA - я лично не верю. В этом случае при непрерывно идущих быстрых транзакциях DMA можно наглухо зависнуть в LDREX/STREX. Мне тоже идея с DMA не очень нравится. Вроде как не обязательно Store от ядра должно исходить.... В одном месте так написано, в другом - по другому... Вобщем, все на откуп реализации:
Опыты, только опыты... Ни в одной докуметации на MCU не видел таких тонкостей.
|
|
|
|
|
Jun 8 2017, 20:32
|
Гуру
     
Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713

|
Цитата(AVI-crak @ Jun 8 2017, 15:21)  Неявная запись (PUSH) - является отложенным событием (как и любая запись кучи регистров), код выполняется параллельно, сбросить физику с подтверждением не получится, но можно немного подождать Сколько? Сколько вешать в граммах? Цитата(AVI-crak @ Jun 8 2017, 15:21)  в пустом цикле или сбросить конвейер. Это что такое? И как оно поможет? Цитата(AVI-crak @ Jun 8 2017, 15:21)  И наверное главное, давайте указывать явно - какой чип в тесте на данный момент. DMB/DSB/и прочие B - спасут отца русской демократии  Цитата(LightElf @ Jun 8 2017, 15:44)  На Cortex-M, которые по определению одноядерные Вы это расскажите NXP с их линейкой LPC43xx. Про свои определения. Или Ваш мир Cortex-M ограничен STM32? Курица - не птица, Cortex-M - не STM! Рифма одна-ко. Надо в подпись внести ©
|
|
|
|
|
Jun 9 2017, 07:50
|

Профессионал
    
Группа: Свой
Сообщений: 1 215
Регистрация: 22-02-05
Пользователь №: 2 831

|
Коли SVC синхронное и его не получиться использовать нормально в прерываниях (для lockfree решений), то может быть для этой цели подойдет pendSV?
А, чтобы разделить переключатель контекста rtos и юзерские вызовы этого самого pendSV, скажем, в R0 кладем адрес функции, а в остальные регистры ее параметры, а уже внутри pendSV все это разбираем. Приоритет pendSV самый низкий (ниже лишь systick). Тогда другой вызов pendSV прервать его не сможет, а лишь поставить в очередь. Т.е. обеспечивается атомарность действий как в прерываниях, так и в основном коде. Вижу одно ограничение - передавать в такие функции указатели нежелательно, а можно лишь готовые данные (прямо в регистры R1...), т.е. ограничен объем передаваемых данных. В противном случае нет никакой гарантии, что к моменту вызова соотв. функции (внутри pendSV) данные по указателям будут актуальны.
Или тут есть какие-то подводные камни? зы. Предположительно вангую грабли со вложенными вызовами (вытесняющие прерывания), где оба обработчика вызывают pendSV...
--------------------
Кругозор некоторых людей - круг с нулевым радиусом. Они называют его "точкой зрения".
|
|
|
|
|
Jun 9 2017, 10:58
|

Профессионал
    
Группа: Свой
Сообщений: 1 215
Регистрация: 22-02-05
Пользователь №: 2 831

|
Цитата(jcxz @ Jun 9 2017, 13:33)  PendSV не "вызывают" ... Да, это-то понятно, это все - придирки к словам, а речь о другом: как сделать так, чтобы pendSV могли вызывать взводить разные обработчики, особенно вложенные друг в друга, но так, чтобы в стеке сформировалась очередь данных, которые позволят этот pendSV обработать несколько раз подряд и не потерять ни одного запроса и не разрушить стек? Понятно, что pendSV не для этого был задуман, но тем не менее )) Размышляя вслух дальше - выполняемый в данный момент pendSV может прервать другое более приоритетное прерывание и опять накидать в стек новых данных перед взводом pendSV, Или использовать внутри pendSV вызов соотв. SVC, который имеет приоритет выше pendSV... Заумно как-то выходит. Но возможно ли осуществить что-то подобное? Цель - избежать критических секций с запретом прерываний и "капризного" LDREX/STREX.
--------------------
Кругозор некоторых людей - круг с нулевым радиусом. Они называют его "точкой зрения".
|
|
|
|
|
Jun 9 2017, 13:02
|
Знающий
   
Группа: Участник
Сообщений: 758
Регистрация: 27-08-08
Пользователь №: 39 839

|
Цитата(Forger @ Jun 9 2017, 13:58)  как сделать так, чтобы pendSV могли вызывать взводить разные обработчики, особенно вложенные друг в друга, но так, чтобы в стеке сформировалась очередь данных, которые позволят этот pendSV обработать несколько раз подряд и не потерять ни одного запроса и не разрушить стек? Очередь данных в стеке не формируется - формируйте ее отдельно, а потом обрабатывайте в PendSV. Но для данной задачи это неэффективно и не имеет смысла - есть LDREX/STREX, если его не хватает, то есть запрет части или всех прерываний.
|
|
|
|
|
Jun 9 2017, 13:20
|

Профессионал
    
Группа: Свой
Сообщений: 1 215
Регистрация: 22-02-05
Пользователь №: 2 831

|
Цитата(Шаманъ @ Jun 9 2017, 16:02)  Очередь данных в стеке не формируется - формируйте ее отдельно, а потом обрабатывайте в PendSV. А все равно грабли - процесс формирования очереди должен быть защищен критической секцией, масло масляное ((( Цитата Но для данной задачи это неэффективно и не имеет смысла - есть LDREX/STREX, если его не хватает, то есть запрет части или всех прерываний. Согласен, но хочется ведь гипотетического универсального решения, вот и спрашиваю ))) Короче, задача довольно тривиальная: программная очередь, набиваемая в обработчике (скажем, очередь байтов), там же сигналим счетным семафором, переходим к соотв. задаче, которая это семафор ждет и выгребает из этой же очереди байты. Нужно защищать указатели (голова/хвост) очереди от прерывания. Сейчас сделано просто и логично - в конкретном экземпляре очереди запрещаются прерывания лишь от того, кто использует эту самую очередь - от USART.
--------------------
Кругозор некоторых людей - круг с нулевым радиусом. Они называют его "точкой зрения".
|
|
|
|
|
Jun 9 2017, 14:14
|
Знающий
   
Группа: Участник
Сообщений: 758
Регистрация: 27-08-08
Пользователь №: 39 839

|
Цитата(Forger @ Jun 9 2017, 16:20)  хочется ведь гипотетического универсального решения Если пишите под GCC, то можно посмотреть на atomic built-in функции https://gcc.gnu.org/onlinedocs/gcc-4.4.3/gc...c-Builtins.html . Цитата Короче, задача довольно тривиальная: программная очередь, набиваемая в обработчике (скажем, очередь байтов), там же сигналим счетным семафором, переходим к соотв. задаче, которая это семафор ждет и выгребает из этой же очереди байты. Нужно защищать указатели (голова/хвост) очереди от прерывания. Интересно зачем? Если это что-то типа кольцевого буфера приделанного к UART, то один указатель изменяется только в задаче, а второй только в прерывании. Пересечения между ними не происходит. Семафор это головная боль ОС. Вот и все. У меня сделано похожим образом.
|
|
|
|
|
Jun 9 2017, 14:30
|

Профессионал
    
Группа: Свой
Сообщений: 1 215
Регистрация: 22-02-05
Пользователь №: 2 831

|
Цитата(Шаманъ @ Jun 9 2017, 17:14)  Интересно зачем? Если это что-то типа кольцевого буфера приделанного к UART, то один указатель изменяется только в задаче, а второй только в прерывании. Пересечения между ними не происходит. Еще как происходит - я контролирую переполнение и исчерпание очереди (соотв. ловушки/логи)! Если в задаче в процессе извлечения свежего байта из очереди пришел еще один новый байт, который нужно быстро положить в ту же очередь, то без соотв. критических секций получим что угодно, обычно получаем HF. Поэтому эти две вещи нужно изолировать - пока достаем байт из очереди (в задаче), временно запрещаем прерывания от того, кто наполняет эту очередь. Именно это я и описал выше. У меня очередь сделана в виде шаблона, всего один параметр - тип данных. При создании экземпляра очереди ей передается ссылка на класс Interrupt, в котором есть два обязательным метода disable и enable. Для каждой очереди он может быть свой, поэтому запрещаются лишь те прерывания, которые конфликтуют с конкретным экземпляром очереди. Цитата Семафор это головная боль ОС. При чем тут это? Я лишь привел пример с осью, как наиболее универсальный. Но кто не пользуется осью, могут просто поллить некий флажок в основном коде, а в прерываниях его взводить или инкрементировать. Способ оповещения основного кода в данном случае не имеет никакого значения. Отклоняемся от темы )))
--------------------
Кругозор некоторых людей - круг с нулевым радиусом. Они называют его "точкой зрения".
|
|
|
|
|
Jun 9 2017, 15:40
|
Знающий
   
Группа: Участник
Сообщений: 758
Регистрация: 27-08-08
Пользователь №: 39 839

|
Цитата(Forger @ Jun 9 2017, 17:30)  При чем тут это? Я лишь привел пример с осью, как наиболее универсальный. Но кто не пользуется осью, могут просто поллить некий флажок в основном коде, а в прерываниях его взводить или инкрементировать. Способ оповещения основного кода в данном случае не имеет никакого значения. Отклоняемся от темы ))) Это как раз причина по которой у меня с ОС не происходит, а с "неким флажком" происходит. Поясняю: Если работа задачи, которая извлекает данные из очереди управляется семафором через ОС, то "недополнения" очереди возникнуть просто не может - задача блокируется и ожидает когда появятся данные. Поэтому указатель "хвоста" в полной безопасности. Теперь про голову - данные из UART выгребаем в прерывании, в этом же прерывании увеличиваем счетчик семафора и добавляем в очередь. Чтобы избежать переполнения очереди достаточно проверить счетчик семафора. Вот собственно и все. Счетчик семафора это проблема ОС, остальное (очередь и указатели на голову/хвост) в полной безопасности. Если интересно, как сделана у меня в ОС работа с семафорами, то через те же LDREX/STREX  Правда это если не касаться вопросов переключения задач и системных вызовов, но то уже точно другая тема.
|
|
|
|
|
Jun 9 2017, 16:27
|

Профессионал
    
Группа: Свой
Сообщений: 1 215
Регистрация: 22-02-05
Пользователь №: 2 831

|
Цитата(Шаманъ @ Jun 9 2017, 18:40)  Это как раз причина по которой у меня с ОС не происходит, а с "неким флажком" происходит. Поясняю: Да при чем тут семафор, ось, флажки и т.п.??? Я говорю про совсем другое - манипулирование индексами головы, хвоста и изменяемых данных которые должны меняться в едином непрерывном блоке кода. Если обработчик прерываний разорвет эту цепочку в самом неподходящем месте, то рано или поздно произойдет HF. Цитата(AVI-crak @ Jun 9 2017, 17:38)  Приоритет SVC - 0. Пользовательские прерывания 1~14. Системный таймер, и таймер реального времени =15. Поменять шило на мыло? По вашей логике получится, что пока этот приоритетный SVC не отработает, ни одно более важное аппаратное прерывание не пройдет. SVC с таким высоким приоритетом, вызываемые из других менее приоритетных прерываний по сути временно задирает их собственный приоритет, который был "ниже плинтуса", отбирая "право голоса" у более приоритетных прерываний. На лицо - инверсия приоритетов. С чем боролись на то и напоролись. Ни чем не лучше глобальной критической секции (запрет/разрешение всех прерываний). А должно быть совсем иначе - срочные и архиважные аппаратные прерывания должны отработаться предельно быстро, куда надо просемафорить и тут же освободить процессор.
--------------------
Кругозор некоторых людей - круг с нулевым радиусом. Они называют его "точкой зрения".
|
|
|
|
|
Jun 9 2017, 17:08
|
Знающий
   
Группа: Участник
Сообщений: 758
Регистрация: 27-08-08
Пользователь №: 39 839

|
Цитата(Forger @ Jun 9 2017, 19:27)  Я говорю про совсем другое - манипулирование индексами головы, хвоста и изменяемых данных которые должны меняться в едином непрерывном блоке кода. Если обработчик прерываний разорвет эту цепочку в самом неподходящем месте, то рано или поздно произойдет HF. От же ж...ну как Вам еще объяснить. Читайте внимательно и думайте: 1. Указатель на голову (куда добавляются данные) он используется только в прерывании которое добавляет данные, только там, и больше нигде. 2. Указатель на хвост (откуда вычитываются данные) он используется только в задаче которая читает данные, только там, и больше нигде. Синхронизация делается семафором, как и защита от переполнения/недополнения. К семафору есть доступ и у задачи, и у прерывания, но он делается через ОС. Теперь понятно? Если нет, то перечитайте пожалуйста еще раз, ну или несколько раз - не знаю как объяснить иначе...
|
|
|
|
|
Jun 9 2017, 17:23
|

Профессионал
    
Группа: Свой
Сообщений: 1 215
Регистрация: 22-02-05
Пользователь №: 2 831

|
Цитата(Шаманъ @ Jun 9 2017, 20:08)  От же ж...ну как Вам еще объяснить. Читайте внимательно и думайте: Я про Фому, а он - про Ерему ... Ясен пень, что голова и хвост изменяются в разным местах - один в фоне задач, другой - в перрывании, но ! Чтобы проверить переполнение/исчерпание, нужно контроллировать в непрерывном куске кода ОБА указателя/индекса. Это можно делать только там, где производите изменение этих самых указателей/индексов - в прерывании и в фоне задач. В прерывании это не проблема - защищать ничего не нужно, достаточно лишь не класть в буфер новые данные и кинуть соотв. сообщение/исключение. А в фоне задачи нужно защищать обращение к ОБОИМ указателям в некой критической секции, иначе невозможно контроллировать подобные аварийные события. Если этого не делать, то буфер может быть переполнен/исчерпан так, что об этом невозможно будет узнать. Также реализуется обратная ситуация - задача кладет данные в буфер, взводит нужное прерывание и уже в соотв. обработчике буфер выгребается и отправляется во вне. Чтобы положить данные в буфер в фоне задачи, нужно обращаться в непрерывном куске кода к ОБОИМ указателям. Поэтому тут нужна критическая секция или что-то подобное. Цитата Синхронизация делается семафором... Точно, я про Фому, а он - про Ерему )))
--------------------
Кругозор некоторых людей - круг с нулевым радиусом. Они называют его "точкой зрения".
|
|
|
|
|
Jun 9 2017, 17:40
|
Знающий
   
Группа: Участник
Сообщений: 758
Регистрация: 27-08-08
Пользователь №: 39 839

|
Цитата(Forger @ Jun 9 2017, 20:23)  Чтобы проверить переполнение/исчерпание, нужно контроллировать в непрерывном куске кода ОБА указателя/индекса. Нет. Достаточно проверить состояние семафора.Цитата А в фоне задачи нужно защищать обращение к ОБОИМ указателям в некой критической секции, иначе невозможно контроллировать подобные аварийные события. Если этого не делать, то буфер может быть переполнен/исчерпан так, что об этом невозможно будет узнать. Если напрячься и таки подумать, то в задаче буфер переполнен не модет быть вообще, ибо она данные только читает. А исчерпан не может быть т.к. задача синхронизирована семафором значение которого дает кол-во данных в очереди. Про прерывание Вы и сами написали. Так кто там про Фому Цитата Также реализуется обратная ситуация - задача кладет данные в буфер, взводит нужное прерывание и уже в соотв. обработчике буфер выгребается и отправляется во вне. Чтобы положить данные в буфер в фоне задачи, нужно обращаться в непрерывном куске кода к ОБОИМ указателям. Поэтому тут нужна критическая секция или что-то подобное. Да не нужно - достаточно семафора. P.S. Может быть Вы не так понимаете что такое семафор. У меня это объект синхронизации задач, который может принимать значения от 0 до некоторого MAX. Счетчик семафора показывает доступность ресурса (в данном случае кол-во данных в очереди). Задача может запросить конкретное кол-во данных или диапазон (от и до) - если нужное кол-во доступно, то задача получит запрошенное кол-во данных, если нет, то будет приостановлена, пока не будет доступно запрошенное кол-во данных.
|
|
|
|
|
Jun 9 2017, 18:04
|

Профессионал
    
Группа: Свой
Сообщений: 1 215
Регистрация: 22-02-05
Пользователь №: 2 831

|
Цитата(Шаманъ @ Jun 9 2017, 20:56)  Конечно, ибо то, о чем я пишу работает  И самолеты летают. Но иногда, увы, падают  Цитата ОК поставим вопрос по-другому, каким образом может быть переполнен буфер в задаче, которая из него только читает? Если она только читает, то буфер со временем просто переполнится, чтобы избежать этого, из буфера нужно не просто читать данные, но и изменять соотв. указатель. При заполнении буфера (в прерывании) нужно сравнивать ОБА указателя. Если это прерывание возникнет между чтением данных в задаче и изменением соотв. указателя, то будет беда. Обнаружить ее крайне сложно. При обратной ситуации - задача набивает буфер для передачи через прерывание - нужно контролировать переполнение этого буфера, обращаясь к обоим указателям. Я делал это несколько иначе, использовал счетчик свободного места, вообще не сравнивая указатели. Это получается несколько быстрее, но отъедает немного места в памяти. Обращение к этому счетчику и изменение соотв. указателей, должно быть непрерывным. Иначе - HF
--------------------
Кругозор некоторых людей - круг с нулевым радиусом. Они называют его "точкой зрения".
|
|
|
|
|
Jun 9 2017, 18:54
|
Знающий
   
Группа: Участник
Сообщений: 758
Регистрация: 27-08-08
Пользователь №: 39 839

|
Цитата(Forger @ Jun 9 2017, 21:04)  И самолеты летают. Но иногда, увы, падают  Я тоже могу подколоть - если Вам хочется позаниматься словоблудием, то это не ко мне. Цитата Если она только читает, то буфер со временем просто переполнится, чтобы избежать этого, из буфера нужно не просто читать данные, но и изменять соотв. указатель. Гениально. Для меня чтение из очереди это всегда было как получение данных, так и коррекция указателя. Цитата При заполнении буфера (в прерывании) нужно сравнивать ОБА указателя. Если это прерывание возникнет между чтением данных в задаче и изменением соотв. указателя, то будет беда. И в чем беда? Прочитали данные, потом произошло прерывание (в нем сравнили указатели и изменили указатель головы, кстати, в некоторых случаях можно указатели и вообще не сравнивать - достаточно кол-ва данных в очереди = значения семафора), потом (когда возвратились в задачу) изменили указатель хвоста - что мы имеем - в прерывании размер очереди был на 1 ячейку меньше, все. Никаких проблем нет. Сами же выше написали про это, а теперь "надумали" проблему там, где ее нет. Цитата При обратной ситуации - задача набивает буфер для передачи через прерывание Обратная задача решается так же, но какой смысл про нее, когда с первой не закончили. Цитата Я делал это несколько иначе, использовал счетчик свободного места, вообще не сравнивая указатели. Это получается несколько быстрее, но отъедает немного места в памяти. Обращение к этому счетчику и изменение соотв. указателей, должно быть непрерывным. Иначе - HF Свободное место или занятое это одно и то же (свободное = размер - занятое  ), т.е. Вы говорите +- о том же, что и я писал выше и сейчас. Какой HF? Отчего? Выше я написал реальный пример, объясните где там будет HF? Даже если накосячить, то все, что может быть это потеря данных в очереди из-за переполнения.
Сообщение отредактировал Шаманъ - Jun 9 2017, 18:58
|
|
|
|
Сообщений в этой теме
_lexa_ __LDREX __STREX в STM32F407 Jun 4 2017, 13:18 jcxz Цитата(_lexa_ @ Jun 4 2017, 15:18) что я ... Jun 4 2017, 17:10 _lexa_ Цитата(jcxz @ Jun 4 2017, 17:10) STREX вс... Jun 4 2017, 18:39  KnightIgor Цитата(_lexa_ @ Jun 4 2017, 19:39) Где-то... Jun 4 2017, 19:34   _lexa_ Цитата(KnightIgor @ Jun 4 2017, 19:34) ..... Jun 4 2017, 20:14    KnightIgor Цитата(_lexa_ @ Jun 4 2017, 21:14) Интере... Jun 4 2017, 21:14     AHTOXA Цитата(KnightIgor @ Jun 5 2017, 02:14) Бл... Jun 5 2017, 05:38      Forger Цитата(AHTOXA @ Jun 5 2017, 08:38) А в чё... Jun 5 2017, 08:17       AHTOXA Цитата(Forger @ Jun 5 2017, 13:17) Полага... Jun 5 2017, 08:22        Forger Цитата(AHTOXA @ Jun 5 2017, 11:22) Если, ... Jun 5 2017, 08:24         AHTOXA Цитата(Forger @ Jun 5 2017, 13:24) Почему... Jun 5 2017, 08:54       jcxz Цитата(Forger @ Jun 5 2017, 10:17) Полага... Jun 5 2017, 08:49        Forger Цитата(jcxz @ Jun 5 2017, 11:49) Так обра... Jun 5 2017, 09:11         jcxz Цитата(Forger @ Jun 5 2017, 11:11) Как ра... Jun 5 2017, 09:37          Forger Цитата(jcxz @ Jun 5 2017, 12:37) Вот имен... Jun 5 2017, 09:49           jcxz Цитата(Forger @ Jun 5 2017, 11:49) Выходи... Jun 5 2017, 10:59            Forger Цитата(jcxz @ Jun 5 2017, 13:50) Надо тол... Jun 5 2017, 11:00             jcxz Цитата(Forger @ Jun 5 2017, 13:00) Не пон... Jun 5 2017, 11:09              Forger Цитата(jcxz @ Jun 5 2017, 14:09) Так как ... Jun 5 2017, 11:18               Forger Попался полезный документ по теме:
http://infocent... Jun 5 2017, 12:22                _lexa_ Цитата(Forger @ Jun 5 2017, 12:22) Попалс... Jun 5 2017, 13:55               jcxz Цитата(Forger @ Jun 5 2017, 13:18) Речь к... Jun 5 2017, 13:47            _lexa_ Цитата(jcxz @ Jun 5 2017, 10:59) А что та... Jun 5 2017, 13:26             AHTOXA Цитата(_lexa_ @ Jun 5 2017, 18:26) В тако... Jun 5 2017, 13:51             jcxz Цитата(_lexa_ @ Jun 5 2017, 15:26) ... Jun 5 2017, 14:21              scifi Цитата(jcxz @ Jun 5 2017, 17:21) Изучать ... Jun 5 2017, 14:31               AVI-crak Начали за упокой, кончили за здравие.
Как уже был... Jun 5 2017, 17:37                jcxz Цитата(AVI-crak @ Jun 5 2017, 19:37)... Jun 5 2017, 21:35                 _lexa_ Цитата(jcxz @ Jun 5 2017, 21:35) Похоже В... Jun 5 2017, 23:19                 AVI-crak Цитата(jcxz @ Jun 6 2017, 03:35) Монитор ... Jun 6 2017, 07:24                  jcxz Цитата(AVI-crak @ Jun 6 2017, 09:24)... Jun 6 2017, 08:20                   _lexa_ Цитата(jcxz @ Jun 6 2017, 08:20) Открывае... Jun 6 2017, 20:56                   Alechek Цитата(jcxz @ Jun 6 2017, 13:20) Фантазии... Jun 7 2017, 08:31                    jcxz Цитата(Alechek @ Jun 7 2017, 10:31) Опять... Jun 7 2017, 08:56                 KnightIgor Цитата(jcxz @ Jun 5 2017, 22:35) Ну навер... Jun 6 2017, 10:22                  AVI-crak Цитата(jcxz @ Jun 6 2017, 14:20) 1. зачем... Jun 6 2017, 11:02                   KnightIgor Цитата(AVI-crak @ Jun 6 2017, 12:02)... Jun 6 2017, 20:34                    jcxz Цитата(KnightIgor @ Jun 6 2017, 22:34) Ра... Jun 6 2017, 21:36                     LightElf QUOTE (jcxz @ Jun 7 2017, 00:36) Я писал ... Jun 7 2017, 11:52                      Forger Цитата(LightElf @ Jun 7 2017, 14:52) А пр... Jun 7 2017, 12:39                       jcxz Цитата(Forger @ Jun 7 2017, 14:39) Причем... Jun 7 2017, 13:13                        Forger Цитата(jcxz @ Jun 7 2017, 16:13) чтобы, е... Jun 7 2017, 13:27                  jcxz Цитата(KnightIgor @ Jun 6 2017, 12:22) То... Jun 6 2017, 12:08              _lexa_ Цитата(jcxz @ Jun 5 2017, 14:21) Видимо э... Jun 5 2017, 17:40               AVI-crak Цитата(_lexa_ @ Jun 5 2017, 23:40) Спасиб... Jun 5 2017, 18:00                _lexa_ Цитата(AVI-crak @ Jun 5 2017, 18:00)... Jun 5 2017, 19:28      KnightIgor Цитата(AHTOXA @ Jun 5 2017, 06:38) А в чё... Jun 5 2017, 12:40       jcxz Цитата(KnightIgor @ Jun 5 2017, 14:40) Ес... Jun 5 2017, 13:57        KnightIgor Цитата(jcxz @ Jun 5 2017, 14:57)
У меня ... Jun 5 2017, 19:42       AHTOXA Цитата(KnightIgor @ Jun 5 2017, 17:40) Ка... Jun 5 2017, 13:58  jcxz Цитата(_lexa_ @ Jun 4 2017, 20:39) Где-то... Jun 5 2017, 07:49   _lexa_ Цитата(jcxz @ Jun 5 2017, 07:49) Если меж... Jun 5 2017, 10:17   Alechek ЦитатаНе тот мануал открываете
Ну почему же не тот... Jun 7 2017, 09:18    jcxz Цитата(Alechek @ Jun 7 2017, 11:18) Про у... Jun 7 2017, 09:29     Alechek Цитата(jcxz @ Jun 7 2017, 14:29) В смысле... Jun 7 2017, 10:21      scifi Цитата(Alechek @ Jun 7 2017, 13:21) В смы... Jun 7 2017, 10:27      jcxz Цитата(Alechek @ Jun 7 2017, 12:21) В смы... Jun 7 2017, 11:23 Alechek Цитата(scifi @ Jun 7 2017, 15:27) Это наз... Jun 7 2017, 12:22 scifi Цитата(Alechek @ Jun 7 2017, 15:22) Сдела... Jun 7 2017, 12:50 AHTOXA Цитата(Alechek @ Jun 7 2017, 17:22) А поп... Jun 7 2017, 13:30 Alechek AHTOXA, спасибо, ознакомился.
Но, опять противореч... Jun 8 2017, 05:01 jcxz Цитата(Alechek @ Jun 8 2017, 07:01) - LDR... Jun 8 2017, 06:17 AHTOXA Цитата(Alechek @ Jun 8 2017, 10:01) - LDR... Jun 8 2017, 06:21  LightElf QUOTE (AHTOXA @ Jun 8 2017, 09:21) Именно... Jun 8 2017, 13:44   AHTOXA Цитата(LightElf @ Jun 8 2017, 18:44) Есть... Jun 8 2017, 14:52                  jcxz Цитата(Forger @ Jun 9 2017, 20:04) Я дела... Jun 9 2017, 19:37                   Forger Цитата(jcxz @ Jun 9 2017, 22:31) Вот как ... Jun 9 2017, 19:39                    jcxz Цитата(Forger @ Jun 9 2017, 21:39) Самое ... Jun 9 2017, 20:27                   Forger Цитата(jcxz @ Jun 9 2017, 22:37) Допустим... Jun 9 2017, 20:44                    jcxz Цитата(Forger @ Jun 9 2017, 22:44) Понима... Jun 9 2017, 20:58                     Forger Цитата(jcxz @ Jun 9 2017, 23:58) К работе... Jun 9 2017, 21:15                      jcxz Цитата(Forger @ Jun 9 2017, 23:15) Пусть ... Jun 9 2017, 21:20                       Forger Цитата(jcxz @ Jun 10 2017, 00:17) Ещё раз... Jun 9 2017, 21:20                       Forger Цитата(jcxz @ Jun 10 2017, 00:20) Да хоть... Jun 9 2017, 21:27                      jcxz Цитата(Forger @ Jun 9 2017, 23:15) При че... Jun 9 2017, 21:24                    Forger Кстати, при очистке очереди изменяются оба указате... Jun 9 2017, 20:59                     jcxz Цитата(Forger @ Jun 9 2017, 22:59) Кстати... Jun 9 2017, 21:10              jcxz Цитата(Forger @ Jun 9 2017, 19:23) А в фо... Jun 9 2017, 19:18               Forger Цитата(jcxz @ Jun 9 2017, 22:12) И в фоно... Jun 9 2017, 19:18        AVI-crak Защищённый режим: стек для потоков psp, стек для п... Jun 9 2017, 14:38 AHTOXA Цитата(Alechek @ Jun 8 2017, 16:54) Вобще... Jun 8 2017, 13:39
2 страниц
1 2 >
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0
|
|
|