реклама на сайте
подробности

 
 
> local register variable, в определённом регистре
xelax
сообщение Sep 30 2008, 09:56
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 370
Регистрация: 7-11-06
Пользователь №: 22 035



Коллеги,

у меня есть код, который собирается с помощью avr-gcc, необходимо сделать чтобы он теперь собирался и с помощью IAR.

Возникли проблемы с ассемблерными вставками, а в частности я не понимаю, как мне разместить локальную переменную в фиксированном регистре внутри функции.
Вот как это у меня реализованно на gcc. Есть какие нибудь идеи как сделать аналогично на iar.
Код
static uint16_t halMeasurement(void)
{
register volatile uint16_t cnt asm ("r24") = 0;
...
...
...
return cnt;
}


В документации нашёл только как подобное сделать с глобальными переменными, но это не то.
Go to the top of the page
 
+Quote Post
2 страниц V   1 2 >  
Start new topic
Ответов (1 - 27)
Dog Pawlowa
сообщение Sep 30 2008, 14:14
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 2 702
Регистрация: 14-07-06
Пользователь №: 18 823



Цитата(xelax @ Sep 30 2008, 12:56) *
Есть какие нибудь идеи как сделать аналогично на iar.

Идеи есть - забить на ассемблер smile.gif
IAR пошевелится и наоптимизирует лучше чем GCC + asm


--------------------
Уходя, оставьте свет...
Go to the top of the page
 
+Quote Post
xelax
сообщение Sep 30 2008, 14:21
Сообщение #3


Местный
***

Группа: Свой
Сообщений: 370
Регистрация: 7-11-06
Пользователь №: 22 035



Цитата(Dog Pawlowa @ Sep 30 2008, 18:14) *
Идеи есть - забить на ассемблер smile.gif
IAR пошевелится и наоптимизирует лучше чем GCC + asm


smile.gif Эт конечно понятно, но мне необходимо знать точно сколько тактов заимает сия процедура, а на С её размер будет менятся в зависимости от версии компилятора.
Go to the top of the page
 
+Quote Post
Rst7
сообщение Oct 1 2008, 04:50
Сообщение #4


Йа моск ;)
******

Группа: Модераторы
Сообщений: 4 345
Регистрация: 7-07-05
Из: Kharkiv-city
Пользователь №: 6 610



Цитата
Возникли проблемы с ассемблерными вставками


Немудрено. Потому как инлайновский асм в IAR'е ничего из наворотов гнуся не позволяет делать. Посему - перепишите нужные процедуры на чистом асме, и не мучайтесь.


--------------------
"Практика выше (теоретического) познания, ибо она имеет не только достоинство всеобщности, но и непосредственной действительности." - В.И. Ленин
Go to the top of the page
 
+Quote Post
xelax
сообщение Oct 1 2008, 05:39
Сообщение #5


Местный
***

Группа: Свой
Сообщений: 370
Регистрация: 7-11-06
Пользователь №: 22 035



Что-то как-то грустно это всё... IAR немалых денех стоит, а функционал компилятора слабоват...
Попробую задать этот вопрос в иаровский support...
Go to the top of the page
 
+Quote Post
MrYuran
сообщение Oct 1 2008, 05:46
Сообщение #6


Беспросветный оптимист
******

Группа: Свой
Сообщений: 4 640
Регистрация: 26-12-07
Из: Н.Новгород
Пользователь №: 33 646



//размещаем в свободных регистрах ввода/вывода
__no_init volatile ckps_flags f1@0x22;

не моё, так что без комментариев
насчёт локальности тоже не знаю... а вдруг прокатит?


--------------------
Программирование делится на системное и бессистемное. ©Моё :)
— а для кого-то БГ — это Bill Gilbert =)
Go to the top of the page
 
+Quote Post
Rst7
сообщение Oct 1 2008, 06:01
Сообщение #7


Йа моск ;)
******

Группа: Модераторы
Сообщений: 4 345
Регистрация: 7-07-05
Из: Kharkiv-city
Пользователь №: 6 610



Цитата
IAR немалых денех стоит, а функционал компилятора слабоват...


Не знаю. Крутоват наезд, как по мне. Лично я считаю, что асмовские вставки гнуся - это лишнее. На Си же пишем, а не на помеси рязанского с французким. С точки зрения красоты лучше, когда чистый асмовский код живет отдельной жизнью в отдельных файлах.

А если надо какую-то специфическую комманду исполнить поперек сишного кода - так все в intrinsics'ах есть, всякие __watchdog_reset() и т.д.


