![]() |
![]() ![]() |
|
Вопросы о программировании Вопросы, касающиеся программирования на FBD |
![]() |
|
Опции темы | Поиск в этой теме | Опции просмотра |
![]() |
#1 |
Senior Member
Регистрация: Dec 2011
Сообщения: 690
Благодарил(а): 0 раз(а)
Поблагодарили:
9 раз(а) в 9 сообщениях
|
![]()
Рано или поздно при разработке сложных проектов сталкиваешься с нехваткой памяти в контроллерах. На данный момент лоджик просто информирует о нехватке памяти, а хотелось бы знать какой памяти не хватает и сколько не хватает. В свойствах контроллера можно посмотреть имеющуюся в наличии память, в логах можно посмотреть запрашиваемые ресурсы контроллера, но не понятно куда что грузится. Можно это разжевать чуть поподробней. Лучше на примере из вложения.
|
![]() |
![]() |
![]() |
#2 |
Сотрудник Segnetics
Регистрация: Jan 2006
Адрес: Russia, SPb
Сообщения: 17 343
Благодарил(а): 15 раз(а)
Поблагодарили:
606 раз(а) в 554 сообщениях
|
![]() __________________ Программа делает то что написал программист, а не то что он хотел. Добро всегда побеждает зло. Кто победил - тот и добрый. |
![]() |
![]() |
![]() |
#3 |
Senior Member
Регистрация: Dec 2011
Сообщения: 690
Благодарил(а): 0 раз(а)
Поблагодарили:
9 раз(а) в 9 сообщениях
|
![]()
Arsie, я же просил рассказать поподробней, а вы пытаетесь отделаться общими словами. Тогда постараюсь сформулировать вопросы почетче:
1. Верно ли что все составляющие программы, отмеченные в файле логов грузятся во FLASH (за исключением строчки EEPROM)? 2. Верно ли что размеры памяти, указанные в свойствах контроллера доступны именно для пользовательской программы? 3. Верно ли что размеры памяти, указанные в свойствах контроллера не являются константой для определенного типа контроллера, а зависят скажем от размера ядра, загруженного в контроллер? 4. Как определить в какой именно области памяти произошла перегрузка? Вопрос касается прежде всего FLASH и ОЗУ. С EEPROM более менее ясно. 5. Будет ли сделана в лоджике расшифровка, какая область памяти переполнена? Для EEPROM это вроде сделано. Осталось сделать для FLASH и ОЗУ. Хотя бы через файл логов. 6. Каковы общие рекомендации по оптимизации кода программы при переполнении FLASH и ОЗУ? Понятно, что уменьшение самой программы. Но разные блоки повидимому по разному используют FLASH и ОЗУ. 7. Можна на примере из прикрепленных выше файлов показать какая область памяти переполнена и на сколько? |
![]() |
![]() |
![]() |
#4 |
Сотрудник Segnetics
Регистрация: Jan 2006
Адрес: Russia, SPb
Сообщения: 17 343
Благодарил(а): 15 раз(а)
Поблагодарили:
606 раз(а) в 554 сообщениях
|
![]() Т.е. всё, что грузится не в EEPROM, грузится во FLASH. Т.е. всё, что не грузится во FLASH, грузится в EEPROM. Т.к. всё грузится во FLASH и EEPROM, в ОЗУ грузится ничего. Ничего занимает 0 байт, поэтому оно в ОЗУ не грузится. Использовать иным способом, кроме как загрузить программу, невозможно. Таким образом, доступная память доступна для загрузки программы. Вся память, не занятая ядром, доступна для использования. __________________ Программа делает то что написал программист, а не то что он хотел. Добро всегда побеждает зло. Кто победил - тот и добрый. Последний раз редактировалось Arsie, 08.05.2013 в 16:14 |
![]() |
![]() |
![]() |
#5 |
Senior Member
Регистрация: Dec 2011
Сообщения: 690
Благодарил(а): 0 раз(а)
Поблагодарили:
9 раз(а) в 9 сообщениях
|
![]() Весь запрашиваемый объем памяти (за исключением EEPROM) составляет 91794 байта. Доступно 88320 байта. Разница 3474 байта. Это и есть перевышение размера FLASH? |
![]() |
![]() |
![]() |
#6 |
Сотрудник Segnetics
Регистрация: Jan 2006
Адрес: Russia, SPb
Сообщения: 17 343
Благодарил(а): 15 раз(а)
Поблагодарили:
606 раз(а) в 554 сообщениях
|
![]() __________________ Программа делает то что написал программист, а не то что он хотел. Добро всегда побеждает зло. Кто победил - тот и добрый. Последний раз редактировалось Arsie, 07.05.2013 в 15:43 |
![]() |
![]() |
![]() |
#7 |
Senior Member
Регистрация: Dec 2011
Сообщения: 690
Благодарил(а): 0 раз(а)
Поблагодарили:
9 раз(а) в 9 сообщениях
|
![]() |
![]() |
![]() |
![]() |
#8 |
Сотрудник Segnetics
Регистрация: Jan 2006
Адрес: Russia, SPb
Сообщения: 17 343
Благодарил(а): 15 раз(а)
Поблагодарили:
606 раз(а) в 554 сообщениях
|
![]() __________________ Программа делает то что написал программист, а не то что он хотел. Добро всегда побеждает зло. Кто победил - тот и добрый. |
![]() |
![]() |
![]() |
#9 |
Senior Member
Регистрация: Dec 2011
Сообщения: 690
Благодарил(а): 0 раз(а)
Поблагодарили:
9 раз(а) в 9 сообщениях
|
![]()
Если нет четкого понимания на что расходуются ресурсы FLASH и ОЗУ, то корректно отрисовать сценарий вряд ли получится. Но попробую.
Заметил следующую вещь, если ставишь блок на поляну и не соединяешь его входы/выходы с другими блоками, то размер FLASH памяти увеличивается строго на количество выходов с учетом типа входов/выходов (bool, int и тд). Но если входы/выходы соеденены с другими блоками, то увеличение происходит, но уже меньшее, видимо часть идет на увеличение ОЗУ. Косвенно это говорит о том, что лоджик все таки может просчитать при компиляции потребное количество FLASH и ОЗУ. Любой алгоритм содержит определенное количество констант и переменных. Переменную нельзя оформить как константу, а вот константу можно оформить как переменную. Если есть перегрузка FLASH, но есть место в ОЗУ, то как вариант переводить константы в переменные для снижения нагрузки на FLASH. А таких констант в алгоритме хватает, как правило это числа из ряда: -1, 2 и тд. К слову говоря в лоджике не хватает такой арифметической операции как смена знака числа. Вроде всего один бит в числе надо поменять, а приходится применять умножение на -1. |
![]() |
![]() |
![]() |
#10 |
Сотрудник Segnetics
Регистрация: Jan 2006
Адрес: Russia, SPb
Сообщения: 17 343
Благодарил(а): 15 раз(а)
Поблагодарили:
606 раз(а) в 554 сообщениях
|
![]() __________________ Программа делает то что написал программист, а не то что он хотел. Добро всегда побеждает зло. Кто победил - тот и добрый. |
![]() |
![]() |
![]() |
#11 |
Сотрудник Segnetics
Регистрация: Jan 2006
Адрес: Russia, SPb
Сообщения: 17 343
Благодарил(а): 15 раз(а)
Поблагодарили:
606 раз(а) в 554 сообщениях
|
![]() __________________ Программа делает то что написал программист, а не то что он хотел. Добро всегда побеждает зло. Кто победил - тот и добрый. |
![]() |
![]() |
![]() |
#12 |
Senior Member
Регистрация: Dec 2011
Сообщения: 690
Благодарил(а): 0 раз(а)
Поблагодарили:
9 раз(а) в 9 сообщениях
|
![]() |
![]() |
![]() |
![]() |
#13 |
Senior Member
Регистрация: Dec 2011
Сообщения: 690
Благодарил(а): 0 раз(а)
Поблагодарили:
9 раз(а) в 9 сообщениях
|
![]() |
![]() |
![]() |
![]() |
#14 |
Сотрудник Segnetics
Регистрация: Jan 2006
Адрес: Russia, SPb
Сообщения: 17 343
Благодарил(а): 15 раз(а)
Поблагодарили:
606 раз(а) в 554 сообщениях
|
![]() __________________ Программа делает то что написал программист, а не то что он хотел. Добро всегда побеждает зло. Кто победил - тот и добрый. |
![]() |
![]() |
![]() |
#15 |
Senior Member
Регистрация: Dec 2011
Сообщения: 690
Благодарил(а): 0 раз(а)
Поблагодарили:
9 раз(а) в 9 сообщениях
|
![]() http://forum.segnetics.com/showthrea...EE%E2#post5649 |
![]() |
![]() |
![]() |
#16 |
Сотрудник Segnetics
Регистрация: Jan 2006
Адрес: Russia, SPb
Сообщения: 17 343
Благодарил(а): 15 раз(а)
Поблагодарили:
606 раз(а) в 554 сообщениях
|
![]() Сам вопрос я понимаю. Я не понимаю, к чему его я должен приложить. __________________ Программа делает то что написал программист, а не то что он хотел. Добро всегда побеждает зло. Кто победил - тот и добрый. Последний раз редактировалось Arsie, 08.05.2013 в 17:04 |
![]() |
![]() |
![]() |
#17 |
Сотрудник Segnetics
Регистрация: Jan 2006
Адрес: Russia, SPb
Сообщения: 17 343
Благодарил(а): 15 раз(а)
Поблагодарили:
606 раз(а) в 554 сообщениях
|
![]() __________________ Программа делает то что написал программист, а не то что он хотел. Добро всегда побеждает зло. Кто победил - тот и добрый. |
![]() |
![]() |
![]() |
#18 |
Senior Member
Регистрация: Dec 2011
Сообщения: 690
Благодарил(а): 0 раз(а)
Поблагодарили:
9 раз(а) в 9 сообщениях
|
![]() Если вопрос ясен, то надо добавить эту функцию в лоджик. Название функции на ваше усмотрение. |
![]() |
![]() |
![]() |
#19 |
Сотрудник Segnetics
Регистрация: Jan 2006
Адрес: Russia, SPb
Сообщения: 17 343
Благодарил(а): 15 раз(а)
Поблагодарили:
606 раз(а) в 554 сообщениях
|
![]() Вот ваша функция: __________________ Программа делает то что написал программист, а не то что он хотел. Добро всегда побеждает зло. Кто победил - тот и добрый. |
![]() |
![]() |
![]() |
#20 |
Senior Member
Регистрация: Dec 2011
Сообщения: 690
Благодарил(а): 0 раз(а)
Поблагодарили:
9 раз(а) в 9 сообщениях
|
![]() |
![]() |
![]() |
![]() |
#21 |
Senior Member
Регистрация: Dec 2011
Сообщения: 690
Благодарил(а): 0 раз(а)
Поблагодарили:
9 раз(а) в 9 сообщениях
|
![]() |
![]() |
![]() |
![]() |
#22 |
Сотрудник Segnetics
Регистрация: Jan 2006
Адрес: Russia, SPb
Сообщения: 17 343
Благодарил(а): 15 раз(а)
Поблагодарили:
606 раз(а) в 554 сообщениях
|
![]() __________________ Программа делает то что написал программист, а не то что он хотел. Добро всегда побеждает зло. Кто победил - тот и добрый. |
![]() |
![]() |
![]() |
#23 |
Senior Member
Регистрация: Dec 2011
Сообщения: 690
Благодарил(а): 0 раз(а)
Поблагодарили:
9 раз(а) в 9 сообщениях
|
![]() 2. Для переменых типа real задача не решена. 3. Решение задачи подобными методами экономит процессорное время, но память контроллера все равно используется не оптимально. Сиди эта функция в ядре, было бы лучше. 4. Решение задачи для переменных типа real требует или специфического преобразователя real-long (без изменения структуры данных, по большому счету просто смена цвета вывода у переменной, что бы переменную типа real можно было обрабатывать блоками для long переменных) и обратного преобразователя long-real или реализация через функцию в ядре контроллера. Ни то ни другое сам я сделать не могу. |
![]() |
![]() |
![]() |
#24 |
Сотрудник Segnetics
Регистрация: Jan 2006
Адрес: Russia, SPb
Сообщения: 17 343
Благодарил(а): 15 раз(а)
Поблагодарили:
606 раз(а) в 554 сообщениях
|
![]() Калькулятор меняет знак по нажатию кнопки, т.е. по стробу. Никаких никаких других указаний на оформлению функции не было. Я использовал то, что нашёл, т.е. функция выполнена со стробом. Другими словами: всё в соответствии с вашим ТЗ. __________________ Программа делает то что написал программист, а не то что он хотел. Добро всегда побеждает зло. Кто победил - тот и добрый. |
![]() |
![]() |
![]() |
#25 |
Senior Member
Регистрация: Dec 2011
Сообщения: 690
Благодарил(а): 0 раз(а)
Поблагодарили:
9 раз(а) в 9 сообщениях
|
![]()
Котроллера под рукой нет, поэтому не проверял. Судя по вопросу, работать не будет. Надо будет сделать еще пару манипуляций, связанных с особенностью хранения отрицательных чисел в int и long. Но меня интересует прежде всего real. Там подобных фокусов быть не должно.
|
![]() |
![]() |
![]() |
#26 |
Сотрудник Segnetics
Регистрация: Jan 2006
Адрес: Russia, SPb
Сообщения: 17 343
Благодарил(а): 15 раз(а)
Поблагодарили:
606 раз(а) в 554 сообщениях
|
![]() Другими словами: всё в соответствии с вашим ТЗ. __________________ Программа делает то что написал программист, а не то что он хотел. Добро всегда побеждает зло. Кто победил - тот и добрый. |
![]() |
![]() |
![]() |
#27 |
Senior Member
Регистрация: Dec 2011
Сообщения: 690
Благодарил(а): 0 раз(а)
Поблагодарили:
9 раз(а) в 9 сообщениях
|
![]() 2. Реализация функции смены знака числа в ядре избавит от возможных ошибок. 3. Само ваше поведение с размещением заведомо нерабочего макроса на сайте сильно смахивает на подставу. Меня хотели подставит? Так я бы все равно выловил ошибку. А как другие пользователи? Могут ведь за чистую монету принять. Удалите и свой и мой макрос. Иди доведите до работоспособного состояния. |
![]() |
![]() |
![]() |
#28 |
Сотрудник Segnetics
Регистрация: Jan 2006
Адрес: Russia, SPb
Сообщения: 17 343
Благодарил(а): 15 раз(а)
Поблагодарили:
606 раз(а) в 554 сообщениях
|
![]() __________________ Программа делает то что написал программист, а не то что он хотел. Добро всегда побеждает зло. Кто победил - тот и добрый. |
![]() |
![]() |
![]() |
#29 |
Senior Member
Регистрация: Dec 2011
Сообщения: 690
Благодарил(а): 0 раз(а)
Поблагодарили:
9 раз(а) в 9 сообщениях
|
![]() В любом случае максимальный эфект будет только при реализации функции смены знака через ядро. |
![]() |
![]() |
![]() |
#30 |
Сотрудник Segnetics
Регистрация: Jan 2006
Адрес: Russia, SPb
Сообщения: 17 343
Благодарил(а): 15 раз(а)
Поблагодарили:
606 раз(а) в 554 сообщениях
|
![]() __________________ Программа делает то что написал программист, а не то что он хотел. Добро всегда побеждает зло. Кто победил - тот и добрый. |
![]() |
![]() |
![]() |
Опции темы | Поиск в этой теме |
Опции просмотра | |
|
|
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Ошибка загрузки карты памяти | barmaglot-s | Вопросы о SMH2010 | 5 | 04.12.2017 10:53 |
SMH-2Gi и модуль памяти | max7222 | Вопросы о SMH-2G(i) | 1 | 21.04.2017 11:04 |
Составление карты памяти ПЧ | sbatrov | Связь с внешним миром | 6 | 29.10.2015 16:38 |
Достаточно ли размера модуля памяти для сохранения проекта? | asen | Вопросы о Pixel | 5 | 07.10.2015 17:11 |
Распределение памяти в SMArt | Max2114 | SMArt | 6 | 02.04.2012 15:22 |