Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Как заставить IAR for MCS51 использовать DJNZ?
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > Все остальные микроконтроллеры
shamray
Не могу заставить IAR C/C++ Compiler for 8051 7.10A использовать инструкцию DJNZ.
Пытался писать
Код
do  {
   bla
   bla
} while (--size);

и

for( i=size; i!=0; i--)
{
   bla
   bla
}


Но компиллер все равно не понимает что от него требуется. Пробовал использовать разнве режимы ортимизации - тот-же результат. Кто может мне поммочь? Буду очен признателен.
KRS
А никак sad.gif
у ИАРА очень посредственный компилер для 51
используйте KEIL
one_man_show
Извините, что вопросом на вопрос: а зачем Вам упорно надо, чтобы появилась эта команда? Попробуйте написать на асме, если очень требуется. Но все равно не понятно, Вы свою оптимизацию хотите реализовать или еще что-то?
shamray
Мне это необходимо для максимальной оптимизации кода по быстродействию. Я уже написал этот блок на асме. Но просто хотелось обойтись без чужеродных вставок.
Виктория
Может мало конструкций попробовали... wink.gif
Во 1) size - лучше регистровая и байтовая переменная!
Во 2) еще конструкции для экспериментов
Код
for(;size!=0;--size);
while(size--){ };
shamray
Да, видимо не судба. Уже все перепробовал. Спасибо всем кто откликнулся.
bialix
Два года назад я написал вот это:

http://onembedding.com/tools/keil/articles/loop_256.htm
http://onembedding.com/tools/keil/articles/loop_256_2.htm

Описанный рецепт работает для Кейла. Для ИАР -- не знаю, никогда не пробовал и уж никогда и не попробую.
one_man_show
Замечательный анализ работы Си-компилятора и думаю автору темы он поможет, но только в том случае, если будут правильно выбраны типы (размерности) переменных.

Уважаемый shamray, проверьте, не выходит ли размер переменной индекса цикла за пределы 255 (т.е. не char, а например int), иначе индекс не поместиться в один байт и команда DJNZ не сможет быть подставлена компилятором.
Виктория
Цитата(bialix @ Nov 24 2005, 19:26) *
Два года назад я написал вот это:

http://onembedding.com/tools/keil/articles/loop_256.htm
http://onembedding.com/tools/keil/articles/loop_256_2.htm

Описанный рецепт работает для Кейла. Для ИАР -- не знаю, никогда не пробовал и уж никогда и не попробую.


Очень понравилось. smile.gif Доступно для молодежи, доказательно и показательно.
bialix
Эх... А сколько копий сломали, обсуждая этот хак! Но факт остается фактом: описанное решение -- это хак чистой воды. ;-)
shamray
Спасибо bialix. Но это я уже прочел первым делом. Вc все равно в IAR такое не желает компилиться как надо. Просто я так понял что компиллер убогий. А с переменными все в норме - регистровая и не больше 256, а точнее количесство циклов 127.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.