--------------------
"Практика выше (теоретического) познания, ибо она имеет не только достоинство всеобщности, но и непосредственной действительности." - В.И. Ленин
Go to the top of the page
 
+Quote Post
zltigo
сообщение Oct 1 2008, 06:30
Сообщение #8


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(Rst7 @ Oct 1 2008, 08:01) *
С точки зрения красоты лучше, когда чистый асмовский код живет отдельной жизнью в отдельных файлах.

Абсолютно поддерживаю и читабельность, и портируемость, и невыкручивание рук оптимизатору. Использование ASM вставок, при наличии продуманной системы intrinsics, больше тянет на мелкое пижонство, нежели на действительно полезный механизм.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
xelax
сообщение Oct 1 2008, 07:03
Сообщение #9


Местный
***

Группа: Свой
Сообщений: 370
Регистрация: 7-11-06
Пользователь №: 22 035



Отлично, определились.
Я мелкий пижон, который пишет кривой код.

А помимо флуда есть что-то по существу?
Go to the top of the page
 
+Quote Post
Rst7
сообщение Oct 1 2008, 07:19
Сообщение #10


Йа моск ;)
******

Группа: Модераторы
Сообщений: 4 345
Регистрация: 7-07-05
Из: Kharkiv-city
Пользователь №: 6 610



Цитата
А помимо флуда есть что-то по существу?


Вам же ответили:
Цитата
перепишите нужные процедуры на чистом асме


Кроме того, хорошо бы знать задачу более глобально. Покажите всю функцию.


--------------------
"Практика выше (теоретического) познания, ибо она имеет не только достоинство всеобщности, но и непосредственной действительности." - В.И. Ленин
Go to the top of the page
 
+Quote Post
tag
сообщение Oct 1 2008, 07:22
Сообщение #11


Частый гость
**

Группа: Свой
Сообщений: 151
Регистрация: 21-02-06
Пользователь №: 14 561



Цитата(xelax @ Sep 30 2008, 13:56) *
static uint16_t halMeasurement(void)
{
register volatile uint16_t cnt asm ("r24") = 0;
...
...
...
return cnt;
}
[/code]

В документации нашёл только как подобное сделать с глобальными переменными, но это не то.


...попробуйте вот так

Код
static uint16_t halMeasurement(void)
{
  static __regvar __no_init uint16_t cnt @ 14;
  ...
  ...
  ...
  return cnt;
}


будут использоваться регистры R14,R15
Go to the top of the page
 
+Quote Post
xelax
сообщение Oct 1 2008, 08:03
Сообщение #12


Местный
***

Группа: Свой
Сообщений: 370
Регистрация: 7-11-06
Пользователь №: 22 035



Цитата(tag @ Oct 1 2008, 11:22) *
...попробуйте вот так

Код
static uint16_t halMeasurement(void)
{
  static __regvar __no_init uint16_t cnt @ 14;
  ...
  ...
  ...
  return cnt;
}


будут использоваться регистры R14,R15


Это понятно, примерно такое я нашёл в мануале на компилятор. Но проблема в том, что это static переменная, а меня интересует именно локальная. Так что такой вариант не прокатит.
К стати иаровский support тоже предложил переписать код на асме, так как оптимизатор может по своему такие вещи наоптимизировать.
Видимо прийдётся переписать на чистом асме как все нормальные ПАЦЦАНЫ cool.gif , но остаюсь при своём мнении, что за такую кучу баблосов(причём за каждое рабочее место) могли бы сделать более широкую функциональность.
Go to the top of the page
 
+Quote Post
zltigo
сообщение Oct 1 2008, 08:38
Сообщение #13


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(xelax @ Oct 1 2008, 10:03) *
...но остаюсь при своём мнении

Вы бы показали какую функцию хочется "заоптимизировать", а то я тоже "остаюсь при своем мнении" smile.gif


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
xelax
сообщение Oct 1 2008, 09:04
Сообщение #14


Местный
***

Группа: Свой
Сообщений: 370
Регистрация: 7-11-06
Пользователь №: 22 035



Цитата(zltigo @ Oct 1 2008, 12:38) *
Вы бы показали какую функцию хочется "заоптимизировать", а то я тоже "остаюсь при своем мнении" smile.gif

