shamray
Nov 22 2005, 09:48
Не могу заставить IAR C/C++ Compiler for 8051 7.10A использовать инструкцию DJNZ.
Пытался писать
Код
do {
bla
bla
} while (--size);
и
for( i=size; i!=0; i--)
{
bla
bla
}
Но компиллер все равно не понимает что от него требуется. Пробовал использовать разнве режимы ортимизации - тот-же результат. Кто может мне поммочь? Буду очен признателен.
А никак

у ИАРА очень посредственный компилер для 51
используйте KEIL
one_man_show
Nov 22 2005, 14:32
Извините, что вопросом на вопрос: а зачем Вам упорно надо, чтобы появилась эта команда? Попробуйте написать на асме, если очень требуется. Но все равно не понятно, Вы свою оптимизацию хотите реализовать или еще что-то?
shamray
Nov 24 2005, 07:41
Мне это необходимо для максимальной оптимизации кода по быстродействию. Я уже написал этот блок на асме. Но просто хотелось обойтись без чужеродных вставок.
Виктория
Nov 24 2005, 12:34
Может мало конструкций попробовали...
Во 1) size - лучше регистровая и байтовая переменная!
Во 2) еще конструкции для экспериментов
Код
for(;size!=0;--size);
while(size--){ };
shamray
Nov 24 2005, 13:32
Да, видимо не судба. Уже все перепробовал. Спасибо всем кто откликнулся.
bialix
Nov 24 2005, 15:26
Два года назад я написал вот это:
http://onembedding.com/tools/keil/articles/loop_256.htmhttp://onembedding.com/tools/keil/articles/loop_256_2.htmОписанный рецепт работает для Кейла. Для ИАР -- не знаю, никогда не пробовал и уж никогда и не попробую.
one_man_show
Nov 24 2005, 15:38
Замечательный анализ работы Си-компилятора и думаю автору темы он поможет, но только в том случае, если будут правильно выбраны типы (размерности) переменных.
Уважаемый shamray, проверьте, не выходит ли размер переменной индекса цикла за пределы 255 (т.е. не char, а например int), иначе индекс не поместиться в один байт и команда DJNZ не сможет быть подставлена компилятором.
Виктория
Nov 24 2005, 15:51
Цитата(bialix @ Nov 24 2005, 19:26)

Два года назад я написал вот это:
http://onembedding.com/tools/keil/articles/loop_256.htmhttp://onembedding.com/tools/keil/articles/loop_256_2.htmОписанный рецепт работает для Кейла. Для ИАР -- не знаю, никогда не пробовал и уж никогда и не попробую.
Очень понравилось.

Доступно для молодежи, доказательно и показательно.
bialix
Nov 24 2005, 21:29
Эх... А сколько копий сломали, обсуждая этот хак! Но факт остается фактом: описанное решение -- это хак чистой воды. ;-)
shamray
Nov 25 2005, 06:52
Спасибо bialix. Но это я уже прочел первым делом. Вc все равно в IAR такое не желает компилиться как надо. Просто я так понял что компиллер убогий. А с переменными все в норме - регистровая и не больше 256, а точнее количесство циклов 127.
Для просмотра полной версии этой страницы, пожалуйста,
пройдите по ссылке.