Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Keil + Ассемблер
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > В помощь начинающему > Программирование
whiteTigr
Собственно, топик.

Для организации задержек в некоторых процедурах записи хотелось бы использовать несколько Nop'ов или простенький цикл, в котором точно известно количество тактов.
Проблема в том, что компилятор при разных настройках оптимизации по разному делает циклы, написаные на С, и задержки получаются разными, и поэтому не хотелось бы полагаться на этот вариант.
Палыч
Вы бы, что ли, указали тип МК...

Если считать, что Вы используете МК51, то
1. Если необходимо вставить 1-2 пустых оператора, то: _nop_() (см. файл intrins.h)
2. При больших задержках - использовать таймер или, может быть, имеет смысл написать функцию на ассемблере с передачей ей параметра задержки. См. "Cx51 User's Guide" -> "Advanced Programming" -> "Interfacing C to Assembler"
whiteTigr
Цитата(Палыч @ Aug 4 2011, 12:47) *
Вы бы, что ли, указали тип МК...

Если считать, что Вы используете МК51, то
1. Если необходимо вставить 1-2 пустых оператора, то: _nop_() (см. файл intrins.h)


Совсем забыл. Програмирую чип lpc2367.

Спасибо за ответ, покопал немножко и нашелся __nop(); sm.gif
whiteTigr
После еще одного дня раскопок нашлось сразу 2 варианта ассемблерных вставок.

Вариант1:
Код
__asm("MOV R0, #0x0A");

Вариант2:
Код
__asm{
    MOV R0, #0x0A
    label0:
    SUBS R0, R0, #0x1
    BNE label0
}


П.С.: у себя проблемы вроде бы решил, но захотелось закрыть этот топик, а не оставлять вопрос нерешенным.
Палыч
Цитата(whiteTigr @ Aug 5 2011, 11:11) *
После еще одного дня раскопок нашлось сразу 2 варианта ассемблерных вставок.
Странно, что Keil в расширении языка С в части ассемблерных вставок для разных типов микроконтроллеров не ввел унификацию. Предложенные Вами два варианта таких вставок в трансляторе для МК51 не "проходят". Зато есть
Код
#pragma asm
  JMP   $ ; endless loop
#pragma endasm
zltigo
QUOTE (whiteTigr @ Aug 5 2011, 09:11) *
После еще одного дня раскопок нашлось сразу 2 варианта ассемблерных вставок.

Ассемблерные вставки есть зло сбивающее оптимизацию компилятору. Использовать только если наплевать на результат. Единственное известное мне исключение это GCC компилятор, где приняты меры по органичному их встраиванию. Для остальных компиляторов, либо то, что предоставляется через intrinsics, либо нормальные ASM функции.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.