Ну во первых я нигде и словом не обмолвился что хочу что-то оптимизировать. wink.gif
Более того, считаю свои познаниями в ассемблере ниже среднего уровня и стараюсь писать код только на С.
Код который я был ВЫНУЖДЕН написать на асмовских вставках производит измерение тактовый частоты микроконтроллера, с помощью асинхронного осциллятора на часовом кварце. И поэтому мне необходимо знать сколько тактов длиться одно измерение.
Также у меня требования к коду, это работоспособность оного на любом уровне оптимизации компилятора. А теперь добавилось требование это работоспособность под IAR.
А по сему чтобы не зависеть от опций компилятора при сборке библиотеки (а моим конечным продуктом является не конечное работоспособное устройство, а библиотека с набором функций) я сделал вставки на асме.
Не стал делать функции на чистом асме по одной простой причине. Для avr нет никакого стандарта передачи параметров в функцию и обратно подобно thumb-interwork для arm. И поэтому каждый производитель asm компилятора бузует свои правила кто во что горазд. А асмовская вставка в сишный код позволяет невилировать это разнообразия-безобразия за счёт С компилятора. Так что всё таки это не пижонство smile.gif , а суровые будни программиста.

Вот моя функция целиком
Код
/******************************************************************************
Calculates number of cycles during EXTERNAL_TICKS period.
Parameters:
  none
Returns:
  number of the cycles.
******************************************************************************/
static uint16_t halMeasurement(void)
{
  register volatile uint16_t cnt asm ("r24") = 0;

  ASM (
     "push r21              \n\t"

     "lds  r21, 0x00B6      \n\t" /* ASSR |= (1 << AS2) */
     "ori  r21, 0x80        \n\t" /* ASSR |= (1 << AS2) */
     "sts  0x00B6, r21      \n\t" /* ASSR |= (1 << AS2) */

     "ldi  r21, 0x01        \n\t" /* TCCR2B = 1 << CS20 */
     "sts  0x00B1, r21      \n\t" /* TCCR2B = 1 << CS20 */

     "pop  r21              \n\t"
  );

  cnt = 0;
  ATOMIC_SECTION_ENTER

#if EXTERNAL_TICKS == 100
  ASM (
     ".set  EXTERNAL_TICKS, 0x64  \n\t"
     "push r21                    \n\t"

     "ldi  r21, 0                 \n\t" /* TCNT2 = 0 */
     "sts  0x00B2, r21            \n\t" /* TCNT2 = 0 */

   "__l0:                         \n\t"
     "lds  r21, 0x00B6            \n\t"
     "andi r21, 0x1B              \n\t"
     "brne  __l0                  \n\t"  /* while (ASSR & 0x1B); */


   "__l1:                         \n\t"
     "adiw r24, 0x01              \n\t"  /* cnt ++ (2 cycle) */
     "lds  r21, 0x00B2            \n\t"  /* read TCNT2 */
     "subi r21, EXTERNAL_TICKS    \n\t"  /* TCNT2 - EXTERNAL_TICKS */
     "brmi __l1                   \n\t"  /* if TCNT2 > EXTERNAL_TICKS then exit */

     "pop r21                     \n\t"
  );

  ATOMIC_SECTION_LEAVE
  return cnt;
}
#else
  #error " EXTERNAL_TICKS must be 100 "
#endif

Первую асмовскую вставку можно было бы и не деалть, а оставить код на С, но её я написал для тренировки smile.gif . А вот без второй я думаю обойтись нельзя.
Go to the top of the page
 
+Quote Post
Rst7
сообщение Oct 1 2008, 09:27
Сообщение #15


Йа моск ;)
******

Группа: Модераторы
Сообщений: 4 345
Регистрация: 7-07-05
Из: Kharkiv-city
Пользователь №: 6 610



Цитата
Код который я был ВЫНУЖДЕН написать на асмовских вставках производит измерение тактовый частоты микроконтроллера, с помощью асинхронного осциллятора на часовом кварце.


А с какой точностью надо произвести измерение, за сколько времени и зачем результаты этого измерения нужны? Потому как мне кажется, что Вы себе задачу усложняете.


--------------------
"Практика выше (теоретического) познания, ибо она имеет не только достоинство всеобщности, но и непосредственной действительности." - В.И. Ленин
Go to the top of the page
 
+Quote Post
tag
сообщение Oct 1 2008, 09:38
Сообщение #16


Частый гость
**

Группа: Свой
Сообщений: 151
Регистрация: 21-02-06
Пользователь №: 14 561



Цитата(xelax @ Oct 1 2008, 13:04) *
Первую асмовскую вставку можно было бы и не деалть, а оставить код на С, но её я написал для тренировки smile.gif . А вот без второй я думаю обойтись нельзя.


