01.12.2016, 13:27
|
#21
|
Почётный гражданин KAZUS.RU
Регистрация: 08.10.2007
Сообщений: 2,760
Сказал спасибо: 1,105
Сказали Спасибо 1,037 раз(а) в 569 сообщении(ях)
|
Re: Организация памяти.
Сообщение от NewWriter
|
Ха. Я этот вариант уже дважды предложил.
Какая разница, копировать все равно придётся.
|
Так я и согласился ![Обрадован](images/smilies/icon_surprised.gif) , для этого случая. Только прерывания надо запрещать на момент переписывания.
|
|
|
|
01.12.2016, 13:38
|
#22
|
Гражданин KAZUS.RU
Регистрация: 21.02.2007
Сообщений: 553
Сказал спасибо: 38
Сказали Спасибо 17 раз(а) в 16 сообщении(ях)
|
Re: Организация памяти.
Сообщение от makakus
|
была бы невероятная не было бы ошибок.
|
Этого просто невозможно. Программ без ошибок не бывает. Куда важнее свести к минимуму возможность ее возникновения.
Сообщение от makakus
|
Проще всего так: запрет прерывания от датчика - копирование данных одного датчика во временный буфер - разрешение прерывания - передача - следующий датчик.
|
Сделал блокировку буфера на запись пока идет передача по спи. А голове сказал реже опрашивать ...
Наверное можно считать вопрос решенным. Спасибо за участие. ))
|
|
|
|
01.12.2016, 13:53
|
#23
|
Почётный гражданин KAZUS.RU
Регистрация: 08.10.2007
Сообщений: 2,760
Сказал спасибо: 1,105
Сказали Спасибо 1,037 раз(а) в 569 сообщении(ях)
|
Re: Организация памяти.
Сообщение от worldmasters
|
Этого просто невозможно. Программ без ошибок не бывает.
|
Вы на С++ пишете, что ли?
На ассемблере программы без ошибок.
|
|
|
|
01.12.2016, 14:10
|
#24
|
Гражданин KAZUS.RU
Регистрация: 21.02.2007
Сообщений: 553
Сказал спасибо: 38
Сказали Спасибо 17 раз(а) в 16 сообщении(ях)
|
Re: Организация памяти.
Сообщение от makakus
|
Вы на С++ пишете, что ли?
На ассемблере программы без ошибок.
|
Спорить не буду. Я понимаю что вы гуру в бесконечной степени овладевший всеми навыками разработки ПО и вы ошибок не вообще не производите. А также можете контролировать всех всевозможные ситуации которые могли бы привести к ошибкам.
За ответы спасибо. Остальные дебаты офтоп.
ЗЫ: на с++ и пишу но это уже совсем другая история.
|
|
|
|
01.12.2016, 15:50
|
#25
|
Модератор
Регистрация: 04.08.2010
Адрес: Москва СЗАО
Сообщений: 11,247
Сказал спасибо: 11,166
Сказали Спасибо 3,855 раз(а) в 2,926 сообщении(ях)
|
Re: Организация памяти.
worldmasters, собственно там совсем ничего сложного.
1 бит для признака выборки адреса стека с инвертированной логикой для обработки датчиков и вывода в spi. При поступлении запроса на вывод по spi командой xor меняем этот бит.
При обработке датчика командой and проверяем этот бит и по результату грузим начало буфера. Смещения из структуры.
Первые два байта в буфере (добавляются к его длине) - для битовых флагов актуальности.
Каждый обработчик для датчика при обработке делает or нужного бита.
При выводе в spi вычисление адреса нужного буфера ведётся зеркальным алгоритмом. По завершении вывода по spi битовые флаги обнуляются.
Если информация об актуальности данных не нужна, часть с флагами актуальности можно опустить.
__________________
rtfm forever должно быть основой для каждого. Альтернатива грустна, поскольку метод слепого щенка успешно работает при весьма малом числе вариантов…
|
|
|
Сказали "Спасибо" mike-y-k
|
|
|
22.04.2017, 01:34
|
#26
|
Прописка
Регистрация: 26.02.2010
Адрес: Брест
Сообщений: 241
Сказал спасибо: 10
Сказали Спасибо 41 раз(а) в 31 сообщении(ях)
|
Re: Организация памяти.
Сообщение от makakus
|
Вы на С++ пишете, что ли?
На ассемблере программы без ошибок.
|
Да ну. Невозможно предусмотреть всё. Фактически программист лишает программу только тех ошибок, которые вылезли у него на глазах.
__________________
Program Memory Words Used: 4048
Program Memory Words Free: 48
|
|
|
|
22.04.2017, 11:46
|
#27
|
Вид на жительство
Регистрация: 27.11.2007
Сообщений: 429
Сказал спасибо: 19
Сказали Спасибо 39 раз(а) в 30 сообщении(ях)
|
Re: Организация памяти.
worldmasters, Два буфера. Указатель менять только если выполняются два условия, 1. нет обмена с головой (какой то бит, который выставляется в прерывании по спи)
2. прочитан самый медленный датчик (бит выставляется после чтения этого датчика и сбрасывается после смены указателя)
На момент смены указателя запрещать прерывания до проверки этих двух флагов. И разрешить после смены. Само собой смену указателя делать только в основном цикле программы.
Это если я правильно понял, что при считывании самого медленного датчика с более быстрых данные уже получены актуальные.
|
|
|
|
22.04.2017, 15:02
|
#28
|
Вид на жительство
Регистрация: 10.06.2007
Сообщений: 429
Сказал спасибо: 34
Сказали Спасибо 51 раз(а) в 47 сообщении(ях)
|
Re: Организация памяти.
sat_art, сдаётся мне, что ТС уже решил эту проблему, может даже ещё в прошлом году...
Сообщение от makakus
|
Вы на С++ пишете, что ли?
На ассемблере программы без ошибок.
|
Ага, на ассемблере получаются не баги, а фичи ![Весело](images/smilies/icon_laugh.gif)
Это же не оптимизирующий компилятор, который может поменять порядок выполнения.
Хотя некоторые хитрые процессоры всё равно могут поменять порядок, но уже при исполнении, а не при компиляции. И придётся вставлять всякие барьеры и на ассемблере, чтобы не получилось слишком много незапланированных фич. Не говоря уже о той же проблеме обеспечения атомарного доступа. И просто логических ошибок в программе (в алгоритме) на ассемблере никто не отменял.
А вообще интересно, какие ошибки можно сделать на C/C++ которых нельзя сделать на ассемблере?...
|
|
|
|
22.04.2017, 20:32
|
#29
|
Заблокирован
Регистрация: 07.09.2014
Адрес: В Кремле!
Сообщений: 4,486
Сказал спасибо: 396
Сказали Спасибо 2,220 раз(а) в 1,319 сообщении(ях)
|
Re: Организация памяти.
Сообщение от H4LF
|
какие ошибки можно сделать на C/C++ которых нельзя сделать на ассемблере?...
|
На Си:
while (1) { }
и включить оптимизацию выше -О1.
На ассемблере такую ошибку не сделаешь, она просто не существует.
|
|
|
|
22.04.2017, 22:04
|
#30
|
Вид на жительство
Регистрация: 10.06.2007
Сообщений: 429
Сказал спасибо: 34
Сказали Спасибо 51 раз(а) в 47 сообщении(ях)
|
Re: Организация памяти.
Сообщение от NewWriter
|
На Си:
while (1) { }
и включить оптимизацию выше -О1.
На ассемблере такую ошибку не сделаешь, она просто не существует.
|
А в чём, собственно, ошибка? Я не замечаю разницу между -O0 и -O2
В обоих случаях получается:
Код:
|
08000588 b.n 0x8000588 |
Да, на ассемблере не существует ошибок, связанных с оптимизатором компилятора, потому что компилятора нет. Но таким оптимизатором приходится работать самому программисту - и вот там - целое поле граблей(вместе с возможностями, конечно же, но ими ещё нужно суметь хоть как-то воспользоваться, не потратив больше 9000 часов времени и не наступив на гейзенграбли). Это если писать хоть сколько нибудь большую программу целиком на ассемблере.
Ну и многие современные микроконтроллеры оптимизированы для C и писать под них на ассемблере как-то не очень удобно.
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 13:27.
|
|