Показать сообщение отдельно
Непрочитано 02.12.2010, 14:01  
kison
Почётный гражданин KAZUS.RU
 
Регистрация: 13.12.2004
Сообщений: 3,172
Сказал спасибо: 11
Сказали Спасибо 692 раз(а) в 504 сообщении(ях)
kison на пути к лучшему
По умолчанию Re: STM8(S/L), первые впечатления

Сообщение от andries5 Посмотреть сообщение
В AVRStudio можно было посчитать время исполнения программы по шагам, а в STVD можно? Что-бы настроить функцию Delay() не используя таймер.
Функция задержки иногда полезная вещь. Настраивать ее неблагодарное дело.
В общем вот пример такой задержки, компилятор Космик.
Код:
// файл delay.h
#ifndef DELAY_H
#define DELAY_H

#ifndef F_CPU
   #error "F_CPU not defined!"
#endif

#define US(x) \
(unsigned int)((((x*(F_CPU/1000000.0))‹=8)*8 \
+((x*(F_CPU/1000000.0))›8)*(x*(F_CPU/1000000.0)) - 4)/4)

#define MS(x) US(x*1000)

@inline void delay(unsigned int del)
{
volatile unsigned int tmp;
tmp = del;
#asm
$N:
        decw x
        jrne $L
        nop
#endasm 
}
#endif // #ifndef DELAY_H
Для работы необходимо определить глобальный дефайн F_CPU. В установках проекта на вкладке опций компилятора. Для обоих режимов - и релиза и дебага отдельно!
Смотрите картинку. Частота в герцах, UL в конце - unsigned long.
Нельзя использовать такую задержку при отключенной оптимизации и нельзя передавать ей в качестве параметра переменную! Параметр - только константа!
Как использовать:
Код:
#include ‹delay.h›

int main(void)
{
// трам пам пам
delay(US(100));
delay(MS(10));
delay(MS(1.7));
// трам пам пам
}
Ограничения - минимальная задержка 8 тактов. Максимальная 65536*4= 262144 такта.
Пользуйтесь на здоровье. А тому кто подскажет как сделать инлайновую функцию на голом асме и не потерять параметр будет респект и уважуха. Чтоб понять что я хочу уберите из delay объявление переменной tmp и присваивание ей параметра функции.
При 16МГц такта минимум 0,5мкс, разрешение 0,25мкс. Округляется вниз, т.е. задержка на 0,5мкс и 0,6мкс будет одинаковой - 0,5. Следующая возможная 0,75 и т.д. до 16мС с копейками. При снижении такта соответственно растет минимальная, максимальная задержка и шаг ее.

ЗЫ. Отзывы о работоспособности/неработоспособности приветствуются. Я физически не могу все свои функции тестировать со всеми опциями оптимизации. Так что надеюсь на багрепорты. И задержки и того что планирую в скором времени выложить.
Миниатюры:
Нажмите на изображение для увеличения
Название: stvd_delay.GIF
Просмотров: 122
Размер:	18.4 Кб
ID:	15330  

Последний раз редактировалось kison; 13.04.2011 в 18:17.
kison вне форума  
Эти 5 пользователя(ей) сказали Спасибо kison за это сообщение:
access777 (14.08.2019), andries5 (02.12.2010), dosikus (02.12.2010), EugenyAM (02.12.2010), vpadm (02.12.2010)