...мне кажется вы себе усложняете жизнь, почему бы это просто на C не написать?
Go to the top of the page
 
+Quote Post
zltigo
сообщение Oct 1 2008, 09:51
Сообщение #17


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(xelax @ Oct 1 2008, 11:04) *
Более того, считаю свои познаниями в ассемблере ниже среднего уровня и стараюсь писать код только на С.

Тем не менее, написали кусок на ASM и это нормально!
Цитата
Код который я был ВЫНУЖДЕН написать на....

Читать не стал, поскольку см. ниже...
Цитата
Не стал делать функции на чистом асме по одной простой причине. Для avr нет никакого стандарта передачи параметров в функцию и обратно подобно thumb-interwork для arm. И поэтому каждый производитель asm компилятора бузует свои правила кто во что горазд.

Это не имеет никакого значения, поскольку у тех, котоые "во что горазд" и форматы/линкеры соответственно несовместимые, посему так или иначе библиотеку придется пересобирать и править исходники. Править всегда однотипные места в ASM исходниках, почитав абзац-другой в документации на конкретный компилятор много проще, чем разбираться с разнообразнейшими ASM вставками и последствиями их применения, для того-же конкретного компилятора.
Цитата
Так что всё таки это не пижонство smile.gif , а суровые будни программиста.

"А я тогда кто?" © анекдот smile.gif

Цитата(tag @ Oct 1 2008, 11:38) *
...мне кажется вы себе усложняете жизнь, почему бы это просто на C не написать?

На ум приходит только:
Цитата
Также у меня требования к коду, это работоспособность оного на любом уровне оптимизации компилятора

Хотя для этого просто нужно воспользоваться соответствующей прагмой жестко задающий нужный( высокий ) уровень оптимизации для кода/куска кода.
Кроме того, а причем это к "библиотеке"-то? Если это действительно библиотека, то как соберете сами, так и будет.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
xelax
сообщение Oct 1 2008, 10:31
Сообщение #18


Местный
***

Группа: Свой
Сообщений: 370
Регистрация: 7-11-06
Пользователь №: 22 035



Цитата(zltigo @ Oct 1 2008, 13:51) *
Это не имеет никакого значения, поскольку у тех, котоые "во что горазд" и форматы/линкеры соответственно несовместимые, посему так или иначе библиотеку придется пересобирать и править исходники. Править всегда однотипные места в ASM исходниках, почитав абзац-другой в документации на конкретный компилятор много проще, чем разбираться с разнообразнейшими ASM вставками и последствиями их применения, для того-же конкретного компилятора.


Вот этого я стремлюсь избежать всеми способами. Очень не хочется править код при переходе с компилятора на компилятор. Хотелось бы иметь единожды написанный и тщательно отлаженный код, который могли бы собирать, проверять и продавать без участия программиста.
По крайней мере стремлюсь к этому.

Цитата(zltigo @ Oct 1 2008, 13:51) *
Хотя для этого просто нужно воспользоваться соответствующей прагмой жестко задающий нужный( высокий ) уровень оптимизации для кода/куска кода.

Идея интересная, но в gcc с прагмами туго, а вообще надо покурить документацию.

Цитата(Rst7 @ Oct 1 2008, 13:51) *
А с какой точностью надо произвести измерение, за сколько времени и зачем результаты этого измерения нужны? Потому как мне кажется, что Вы себе задачу усложняете.

Измерения нужны для калибровке RC генератора. Алгоритм калибровки из атмеловского даташита, асм частично позамствован тоже оттуда smile.gif
Один и тот же сишный код даёт разный дизасм от разных компиляторов. Gcc даёт код исполняемый за 11 тактов, iar за 7 (результаты при максимальной оптимизации по размеру). Про различную оптимизацию смотри мой предыдущий пост.
Go to the top of the page
 
+Quote Post
zltigo
сообщение Oct 1 2008, 10:43
Сообщение #19


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(xelax @ Oct 1 2008, 12:31) *
Вот этого я стремлюсь избежать всеми способами.

Вы к этому c Inline ASM просто рветесь всеми способами, а не избегаете sad.gif
Цитата
но в gcc с прагмами туго...

smile.gif Это входит в джентельменский набор любого компилятора.
Цитата
...продавать...

Оооооо!


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
Rst7
сообщение Oct 1 2008, 10:50
Сообщение #20


Йа моск ;)
******

Группа: Модераторы
Сообщений: 4 345
Регистрация: 7-07-05
Из: Kharkiv-city
Пользователь №: 6 610



