|
Вопросы о программировании Вопросы, касающиеся программирования на FBD |
|
Опции темы | Поиск в этой теме |
06.05.2013, 16:04 | #1 |
Senior Member
Регистрация: Dec 2011
Сообщения: 762
Благодарил(а): 1 раз(а)
Поблагодарили:
11 раз(а) в 11 сообщениях
|
Распределение памяти в контроллере
Рано или поздно при разработке сложных проектов сталкиваешься с нехваткой памяти в контроллерах. На данный момент лоджик просто информирует о нехватке памяти, а хотелось бы знать какой памяти не хватает и сколько не хватает. В свойствах контроллера можно посмотреть имеющуюся в наличии память, в логах можно посмотреть запрашиваемые ресурсы контроллера, но не понятно куда что грузится. Можно это разжевать чуть поподробней. Лучше на примере из вложения.
|
06.05.2013, 17:39 | #2 | |
Сотрудник Segnetics
Регистрация: Jan 2006
Адрес: Russia, SPb
Сообщения: 18 159
Благодарил(а): 15 раз(а)
Поблагодарили:
665 раз(а) в 607 сообщениях
|
Ответ: Распределение памяти в контроллере
Цитата:
__________________ Программа делает то что написал программист, а не то что он хотел. Добро всегда побеждает зло. Кто победил - тот и добрый. |
|
07.05.2013, 07:03 | #3 |
Senior Member
Регистрация: Dec 2011
Сообщения: 762
Благодарил(а): 1 раз(а)
Поблагодарили:
11 раз(а) в 11 сообщениях
|
Ответ: Распределение памяти в контроллере
Arsie, я же просил рассказать поподробней, а вы пытаетесь отделаться общими словами. Тогда постараюсь сформулировать вопросы почетче:
1. Верно ли что все составляющие программы, отмеченные в файле логов грузятся во FLASH (за исключением строчки EEPROM)? 2. Верно ли что размеры памяти, указанные в свойствах контроллера доступны именно для пользовательской программы? 3. Верно ли что размеры памяти, указанные в свойствах контроллера не являются константой для определенного типа контроллера, а зависят скажем от размера ядра, загруженного в контроллер? 4. Как определить в какой именно области памяти произошла перегрузка? Вопрос касается прежде всего FLASH и ОЗУ. С EEPROM более менее ясно. 5. Будет ли сделана в лоджике расшифровка, какая область памяти переполнена? Для EEPROM это вроде сделано. Осталось сделать для FLASH и ОЗУ. Хотя бы через файл логов. 6. Каковы общие рекомендации по оптимизации кода программы при переполнении FLASH и ОЗУ? Понятно, что уменьшение самой программы. Но разные блоки повидимому по разному используют FLASH и ОЗУ. 7. Можна на примере из прикрепленных выше файлов показать какая область памяти переполнена и на сколько? |
07.05.2013, 11:59 | #4 | |||||||
Сотрудник Segnetics
Регистрация: Jan 2006
Адрес: Russia, SPb
Сообщения: 18 159
Благодарил(а): 15 раз(а)
Поблагодарили:
665 раз(а) в 607 сообщениях
|
Ответ: Распределение памяти в контроллере
Цитата:
Цитата:
Т.е. всё, что грузится не в EEPROM, грузится во FLASH. Т.е. всё, что не грузится во FLASH, грузится в EEPROM. Т.к. всё грузится во FLASH и EEPROM, в ОЗУ грузится ничего. Ничего занимает 0 байт, поэтому оно в ОЗУ не грузится. Цитата:
Использовать иным способом, кроме как загрузить программу, невозможно. Таким образом, доступная память доступна для загрузки программы. Цитата:
Вся память, не занятая ядром, доступна для использования. Цитата:
Цитата:
Цитата:
Этот вопрос полностью повторяет вопрос номер 4. __________________ Программа делает то что написал программист, а не то что он хотел. Добро всегда побеждает зло. Кто победил - тот и добрый. Последний раз редактировалось Arsie, 08.05.2013 в 16:14 |
|||||||
07.05.2013, 12:48 | #5 | ||
Senior Member
Регистрация: Dec 2011
Сообщения: 762
Благодарил(а): 1 раз(а)
Поблагодарили:
11 раз(а) в 11 сообщениях
|
Ответ: Распределение памяти в контроллере
Цитата:
Весь запрашиваемый объем памяти (за исключением EEPROM) составляет 91794 байта. Доступно 88320 байта. Разница 3474 байта. Это и есть перевышение размера FLASH? Цитата:
|
||
07.05.2013, 13:00 | #6 | ||
Сотрудник Segnetics
Регистрация: Jan 2006
Адрес: Russia, SPb
Сообщения: 18 159
Благодарил(а): 15 раз(а)
Поблагодарили:
665 раз(а) в 607 сообщениях
|
Ответ: Распределение памяти в контроллере
Цитата:
Цитата:
__________________ Программа делает то что написал программист, а не то что он хотел. Добро всегда побеждает зло. Кто победил - тот и добрый. Последний раз редактировалось Arsie, 07.05.2013 в 15:43 |
||
07.05.2013, 13:40 | #7 | ||
Senior Member
Регистрация: Dec 2011
Сообщения: 762
Благодарил(а): 1 раз(а)
Поблагодарили:
11 раз(а) в 11 сообщениях
|
Ответ: Распределение памяти в контроллере
Цитата:
Цитата:
|
||
07.05.2013, 13:50 | #8 | |
Сотрудник Segnetics
Регистрация: Jan 2006
Адрес: Russia, SPb
Сообщения: 18 159
Благодарил(а): 15 раз(а)
Поблагодарили:
665 раз(а) в 607 сообщениях
|
Ответ: Распределение памяти в контроллере
Цитата:
__________________ Программа делает то что написал программист, а не то что он хотел. Добро всегда побеждает зло. Кто победил - тот и добрый. |
|
07.05.2013, 14:21 | #9 |
Senior Member
Регистрация: Dec 2011
Сообщения: 762
Благодарил(а): 1 раз(а)
Поблагодарили:
11 раз(а) в 11 сообщениях
|
Ответ: Распределение памяти в контроллере
Если нет четкого понимания на что расходуются ресурсы FLASH и ОЗУ, то корректно отрисовать сценарий вряд ли получится. Но попробую.
Заметил следующую вещь, если ставишь блок на поляну и не соединяешь его входы/выходы с другими блоками, то размер FLASH памяти увеличивается строго на количество выходов с учетом типа входов/выходов (bool, int и тд). Но если входы/выходы соеденены с другими блоками, то увеличение происходит, но уже меньшее, видимо часть идет на увеличение ОЗУ. Косвенно это говорит о том, что лоджик все таки может просчитать при компиляции потребное количество FLASH и ОЗУ. Любой алгоритм содержит определенное количество констант и переменных. Переменную нельзя оформить как константу, а вот константу можно оформить как переменную. Если есть перегрузка FLASH, но есть место в ОЗУ, то как вариант переводить константы в переменные для снижения нагрузки на FLASH. А таких констант в алгоритме хватает, как правило это числа из ряда: -1, 2 и тд. К слову говоря в лоджике не хватает такой арифметической операции как смена знака числа. Вроде всего один бит в числе надо поменять, а приходится применять умножение на -1. |
07.05.2013, 14:37 | #10 |
Сотрудник Segnetics
Регистрация: Jan 2006
Адрес: Russia, SPb
Сообщения: 18 159
Благодарил(а): 15 раз(а)
Поблагодарили:
665 раз(а) в 607 сообщениях
|
Ответ: Распределение памяти в контроллере
Именно поэтому данная функция и отсутствует в лоджике. Эффект от её наличия в лучшем случае равен нулю.
__________________ Программа делает то что написал программист, а не то что он хотел. Добро всегда побеждает зло. Кто победил - тот и добрый. |
07.05.2013, 14:38 | #11 |
Сотрудник Segnetics
Регистрация: Jan 2006
Адрес: Russia, SPb
Сообщения: 18 159
Благодарил(а): 15 раз(а)
Поблагодарили:
665 раз(а) в 607 сообщениях
|
Ответ: Распределение памяти в контроллере
Попробуйте грамотно сформулировать свою мысль, если вы действительно заинтересованы в ответе.
__________________ Программа делает то что написал программист, а не то что он хотел. Добро всегда побеждает зло. Кто победил - тот и добрый. |
07.05.2013, 15:03 | #12 | |
Senior Member
Регистрация: Dec 2011
Сообщения: 762
Благодарил(а): 1 раз(а)
Поблагодарили:
11 раз(а) в 11 сообщениях
|
Ответ: Распределение памяти в контроллере
Цитата:
|
|
07.05.2013, 15:11 | #13 | |
Senior Member
Регистрация: Dec 2011
Сообщения: 762
Благодарил(а): 1 раз(а)
Поблагодарили:
11 раз(а) в 11 сообщениях
|
Ответ: Распределение памяти в контроллере
Цитата:
|
|
07.05.2013, 15:28 | #14 | |
Сотрудник Segnetics
Регистрация: Jan 2006
Адрес: Russia, SPb
Сообщения: 18 159
Благодарил(а): 15 раз(а)
Поблагодарили:
665 раз(а) в 607 сообщениях
|
Ответ: Распределение памяти в контроллере
Цитата:
Сама по себе информация - да. Но только при условии, что она "бесплатна". __________________ Программа делает то что написал программист, а не то что он хотел. Добро всегда побеждает зло. Кто победил - тот и добрый. |
|
07.05.2013, 15:38 | #15 | |||
Senior Member
Регистрация: Dec 2011
Сообщения: 762
Благодарил(а): 1 раз(а)
Поблагодарили:
11 раз(а) в 11 сообщениях
|
Ответ: Распределение памяти в контроллере
Цитата:
Цитата:
http://forum.segnetics.com/showthrea...EE%E2#post5649 Цитата:
|
|||
07.05.2013, 15:38 | #16 | |
Сотрудник Segnetics
Регистрация: Jan 2006
Адрес: Russia, SPb
Сообщения: 18 159
Благодарил(а): 15 раз(а)
Поблагодарили:
665 раз(а) в 607 сообщениях
|
Ответ: Распределение памяти в контроллере
Цитата:
Сам вопрос я понимаю. Я не понимаю, к чему его я должен приложить. __________________ Программа делает то что написал программист, а не то что он хотел. Добро всегда побеждает зло. Кто победил - тот и добрый. Последний раз редактировалось Arsie, 08.05.2013 в 17:04 |
|
07.05.2013, 15:39 | #17 |
Сотрудник Segnetics
Регистрация: Jan 2006
Адрес: Russia, SPb
Сообщения: 18 159
Благодарил(а): 15 раз(а)
Поблагодарили:
665 раз(а) в 607 сообщениях
|
Ответ: Распределение памяти в контроллере
Я тоже это читал.
__________________ Программа делает то что написал программист, а не то что он хотел. Добро всегда побеждает зло. Кто победил - тот и добрый. |
07.05.2013, 15:45 | #18 | |
Senior Member
Регистрация: Dec 2011
Сообщения: 762
Благодарил(а): 1 раз(а)
Поблагодарили:
11 раз(а) в 11 сообщениях
|
Ответ: Распределение памяти в контроллере
Цитата:
Если вопрос ясен, то надо добавить эту функцию в лоджик. Название функции на ваше усмотрение. |
|
07.05.2013, 16:20 | #19 | |
Сотрудник Segnetics
Регистрация: Jan 2006
Адрес: Russia, SPb
Сообщения: 18 159
Благодарил(а): 15 раз(а)
Поблагодарили:
665 раз(а) в 607 сообщениях
|
Ответ: Распределение памяти в контроллере
Цитата:
Вот ваша функция: __________________ Программа делает то что написал программист, а не то что он хотел. Добро всегда побеждает зло. Кто победил - тот и добрый. |
|
08.05.2013, 06:51 | #20 | |
Senior Member
Регистрация: Dec 2011
Сообщения: 762
Благодарил(а): 1 раз(а)
Поблагодарили:
11 раз(а) в 11 сообщениях
|
Ответ: Распределение памяти в контроллере
Цитата:
|
|
08.05.2013, 07:25 | #21 | |
Senior Member
Регистрация: Dec 2011
Сообщения: 762
Благодарил(а): 1 раз(а)
Поблагодарили:
11 раз(а) в 11 сообщениях
|
Ответ: Распределение памяти в контроллере
Цитата:
|
|
08.05.2013, 11:41 | #22 |
Сотрудник Segnetics
Регистрация: Jan 2006
Адрес: Russia, SPb
Сообщения: 18 159
Благодарил(а): 15 раз(а)
Поблагодарили:
665 раз(а) в 607 сообщениях
|
Ответ: Распределение памяти в контроллере
Я выполнил задачу ровно в том виде, как вы её поставили. И ровно тем способом, который вы мне указали.
__________________ Программа делает то что написал программист, а не то что он хотел. Добро всегда побеждает зло. Кто победил - тот и добрый. |
08.05.2013, 12:39 | #23 | |
Senior Member
Регистрация: Dec 2011
Сообщения: 762
Благодарил(а): 1 раз(а)
Поблагодарили:
11 раз(а) в 11 сообщениях
|
Ответ: Распределение памяти в контроллере
Цитата:
2. Для переменых типа real задача не решена. 3. Решение задачи подобными методами экономит процессорное время, но память контроллера все равно используется не оптимально. Сиди эта функция в ядре, было бы лучше. 4. Решение задачи для переменных типа real требует или специфического преобразователя real-long (без изменения структуры данных, по большому счету просто смена цвета вывода у переменной, что бы переменную типа real можно было обрабатывать блоками для long переменных) и обратного преобразователя long-real или реализация через функцию в ядре контроллера. Ни то ни другое сам я сделать не могу. |
|
08.05.2013, 12:50 | #24 |
Сотрудник Segnetics
Регистрация: Jan 2006
Адрес: Russia, SPb
Сообщения: 18 159
Благодарил(а): 15 раз(а)
Поблагодарили:
665 раз(а) в 607 сообщениях
|
Ответ: Распределение памяти в контроллере
Про строб вы говорили, упоминая калькулятор: "Возьмите любой офисный калькулятор. И увидите там кнпку (+/-) - кнопка смены знака числа. Вот этой операции и не хватает".
Калькулятор меняет знак по нажатию кнопки, т.е. по стробу. Никаких никаких других указаний на оформлению функции не было. Я использовал то, что нашёл, т.е. функция выполнена со стробом. Не было никаких указаний на тип данных. Я выбрал тот, который использую чаще других. Другими словами: всё в соответствии с вашим ТЗ. __________________ Программа делает то что написал программист, а не то что он хотел. Добро всегда побеждает зло. Кто победил - тот и добрый. |
08.05.2013, 12:58 | #25 |
Senior Member
Регистрация: Dec 2011
Сообщения: 762
Благодарил(а): 1 раз(а)
Поблагодарили:
11 раз(а) в 11 сообщениях
|
Ответ: Распределение памяти в контроллере
Котроллера под рукой нет, поэтому не проверял. Судя по вопросу, работать не будет. Надо будет сделать еще пару манипуляций, связанных с особенностью хранения отрицательных чисел в int и long. Но меня интересует прежде всего real. Там подобных фокусов быть не должно.
|
08.05.2013, 13:41 | #26 | |
Сотрудник Segnetics
Регистрация: Jan 2006
Адрес: Russia, SPb
Сообщения: 18 159
Благодарил(а): 15 раз(а)
Поблагодарили:
665 раз(а) в 607 сообщениях
|
Ответ: Распределение памяти в контроллере
Цитата:
Другими словами: всё в соответствии с вашим ТЗ. __________________ Программа делает то что написал программист, а не то что он хотел. Добро всегда побеждает зло. Кто победил - тот и добрый. |
|
08.05.2013, 14:22 | #27 | |
Senior Member
Регистрация: Dec 2011
Сообщения: 762
Благодарил(а): 1 раз(а)
Поблагодарили:
11 раз(а) в 11 сообщениях
|
Ответ: Распределение памяти в контроллере
Цитата:
2. Реализация функции смены знака числа в ядре избавит от возможных ошибок. 3. Само ваше поведение с размещением заведомо нерабочего макроса на сайте сильно смахивает на подставу. Меня хотели подставит? Так я бы все равно выловил ошибку. А как другие пользователи? Могут ведь за чистую монету принять. Удалите и свой и мой макрос. Иди доведите до работоспособного состояния. |
|
08.05.2013, 15:29 | #28 | |||
Сотрудник Segnetics
Регистрация: Jan 2006
Адрес: Russia, SPb
Сообщения: 18 159
Благодарил(а): 15 раз(а)
Поблагодарили:
665 раз(а) в 607 сообщениях
|
Ответ: Распределение памяти в контроллере
Цитата:
Цитата:
Цитата:
__________________ Программа делает то что написал программист, а не то что он хотел. Добро всегда побеждает зло. Кто победил - тот и добрый. |
|||
13.05.2013, 08:29 | #29 | |||
Senior Member
Регистрация: Dec 2011
Сообщения: 762
Благодарил(а): 1 раз(а)
Поблагодарили:
11 раз(а) в 11 сообщениях
|
Ответ: Распределение памяти в контроллере
Цитата:
Цитата:
Цитата:
В любом случае максимальный эфект будет только при реализации функции смены знака через ядро. |
|||
13.05.2013, 10:42 | #30 | |
Сотрудник Segnetics
Регистрация: Jan 2006
Адрес: Russia, SPb
Сообщения: 18 159
Благодарил(а): 15 раз(а)
Поблагодарили:
665 раз(а) в 607 сообщениях
|
Ответ: Распределение памяти в контроллере
Цитата:
__________________ Программа делает то что написал программист, а не то что он хотел. Добро всегда побеждает зло. Кто победил - тот и добрый. |
|