Спасибо, Евгений!!! Решает проблему "кривых рук", а заодно проблему с "бета-библиотеками". Много лучше когда система что-то пропустит, проигнорирует, чем когда встанет или перезагрузится. Настроил с помощью этих знаний нормальные циклы для задач.
Потому что компилятор разместил iSpecialValue по адресу, следующему за адресом aiData[3]. Очень удобно просматривать такие вещи с помощью плагина CODESYS Memory Tools (ftp.owen.ru/CoDeSys3/04_Library/05_3.5.11.5/01_Components/CODESYS%20Memory%20Tools%203.5.14.0.package). Логичный вопрос - почему компилятор поступил именно так? Почему следом за массивом размещена не переменная i? На этот вопрос у меня нет ответа - я не видел исходники компилятора 3S. Но зато это наглядно демонстрирует, что размещение переменных в памяти может быть вообще не связано с порядком их объявления в программе.
Спасибо, Евгений!!! Решает проблему "кривых рук", а заодно проблему с "бета-библиотеками". Много лучше когда система что-то пропустит, проигнорирует, чем когда встанет или перезагрузится. Настроил с помощью этих знаний нормальные циклы для задач.
Каким образом при записи в out of range массива aiData удалось попасть именно в переменную iSpecialValue ?
Потому что компилятор разместил iSpecialValue по адресу, следующему за адресом aiData[3]. Очень удобно просматривать такие вещи с помощью плагина CODESYS Memory Tools (ftp.owen.ru/CoDeSys3/04_Library/05_3.5.11.5/01_Components/CODESYS%20Memory%20Tools%203.5.14.0.package).
Логичный вопрос - почему компилятор поступил именно так? Почему следом за массивом размещена не переменная i?
На этот вопрос у меня нет ответа - я не видел исходники компилятора 3S. Но зато это наглядно демонстрирует, что размещение переменных в памяти может быть вообще не связано с порядком их объявления в программе.