Цитата
Измерения нужны для калибровке RC генератора. Алгоритм калибровки из атмеловского даташита, асм частично позамствован тоже оттуда


Ага. Таки я телепат smile.gif)) Я так и думал.

Ну так вот что я Вам скажу. Если Вас не устраивает начальная точность калибровки внутреннего RC, то Вам необходимо подстраивать его все время, он от температуры и питания плавает больше погрешности заводской калибровки.

Посему я делаю так (это код, который поддерживает тактовую частоту равной 8 МГц)

Код
#pragma vector=TIMER2_OVF_vect
__interrupt void INT_PLL(void)
{
  unsigned int i=TCNT1;
  TCNT1=0;
  if (i<7813)
    OSCCAL++; //Увеличиваем тактовую частоту
  else
    OSCCAL--; //Уменьшаем тактовую частоту
  SECOND_PULSE=1;
}

void InitPLL(void)
{
  TCCR1B=5; //Прескаллер 1:1024, за одну секунду - 7812.5 тактов => сравнение с 7813
  TCCR2B=5; //Прескаллер 1:128 - раз в секунду
  ASSR=1<<AS2;
  TIMSK2=1<<TOIE2;
}


Вот это решение правильно со всех сторон - и асма нет, и постоянно подстраивает.


--------------------
"Практика выше (теоретического) познания, ибо она имеет не только достоинство всеобщности, но и непосредственной действительности." - В.И. Ленин
Go to the top of the page
 
+Quote Post
xelax
сообщение Oct 1 2008, 13:46
Сообщение #21


Местный
***

Группа: Свой
Сообщений: 370
Регистрация: 7-11-06
Пользователь №: 22 035



Цитата(zltigo @ Oct 1 2008, 14:43) *
Вы к этому c Inline ASM просто рветесь всеми способами, а не избегаете sad.gif

По крайней мере с первого раза не скомпилировалась только одна вставка.
Из ассемблерныйх файлов пришлось править абсолютно все. Объявление переменных, ссылки, дефайны, регистровые пары для передачи параметров и т.д.
Так что всё о чём мы здесь разглагольствуем это аргументы, факты говорят о другом.

Цитата(zltigo @ Oct 1 2008, 14:43) *
smile.gif Это входит в джентельменский набор любого компилятора.

вот уж не факт. см. документацию на gcc
gcc

Цитата(zltigo @ Oct 1 2008, 14:43) *
Оооооо!

smile.gif бывает...

Цитата(Rst7 @ Oct 1 2008, 14:43) *
Посему я делаю так (это код, который поддерживает тактовую частоту равной 8 МГц)


Спасибо, думаю в дальнейшем пригодится. А вы пробовали измерять на интервалах меньше секунды? И на каком минимально интервале обеспечивается приемлемая точность калибровки(достаточная для обмена по уарту)? Дело в том что у меня есть тип девайсов которые работают намного меньше секунды, остальное время находятся в power save.
Go to the top of the page
 
+Quote Post
zltigo
сообщение Oct 1 2008, 14:11
Сообщение #22


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(xelax @ Oct 1 2008, 15:46) *
вот уж не факт. см. документацию на gcc
gcc

Документация и GCC smile.gif вещи плохо пересекающиеся sad.gif Поиск по тому-же gcc.gnu.org
http://www.google.com/search?client=opera&...-8&oe=utf-8


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
xelax
сообщение Oct 1 2008, 15:13
Сообщение #23


Местный
***

Группа: Свой
Сообщений: 370
Регистрация: 7-11-06
Пользователь №: 22 035



Цитата(zltigo @ Oct 1 2008, 18:11) *
Документация и GCC smile.gif вещи плохо пересекающиеся sad.gif Поиск по тому-же gcc.gnu.org
http://www.google.com/search?client=opera&...-8&oe=utf-8


