Не, разумеется можно написать на С, откомпилировать и сказать что писал на асме
Просто я на асме постоянно сталкивался с задачей контроля количества тактов - например, чтобы каждый проход цикла, независимо от выполнения различных ветвистых внутренних условий и действий по ним, выполнялся всегда за строго определенное количество тактов, и т.п. И подобные вещи конечно придется писать на асме или редактировать полученный после компилятора код - а мне кажется, что первое проще
Хотя, может люди умеют такие вещи и на С через компиляторы делать
ЗЫ меня тут обрадовало недавнее "открытие" - я пишу
Цитата:а = в;
где а и в - переменные одного типа, и всё выполняется!
Казалось бы, что тут удивительного? Да, но это вроде как (насколько смог проверить) выполняется и в случае, если а и в - структуры, многие поля которых являются массивами!
Просто с массивами такое пока не пробовал проделывать, но мне кажется, просто присвоится указатель на 0-й элемент или компилятор заругается, но весь массив врядли скопируется. Значит будем создавать для красоты записи искусственные структуры, даже если нужен только массив
Или я где-то ошибся? Но алгоритм в желез работает и данные в структуре-приемнике обновляются!
ЗЗЫ что скажет компилятор на такое
// было первый раз правильно - что-то перестраховался
// и переписал ещё в 2-х вариантах :)
unsigned int global_i;
...............................
void f(void)
{
unsigned int i = global_i;
if (i != global_i) i = global_i;
........
}
void f(void)
{
unsigned int i_1;
unsigned int i_2;
do
{
i_1 = global_i;
i_2 = global_i;
} until (i_1 == i_2)
// используем любую переменную - i_1 или i_2
// может можно реализовать и с одной внутренней
// переменной - пока не придумал
........
}
// или ещё вариант
void f(void)
{
unsigned int i_1 = global_i;
unsigned int i_2 = global_i;
if (i_1 != i_2) i_1 = global_i;
// используем любую переменную - i_1
........
}
Надо написать "volatile" при объявлении глобальной переменной, чтобы компилятор оставил "все как есть"? Смысл этих строк - гарантированно получить корректное значение глобальной переменной, если есть шанс что она изменится в прерывании - а отключать прерывания неохота, ибо некоторые из них могут быть без флагов своего появления - и не подождут чтобы возникнуть потом, а потеряются навсегда