1 (16-12-2019 14:12:59 отредактировано alex_engine)

Тема: Как оценить оставшиеся ресурсы памяти?

Здравствуйте
Пробую перенести диаграмму с нано на тини. Столкнулся с тем, что не хватает производительности. Пишет ошибку при попытке загрузки в плату.
Проблема в том, что не могу понять как оценить насколько именно не хватает.
Допустим ( в мечтах) было бы полезно сообщение типа "для успешной записи диаграммы необходимо дополнительно 20%" или что-то подобное.
Я бы понимал, есть ли смысл продолжать или нет

Подскажите, пожалуйста.
Нажимая на кнопку симулятора - просто сообщение, что памяти недостаточно.

Спасибо!

UPD:  На диаграмме с десяток коммутаторов 16:1, если их заменить на 8:1 - получится что-то выиграть?

2

Re: Как оценить оставшиеся ресурсы памяти?

В новой версии CannyLab такая возможность будет добавлена.
Замена коммутаторов 1 х 16:1 на 2 х 8:1, при условии использования всех входов, приведет к увеличению расхода памяти.
Если есть возможность и желание - пришлите нам диаграмму по электронной почте и мы посмотрим, возможно ли что-либо сделать.

3

Re: Как оценить оставшиеся ресурсы памяти?

Спасибо за ответ
Пока попробую на своем уровне оптимизировать. Хотел просто максимально обеспечить универсальность диаграммы, для возможности применения в разных контроллерах, поэтому некоторая избыточность присутствует.

Еще вопрос - сказывается ли на быстродействии процент использования памяти?
Грубо говоря, диаграммы с 95% занятости памяти и с 75%  должны работать одинаково стабильно?
Начал замечать некоторые глюки в процессе выполнения и не пойму в какую сторону копать - в перегруз контроллера или ошибку в логике диаграммы. Касается приема передачи по UART

Спасибо!

4

Re: Как оценить оставшиеся ресурсы памяти?

Чем диаграмма больше, чем больше на ней блоков, тем больше она занимает памяти и дольше выполняется цикл диаграммы, значение которого можно получить используя специальный регистр.
Длительность цикла выполнения диаграммы может также повлиять на выполнение блоков, которые работают с временными интервалами (задержки, генераторы ШИМ). Например, если заполнение (или даже период) у блока "Генератор ШИМ" меньше длительности цикла выполнения диаграммы, то блок может работать некорректно.

5

Re: Как оценить оставшиеся ресурсы памяти?

Вот с временными задержками - тут в точку
http://i.piccy.info/i9/c43ac83ac99fd254e0987d86da32c00f/1576594629/70870/1353031/Bezymiannyi_800.jpghttp://i.piccy.info/a3/2019-12-17-14-57/i9-13558265/800x478-r/i.gif

Я ничего лучше не придумал, как таким образом организовать последовательную отправку сообщений в шину.
Задача такая - по определенному событию (логическая единица) - отправляется в шину сообщение, которое выводит надпись на экран. Через время - второе сообщение ее стирает. При смене единицы на ноль - аналогично, появилось на время сообщение, потом стерлось. Это в принципе работает.
Можно как-то оптимизировать подобную схему?  И вообще, как оптимально организовать передачу тех или иных сообщений по заданным интервалам времени?

Спасибо!

6

Re: Как оценить оставшиеся ресурсы памяти?

В приведенной диаграмме временные интервалы довольно велики, вряд ли длительность цикла выполнения диаграммы (в зависимости от типа контроллера и размера диаграммы она чаще всего составляет 5...25мс) сильно повлияет на работу алгоритма.
Как-либо оптимизировать алгоритм наверное не получится - слишком разные интервалы времени, никак между собой не связанные, и последовательность событий (взаимосвязь: сначала А, потом Б и т.д.) этому препятствуют. Если было бы возможно все как-то унифицировать...
Скорее тут видна взаимосвязь событий: событие "event" влияет на событие "event2". Также нужно учитывать характер событий: появляются и удерживаются или появляются импульсно, а также частоту следования событий, чтобы алгоритм вывода текста на экран и его стирания успевал полностью выполниться.
Возможно, следовало бы группы блоков 6,7,8,9 и 17,14,15,16 организовать как и группу блоков 11,12,13, т.е. выполнять стирание текстов только после из вывода.