Цитата
По поводу ошибки. Если внимательно рассмотреть прототип функций memspy и memmov, то можно заметить, что указатель на источник данных описан как указатель на область данных константного типа (const void *src). Таким образом во время выполнения указанных функций гарантируется что источник данных не может быть модифицирован. Квалификатор volatile противоречит этому условия, указывая на то, что источник данных может быть модифицирован в любое время и в т.ч. во время выполнения функций memspy/memmov. Поэтому компилятор вполне справедливо выдает сообщение об ошибке.
Вот оно! Совершенно справедливо!
Цитата
P.P.S. вот уж не думал, что даже с моими любительскими познаниями в Си можно уже читать лекции
Знания всегда прерывисты! Форум как раз и позволяет устранить пробелы, актуальные на данный момент.
Цитата
P.S. Кстати, а явное приведение типов не прокатывает что ли?
Цитата
В этом конкретном месте используйте явное приведение типов memcpy(dst, (void *)&TDataLbk, size).
А при чем здесь приведение типов? Объявление аргумента в функции как void говорит о возможности подстановки любого типа. Оно и понятно. Копирование в ф-ии происходит по байтно (в общем случае пословно) значит любая переменная будет скопирована полнстью, с точностью до байта (простите за коламбур).
Цитата
А вот ставить volatile только чтобы компилятор не выкидывал - что-то тут неправильно. Не должен он выкидывать переменную и запись в нее если к этой переменной есть обращения в других файлах.
Согласен, однако это так. Не выкидывается переменная если компилятор считает, что она влияет на результат выполнения функции, в которой используется (например в условии ветвления). А если просто поставить tmp++; или a = tmp; поверьте будет выкинута! В моем случае именно такой вариант. Переменная меняется в прерывании, а её значение присваивается в основной программе другой переменной.
Цитата
Она точно объявлена глобальной и не static?
Точно!