The `#pragma GCC optimize' pragma is not implemented in GCC versions earlier than 4.4. 07.gif
На сайте текущая версия 4.3.2 biggrin.gif
Но это уже про gcc, а не про iar smile.gif
Go to the top of the page
 
+Quote Post
Rst7
сообщение Oct 1 2008, 15:34
Сообщение #24


Йа моск ;)
******

Группа: Модераторы
Сообщений: 4 345
Регистрация: 7-07-05
Из: Kharkiv-city
Пользователь №: 6 610



Цитата
Спасибо, думаю в дальнейшем пригодится.


Пожалуйста. Но, видимо, главная моя мысль в Ваш мозг пока не проникла. Она заключается в следующем - надо сравнивать значения 2х аппаратных таймеров, а не одного программного и одного аппаратного. Именно в этом корень Ваших проблем, а не в том, как разработчики разных компиляторов смотрят на идеологию написания програм на языке Си.

Цитата
И на каком минимально интервале обеспечивается приемлемая точность калибровки


Тут надо смотреть, на каком интервале ошибка, вносимая программными задержками при чтении данных с таймера станет меньше, ну скажем, 0.2% (в худшем случае). Но ответить на этот вопрос сможете только Вы сами, зная программно-аппаратную архитектуру Вашей разработки.


--------------------
"Практика выше (теоретического) познания, ибо она имеет не только достоинство всеобщности, но и непосредственной действительности." - В.И. Ленин
Go to the top of the page
 
+Quote Post
xelax
сообщение Oct 1 2008, 15:52
Сообщение #25


Местный
***

Группа: Свой
Сообщений: 370
Регистрация: 7-11-06
Пользователь №: 22 035



Цитата(Rst7 @ Oct 1 2008, 19:34) *
Пожалуйста. Но, видимо, главная моя мысль в Ваш мозг пока не проникла. Она заключается в следующем - надо сравнивать значения 2х аппаратных таймеров, а не одного программного и одного аппаратного. Именно в этом корень Ваших проблем, а не в том, как разработчики разных компиляторов смотрят на идеологию написания програм на языке Си.

Это Вы как определили? Опять телепатическими способностями smile.gif

Цитата(Rst7 @ Oct 1 2008, 19:34) *
Тут надо смотреть, на каком интервале ошибка, вносимая программными задержками при чтении данных с таймера станет меньше, ну скажем, 0.2% (в худшем случае). Но ответить на этот вопрос сможете только Вы сами, зная программно-аппаратную архитектуру Вашей разработки.

А как собственно вы можете гарантировать такую задержку. Контролллер прерываний в меге не имеет программируемых приоритетов. Может возникнуть одновременно эн прерываний более приоритетных нежели от пререполнения асинхронного таймера.
На больших интервалах это примерно усредняется, а на малых как повезёт получается?
Go to the top of the page
 
+Quote Post
Rst7
сообщение Oct 1 2008, 16:21
Сообщение #26


Йа моск ;)
******

Группа: Модераторы
Сообщений: 4 345
Регистрация: 7-07-05
Из: Kharkiv-city
Пользователь №: 6 610



Цитата
А как собственно вы можете гарантировать такую задержку


Я не могу. Я же сказал, что
Цитата
ответить на этот вопрос сможете только Вы сами, зная программно-аппаратную архитектуру Вашей разработки


--------------------
"Практика выше (теоретического) познания, ибо она имеет не только достоинство всеобщности, но и непосредственной действительности." - В.И. Ленин
Go to the top of the page
 
+Quote Post
xelax
сообщение Oct 1 2008, 19:07
Сообщение #27


Местный
***

Группа: Свой
Сообщений: 370
Регистрация: 7-11-06
Пользователь №: 22 035



Цитата(Rst7 @ Oct 1 2008, 20:21) *
Я не могу. Я же сказал, что


Это были мысли вслух smile.gif

Я же писал, что результат моей работы это библиотечка. Конечную архитектуру приложения и список задействованных аппаратных узлов mcu могу только приблизительно предполагать. Так что конечно метод калибровки с помощью двух аппаратных таймеров хорош, но для некоторых решений навряд ли подойдёт.
Go to the top of the page
 
+Quote Post
singlskv
сообщение Oct 1 2008, 19:43
Сообщение #28


дятел
*****

Группа: Свой
Сообщений: 1 681
Регистрация: 13-05-06
Из: Питер
Пользователь №: 17 065



Цитата(xelax @ Oct 1 2008, 19:52) *
На больших интервалах это примерно усредняется, а на малых как повезёт получается?
Ну Вы же сами себе и ответили... smile.gif , вот и усредняйте по 256 секундам например,
те смена OSCCAL не чаще чем 1 раз за 256 секунд, для уплывания по температуре это
более чем достаточно...
А для начальной настройки сделайте функции которые вызываются с отключенными остальными
прерываниями.
Go to the top of the page
 
+Quote Post

2 страниц V   1 2 >
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 21st July 2025 - 07:46
Рейтинг@Mail.ru


Страница сгенерированна за 0.01668 секунд с 7
ELECTRONIX ©2004-2016