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

 
 
> Порты AVR и компиляция
allexmor
сообщение Sep 26 2007, 15:26
Сообщение #1





Группа: Участник
Сообщений: 12
Регистрация: 19-05-07
Пользователь №: 27 828



Очень долго работал с разными МК(51, в основном ARM) решил попробовать AVR вопросы:
У этих AVR что нет удобного побитового доступа к портам?
Какой компилятор делает наиболее красивый код?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
SasaVitebsk
сообщение Sep 27 2007, 20:02
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 2 712
Регистрация: 28-11-05
Из: Беларусь, Витебск, Строителей 18-4-220
Пользователь №: 11 521



Есть ещё один момент для WinAvr. Только за последних пару лет его пересобирали раз десять. Регулярно что-то меняли в том числе координальное. Так что насчёт совместимости и большого количества проектов это не вся правда. Править придётся. То там то тут выскакивают сообщения - пересобрал - неработает. Работать с ним отнюдь не легче чем с IARом. Хотя и IAR к числу лёгких в освоении пакетов не относится. Документация разбросана по всему интернету. Никакой упорядоченности. Что-то надо - полез искать. Чаще всего если и найдёшь, то в каком нибудь FAQе.

Короче очень геморойная вещь. Ясно что если освоил, то тогда нормально.

Выпад по поводу данных в EEPROM и FLASH - явно бредовый. Удобная вещь - она всегда удобная.

Зачем мне для обращения к Flash переменной обращаться ч/з подпрограмму? А если у меня в одной формуле/операторе используются переменные Flash и RAM? Например знакогенератор в видеоозу вывожу. IAR отличный код генерит и прекрасно оптимизирует такие места. А чтобы по ошибке не использовать переменные EEPROM, выход простой. defunct его фактически указал. Обзавите переменную eeMyInt. И всё для вас будет ясно.

Это просто яркий пример как можно всё с ног на голову поставить.
Go to the top of the page
 
+Quote Post
singlskv
сообщение Sep 28 2007, 22:37
Сообщение #3


дятел
*****

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



Цитата(SasaVitebsk @ Sep 28 2007, 00:02) *
Выпад по поводу данных в EEPROM и FLASH - явно бредовый. Удобная вещь - она всегда удобная.

Зачем мне для обращения к Flash переменной обращаться ч/з подпрограмму?

Это просто яркий пример как можно всё с ног на голову поставить.
Давайте посмотрим, на Вашем любимом IAR:
Код
#include <string.h>

__eeprom char eeString[]="Prived !";
char String[10]="ABCDEFGHIJ";

int main(void)
{
  memcpy(String,  (void const *)eeString, 10);
  memcpy((void *)eeString, String, 10);
  return 0;
}

Скомпилируйте этот код и пройдитесь по нему отладчиком,
я думаю что результат Вас сильно порадует, особенно второй memcpy biggrin.gif

P.S Тока не нужно мне рассказывать что этот пример высосан из пальца...
Прямое преобразование типов конечно вставлено специально,
тока где и когда Вы наткнетесь на такой результат в реальной программе будете знать
тока Вы и Ваш доктор в дурке (после отладки такого кода) smile.gif
Go to the top of the page
 
+Quote Post
defunct
сообщение Sep 29 2007, 11:54
Сообщение #4


кекс
******

Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326



Цитата(singlskv @ Sep 29 2007, 01:37) *
P.S Тока не нужно мне рассказывать что этот пример высосан из пальца...
Прямое преобразование типов конечно вставлено специально,
тока где и когда Вы наткнетесь на такой результат в реальной программе будете знать
тока Вы и Ваш доктор в дурке (после отладки такого кода) smile.gif

Ок, аналогичный пример:
Код
char Str[]="Hello";
char SomeChar;
int main(void)
{
     memcpy( (void *)SomeChar, Str, sizeof(Str));
}

Проблема здесь та же самая что и в вашем примере, и даже без переменных в eeprom.
Поэтому можете также вместе с доктором ковырять и этот код. Ибо когда нет понимания, что происходит в программе и что может происходить - забудьте про (void *).
Go to the top of the page
 
+Quote Post
singlskv
сообщение Sep 29 2007, 17:21
Сообщение #5


дятел
*****

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



Цитата(defunct @ Sep 29 2007, 15:54) *
Ок, аналогичный пример:
Код
....................

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

Насколько я знаю, в стандарте С вобще нет такого типа void __eeprom * smile.gif

А вот теперь представьте себе:
Код
__eeprom char eeString[]="Prived !";
char String[10]="ABCDEFGHI";
int Int=1;
long Long=2;

typedef struct
{
    void *ptr;
    int  size;
} SomeData;

SomeData* MassivHrenZnaetSKakimiDannimy[10];
......................
  {
    MassivHrenZnaetSKakimiDannimy[0].ptr = eeString;
    MassivHrenZnaetSKakimiDannimy[0].size = sizeof(eeString);
    MassivHrenZnaetSKakimiDannimy[1].ptr = String;
    MassivHrenZnaetSKakimiDannimy[1].size = sizeof(String);
    MassivHrenZnaetSKakimiDannimy[2].ptr = &Int;
    MassivHrenZnaetSKakimiDannimy[2].size = sizeof(Int);
    MassivHrenZnaetSKakimiDannimy[3].ptr = &Long;
    MassivHrenZnaetSKakimiDannimy[3].size = sizeof(Long);
.............................
.............................
.............................
    memcpy(KudatoTam,  MassivHrenZnaetSKakimiDannimy[x].ptr, MassivHrenZnaetSKakimiDannimy[x].size);
..........................
..........................
  }

Хрен знает какие данные оказались не совсем хрен знает какими, а все по тому что
кое кто придумал свой новый тип данных... __eeprom xxx
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Sep 29 2007, 22:09
Сообщение #6


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Цитата(singlskv @ Sep 29 2007, 20:21) *
Насколько я знаю, в стандарте С вобще нет такого типа void __eeprom * smile.gif
Мы не обсуждали портируемость. В других компиляторах нет eeprom_write_byte();, а в некоторых процессорах нет eeprom wink.gif
Цитата(singlskv @ Sep 29 2007, 20:21) *
А вот теперь представьте себе:
Код
    MassivHrenZnaetSKakimiDannimy[0].ptr = eeString;
Получаем ошибку компилятора о несоответствии типов. Ту самую, которую в предыдущем примере вы задавили явным приведением к (void *). Ту самую, которую вы получите в WinAVR, если попытаетесь присвоть (void *) переменную типа (void EEMEM *) или prog_void.
Цитата(singlskv @ Sep 29 2007, 21:42) *
Где в этой проге можно написать cfg_EE = cfg_RAM ?
Не поверите - именно там, где надо сохранить данные. Компилятор подставит для каждого байта вызов __eeput8_16, в котором именно там, где это необходимо будет запрет/разрешение прерываний. Поверьте, код будет практически идентичен eeprom_write_byte(), за которую вы агитируете. Для очень редких случаев есть вариант *((uint8_t *)&cfg_EE.Config.ParamA)[2] = byte; Что касается ресурса eeprom, то я не случайно взял конфиг - как наиболее общий случай, когда ресурса хватит даже самому пытливому пользователю. И не пытайтесь меня убедить, что я должен потратить лишнее время чтобы экономить ресурс там, где его и так с запасом - это все равно что агитировать писать на асме (со всеми вытекающими недостатками), чтобы втиснуть програму в 2к памяти при 8к на борту. Если же есть какие-либо специальные требования (ресурс, необходимость отслеживать окончание по прерыванию) - думать головой никто не отменял.

Цитата(SergeiCh @ Sep 29 2007, 10:05) *
Но лучше (надеюсь, грамотные люди со мной согласятся) для конкретной задачи шевеления ногой писать макросы или online функции типа led_busy_on(), led_busy_off() и в коде использовать уже их. led_busy = 1, IMHO, хуже, разве что led_busy = ON smile.gif ...
Почти согласен. Но писать для каждой ноги xxx_on(), xxx_off() - да, конечно так и делал раньше. Но теперь - on(LED); off(FLASH_CS); if(signal(KEY)) - тоже абсолютно портируемо на любой С-компилятор. И сгенеренный код будет идентичен тому, который надо написать вручную для xxx_on(); xxx_off();


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
singlskv
сообщение Sep 29 2007, 22:36
Сообщение #7


дятел
*****

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



Цитата(Сергей Борщ @ Sep 30 2007, 01:57) *
Получаем ошибку компилятора о несоответствии типов. Ту самую, которую в предыдущем примере вы задавили явным приведением к (void *). Ту самую, которую вы получите в WinAVR, если попытаетесь присвоть (void *) переменную типа (void EEMEM *) или prog_void.
Я даже и не сомневался что именно Вы укажите на это несоответствие smile.gif,
этот код я даже и не пытался скомпилировать потому что очевидно одно из двух,
если компилятор пропустит такой код, то все очень плохо и пользоваться __eeprom
просто нельзя ни при каких обстоятельствах, а если не пропустит, то это говорит
о том что типы которые придумал IAR(__eeprom xxx), Эээ... ну мягко говоря не
являются таки типами..., по крайней мере в понимании С.
Цитата
Не поверите - именно там, где надо сохранить данные. Компилятор подставит для каждого байта вызов __eeput8_16, в котором именно там где это необходимо будет запрет/разрешение прерываний. Поверьте, код будет практически идентичен eeprom_write_byte(), за которую вы агитируете.
Упс..., это где это я агитировал за использование eeprom_write_byte() ?
Я этим ни разу не пользовался smile.gif У меня свои функции.
Если Вас не затруднит ответьте таки конкретно на 2 моих вопроса из поста №37.



Все равно не понимаю в чем Вы пытаетесь меня убедить.
Цитата(sensor_ua @ Sep 30 2007, 02:21) *
Код
/* Wait for completion of previous write */
while(EECR & (1<<EEWE));
В том что я обязан висеть в этом цикле пока не закончится запись ?
У меня это выглядит примерно так:
Код
//==============================================================
// Автомат записи в EEPROM
//==============================================================
void EepromRun()
{

  if (EECR & (1<<EEWE)) return;                // идет запись ? да, тогда отваливаем (другие дела)

  if (CurrState == EE_FREE)
  {
     ...................................
     ...................................

}

Цитата
Запись заканчивается не сразу после засылки адреса и данных

а после АППАРАТНОЙ записи - для мега16 это 8.5 ms типовое значение. Или Вы хотите сказать, что, буквы EEMEM автоматом вдруг делают неожидающей встроенную функцию
static inline void __attribute__ ((always_inline))
eeprom_write_byte (uint8_t *addr,uint8_t value);
? (Может, она случайноwink.gif и неожидающая, но тогда ею пользоваться низзя) А не пробовали посмотреть, во что раскладывается аналогичная операция у IAR? Дык тоже инлайновый вариант.
Если не используем встроенные функции или модификаторы, а боремся за отсутствие ожиданий при работе с EEPROM, то пример задачи не к месту - в обоих случаях нужно писать СВОЁ.

Я НЕ пользуюсь ни IARовским ни каким другим вариантом доступа к EEPROM.
У меня есть свой хорошо работающий автомат записи.
Go to the top of the page
 
+Quote Post
defunct
сообщение Sep 29 2007, 23:56
Сообщение #8


кекс
******

Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326



Цитата(singlskv @ Sep 30 2007, 01:36) *
Упс..., это где это я агитировал за использование eeprom_write_byte() ?
Я этим ни разу не пользовался smile.gif У меня свои функции.

Если речь идет о задаче-драйвере записи eeprom, то что мешает внутри нее использовать уже готовые механизмы компиляторов, e.g.:

Код
void EEPROM_Dispatch(void)
{
    if (EECR & (1<<EEWE))
        return;
    ....
    if (*(__eeprom U8 *)адрес != data to write)
        *(__eeprom U8 *)адрес = data to write;
}


Если вы даже не удосужились посмотреть и разобраться с кодом eeprom_read_byte()/eeprom_write_byte() пакета в котором работаете, и начали сразу городить что-то свое, то спорить с вами о возможностях IAR просто бесполезная трата времени.

Цитата
Я НЕ пользуюсь ни IARовским ни каким другим вариантом доступа к EEPROM.
У меня есть свой хорошо работающий автомат записи.

Порой глупо из-за какого-то принципа не пользоваться уже имеющимися механизмами.
К тому же они нисколько не помешали бы вашему автомату, а наоборот сделали бы его более прозрачным/читаемым.
Go to the top of the page
 
+Quote Post
singlskv
сообщение Sep 30 2007, 18:32
Сообщение #9


дятел
*****

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



Цитата(defunct @ Sep 30 2007, 03:56) *
Если речь идет о задаче-драйвере записи eeprom, то что мешает внутри нее использовать уже готовые механизмы компиляторов, e.g.:
Воспользовался Вашим советом:
Код
__eeprom unsigned char a=1;
unsigned char b;

void SomeFunc()
{
  b=2;
}

void EEPROM_Run()
{
  if (EECR & (1<<EEWE)) return;
  if (a != b) a=b;
}

int main(void)
{
  SomeFunc();
  EEPROM_Run();

  return 0;
}


IAR, получил 81 такт на выполнение EEPROM_Run().
Написал тоже самое(по функциональности) "ручками", скомпилировал на WinAvr и на IAR,
и там и там получил 33 такта. (во всех случаях использовалась максимальная оптимизация)

Если Вас устраивает такой оверхед - пользуйтесь, меня не устраивает.

У меня для этого автомата максимальное время каждой стадии его работы чуть боле 100 тактов,
при этом поддерживается запись в два блока памяти(копии) и попутно подсчет/сравнение
СRC16 c уведомлением основной проги если были ошибки...

Цитата
Если вы даже не удосужились посмотреть и разобраться с кодом eeprom_read_byte()/eeprom_write_byte() пакета в котором работаете, и начали сразу городить что-то свое, то спорить с вами о возможностях IAR просто бесполезная трата времени.
Вы знаете, именно так и поступаю, сначала ознакомление со штатными средствами,
если меня устраивает, пользуюсь штатными, если нет, пишу свою реализацию.
Кстати вот вам и примерчик:
CRC16 и CRC8
CRC16 - пользуюсь встроенным, поскольку после изучения кода стало понятно что я просто ничего
не смогу выиграть.
CRC8 - очень медленно (для моих задач) , пользуюсь своим вариантом, причем их 2 на выбор,
если памяти много - табличный, мало - другой быстрый вариант.

Цитата
Порой глупо из-за какого-то принципа не пользоваться уже имеющимися механизмами.
К тому же они нисколько не помешали бы вашему автомату, а наоборот сделали бы его более прозрачным/читаемым.
Понятнее...,но в 2,5 раза медленнее 07.gif
Принципы здесь не при чем.

Цитата(Сергей Борщ @ Sep 30 2007, 11:59) *
Ну, раз вы агитируете за WinAVR и доступ функциями, раз вы нигде до этого не упомянули, что вами используется закат солнца вручную - телепатически я сделал вывод, что вы агитиреуте за реализованный в avr-libc метод.
Согласен, нужно было не расчитывать на телепатию собеседников и чуть
пораньше объяснить что я имею в виду.
А "закат солнца вручную" иногда очень эфективный метод smile.gif
Цитата
Это является расширением языка. Нормальные типы, ибо поддерживают все операции над данными - арифметику, присваивание, взятие адреса, обращение по указателю. Указатели на эти типы полностью аналогичны указателям на данные с __attribute__(("progmem")) и __attribute__(("EEPROM")), против которых (так получается) вы нас агитируете. Причем последние, в отличие от ИАРовских, не являются полноценными типами, ибо поддерживают только операцию взятия адреса и арифметику указателей.
ИМХО, это не нормальные типы, и мои примеры это показали.
Невозможность автоматического приведения указателя на такой тип к void* говорит
именно о том что тип неполноценен.
Считаю подход WinAvr(Gcc) в данном случае просто более честным.
Цитата
Но, извините, а вы эти данные только пишете, и никогда не читаете?
Чаще конечно пишу, чтение в основном при первоначальной загрузке параметров.
Но иногда нужно и чтение в процессе работы, поэтому чтение тоже интегрированно в
этот автомат.
Цитата
Если все же читаете, то что мешает использовать простые и удобные встроенные возможности компилятора?
Когда нужно быстро, пользоваться своим, а когда нужно медленно, то пользоваться библиотекой ?
А зачем мне плодить сущности и увеличивать код ?
Цитата
Так я же и писал, что бывают случаи, когда надо работать головой и использовать нештатные решения. Но это не повод отказываться от удобных возможностей в остальных случаях.
У меня такие случаи в каждом первом проекте. smile.gif
Всегда нужно чего-нить писать во время основной работы...
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Sep 30 2007, 19:30
Сообщение #10


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Цитата(singlskv @ Sep 30 2007, 21:32) *
А "закат солнца вручную" иногда очень эфективный метод smile.gif
Согласен, если выбора нет. А если он есть - смотря какой именно из парамеров оптимизировать smile.gif
Цитата(singlskv @ Sep 30 2007, 21:32) *
Невозможность автоматического приведения указателя на такой тип к void* говорит именно о том что тип неполноценен.
Не готов сразу ответить. "Чистый" С вообще не знает про разные адресные пространства. Да и как вы физически представляете приведение указателя на одно адресное пространство к указателю на другое? Только используя __generic указатели, что хоть и влечет дикий оверхед, но тем не менее реализовано в IAR.
Цитата(singlskv @ Sep 30 2007, 21:32) *
Считаю подход WinAvr(Gcc) в данном случае просто более честным.
На самом деле он просто не доделан wink.gif А пока он не только не честный, но как раз наоборот:
Код
uint8_t EEMEM EE_data;
uint8_t PROGMEM Const[] = "Tipa test";
void Test()
{
    uint8_t Tmp;
    Tmp = Const[0];
    EE_data = Tmp;
}
На фоне того, что такое компилируется молча и без ошибок тот факт, что на самом деле копирование происходит из ОЗУ в ОЗУ по совпадающим адресам кажется несущественным. Допустить такую ошибку гораздо проще (сам наступал), чем нарваться на случай, когда критично время записи в eeprom или ее ресурс. Тут четко видна недоделанность, ибо попытка присвоить что-либо Const все же вызывает сообщение об ошибке "попытка записи в read-only".
Цитата(singlskv @ Sep 30 2007, 21:32) *
Чаще конечно пишу, чтение в основном при первоначальной загрузке параметров.
И при этом данные, которые вы читаете, всегда представляют набор байтов? Не int, long, float, структуры, а именно голые байты? Если же данные осмысленны, то почему не воспользоваться предоставляемыми компилятором средствами?
Цитата(singlskv @ Sep 30 2007, 21:32) *
Когда нужно быстро, пользоваться своим, а когда нужно медленно, то пользоваться библиотекой ?
Честно говоря, так бы и поступил. Ибо встроенные методы дают более читаемый код. И чем больше читаемого кода в программе, тем меньше вероятность ошибки.
Цитата(singlskv @ Sep 30 2007, 21:32) *
А зачем мне плодить сущности и увеличивать код ?
Ну хорошо, наэкономите 40 байт памяти, а смысл, если ее все равно осталось полкило а то и больше? Читаемость упала, возможностей оптимизации у компилятора меньше. Ясное дело, если утаптываем, то резать придется везде.
Цитата(singlskv @ Sep 30 2007, 21:32) *
У меня такие случаи в каждом первом проекте. smile.gif Всегда нужно чего-нить писать во время основной работы...
"У каждого есть свои маленькие недостатки" (с)"В джазе только девушки".biggrin.gif


Цитата(SasaVitebsk @ Sep 30 2007, 22:17) *
В ближайшее время пойдёт xmega. Как уже объявлено, там будет память EEPROM в общем адресном пространстве. Я думаю IAR сохранит __eeprom. Таким образом портируемость программ у тех, кто использовал __eeprom - не пострадает.
Даже если не сохранит - портируемость достигнется добавлением строчки #define __eeprom


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
singlskv
сообщение Sep 30 2007, 20:04
Сообщение #11


дятел
*****

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



Цитата(Сергей Борщ @ Sep 30 2007, 23:30) *
На самом деле он просто не доделан wink.gif А пока он не только не честный, но как раз наоборот:[code] EEMEM
PROGMEM
На фоне того, что такое компилируется молча и без ошибок тот факт, что на самом деле копирование происходит из ОЗУ в ОЗУ по совпадающим адресам кажется несущественным. Допустить такую ошибку гораздо проще (сам наступал), чем нарваться на случай, когда критично время записи в eeprom или ее ресурс. Тут четко видна недоделанность, ибо попытка присвоить что-либо Const все же вызывает сообщение об ошибке "попытка записи в read-only".
Здесь мы видимо принципиально по разному подходим к вопросу.
EEMEM, PROGMEM я типами данных просто не считаю.
Это, по моему мнению, просто те расширения компилятора которые позволяют
отводить/инициализировать область в eeprom/flash. + взятие адреса для выяснения куда писать.
Все. Собственно в описании к avr-lib их тока так и предполагается использовать.
Цитата
И при этом данные, которые вы читаете, всегда представляют набор байтов? Не int, long, float, структуры, а именно голые байты?
Автомат оперирует на уровне блока байтов + CRC.
Цитата
Если же данные осмысленны, то почему не воспользоваться предоставляемыми компилятором средствами?Честно говоря, так бы и поступил.
Ну хорошо, наэкономите 40 байт памяти, а смысл, если ее все равно осталось полкило а то и больше? Читаемость упала, возможностей оптимизации у компилятора меньше. Ясное дело, если утаптываем, то резать придется везде.
Ну видимо у нас все-таки сильно разные задачки...
Цитата
Даже если не сохранит - портируемость достигнется добавлением строчки #define __eeprom
Кстати о портируемости smile.gif , мой вариант кода эквивалентный коду из поста №54
скомпилировался без вопросов и на Gcc и на IAR laughing.gif
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- allexmor   Порты AVR и компиляция   Sep 26 2007, 15:26
- - defunct   Цитата(allexmor @ Sep 26 2007, 18:26) У э...   Sep 26 2007, 16:01
- - Marian   Цитата(allexmor @ Sep 26 2007, 18:26) Оче...   Sep 26 2007, 16:38
|- - kv_addr   Цитата(Marian @ Sep 26 2007, 19:38) CVAVR...   Sep 27 2007, 20:15
- - sensor_ua   Цитататакого гонива как потребность применять 2 ко...   Sep 26 2007, 16:48
|- - defunct   Цитата(sensor_ua @ Sep 26 2007, 19:48) Wr...   Sep 26 2007, 22:19
|- - allexmor   Цитата(defunct @ Sep 27 2007, 02:19) Ну.....   Sep 27 2007, 04:51
- - bodja74   Зато сразу IOPIN=0x5555AAAA;   Sep 26 2007, 17:32
- - sensor_ua   Фаворит IAR. WinAVR вполне юзабилен, но когда нужн...   Sep 27 2007, 05:04
|- - allexmor   Цитата(sensor_ua @ Sep 27 2007, 09:04) Фа...   Sep 27 2007, 05:08
|- - alexander55   Цитата(allexmor @ Sep 27 2007, 09:08) Где...   Sep 27 2007, 05:49
- - mdmitry   WinAvr(gcc)+Eclipse - хорошая бесплатная связка дл...   Sep 27 2007, 06:27
|- - IJAR   IMHO: После IAR другие компиляторы даже пробовать...   Sep 27 2007, 06:51
|- - defunct   Цитата(IJAR @ Sep 27 2007, 09:51) IMHO: ...   Sep 27 2007, 08:56
|- - Qwertty   Цитата(defunct @ Sep 27 2007, 12:56) Ну п...   Sep 27 2007, 12:58
|- - defunct   Цитата(Qwertty @ Sep 27 2007, 15:58) Ну д...   Sep 27 2007, 13:10
||- - singlskv   Цитата(defunct @ Sep 27 2007, 17:10) Вы х...   Sep 27 2007, 14:48
|||- - defunct   Цитата(singlskv @ Sep 27 2007, 17:48) А к...   Sep 27 2007, 15:14
|||- - singlskv   Цитата(defunct @ Sep 27 2007, 19:14) Отли...   Sep 27 2007, 15:27
|||- - defunct   Цитата(singlskv @ Sep 27 2007, 18:27) eeC...   Sep 27 2007, 15:33
|||- - singlskv   Цитата(defunct @ Sep 27 2007, 19:33) Это ...   Sep 27 2007, 16:32
||- - Qwertty   Цитата(defunct @ Sep 27 2007, 17:10) Вы х...   Sep 27 2007, 16:23
|- - Сергей Борщ   Цитата(Qwertty @ Sep 27 2007, 15:58) Ну д...   Sep 27 2007, 14:23
|- - Qwertty   Цитата(Сергей Борщ @ Sep 27 2007, 18:23) ...   Sep 27 2007, 16:36
|- - singlskv   Цитата(Qwertty @ Sep 27 2007, 20:36) Знач...   Sep 27 2007, 17:49
|- - Сергей Борщ   Цитата(Qwertty @ Sep 27 2007, 19:36) Ну-н...   Sep 28 2007, 08:27
|- - Marian   Цитата(Сергей Борщ @ Sep 28 2007, 11:27) ...   Sep 28 2007, 15:16
- - GDI   В CodeVision можно сделать несколько файлов в прое...   Sep 27 2007, 09:09
||- - defunct   Цитата(singlskv @ Sep 29 2007, 20:21) Ну ...   Sep 29 2007, 19:47
|||- - singlskv   Цитата(defunct @ Sep 29 2007, 23:47) Да и...   Sep 29 2007, 20:15
|||- - defunct   Цитата(singlskv @ Sep 29 2007, 23:15) e=k...   Sep 29 2007, 20:20
|||- - singlskv   Цитата(defunct @ Sep 30 2007, 00:20) Ну и...   Sep 29 2007, 20:30
|||- - defunct   Цитата(singlskv @ Sep 29 2007, 23:30) [i]...   Sep 29 2007, 20:40
|||- - singlskv   Цитата(defunct @ Sep 30 2007, 00:40) Для ...   Sep 29 2007, 20:58
||||- - SasaVitebsk   Цитата(singlskv @ Sep 30 2007, 21:32) Вос...   Sep 30 2007, 19:17
|||- - Сергей Борщ   Цитата(singlskv @ Sep 30 2007, 01:36) а е...   Sep 30 2007, 07:59
|||- - Qwertty   Цитата(Сергей Борщ @ Sep 30 2007, 11:59) ...   Sep 30 2007, 12:13
|||- - Proton   Цитата(Qwertty @ Sep 30 2007, 19:13) Но в...   Sep 30 2007, 12:42
||- - Dog Pawlowa   Цитата(Сергей Борщ @ Sep 30 2007, 01:09) ...   Sep 30 2007, 18:38
|||- - singlskv   Цитата(Dog Pawlowa @ Sep 30 2007, 22:38) ...   Sep 30 2007, 18:44
||||- - Dog Pawlowa   Цитата(singlskv @ Sep 30 2007, 21:44) Вы ...   Oct 1 2007, 11:56
|||- - defunct   Цитата(Dog Pawlowa @ Sep 30 2007, 21:38) ...   Sep 30 2007, 22:44
||- - Непомнящий Евгений   to Сергей Борщ Подскажите, а зачем нужна обвязка и...   Oct 1 2007, 10:38
|||- - Сергей Борщ   Цитата(Непомнящий Евгений @ Oct 1 2007, 13...   Oct 1 2007, 11:16
|||- - defunct   Цитата(Сергей Борщ @ Oct 1 2007, 14:16) К...   Oct 1 2007, 11:36
|||- - Сергей Борщ   Цитата(defunct @ Oct 1 2007, 14:36) Подро...   Oct 1 2007, 11:51
||- - SergeiCh   Цитата(Сергей Борщ @ Sep 30 2007, 05:09) ...   Oct 1 2007, 11:55
|- - Сергей Борщ   Цитата(singlskv @ Sep 29 2007, 01:37) Пря...   Sep 29 2007, 12:46
|- - singlskv   Цитата(Сергей Борщ @ Sep 29 2007, 16:46) ...   Sep 29 2007, 18:42
- - mdmitry   Увы! Началась религиозная война! По поводу...   Sep 27 2007, 20:51
- - SasaVitebsk   Преимущества они и в Африке преимущества. Вы пре...   Sep 28 2007, 23:06
|- - SergeiCh   Если хочется писать PORTB_0 = 1, это можно сделать...   Sep 29 2007, 07:05
- - sensor_ua   ЦитатаIAR дает нам простой инструмент доступа Заме...   Sep 29 2007, 19:56
- - sensor_ua   ЦитатаГде в этой проге можно написать cfg_EE = cfg...   Sep 29 2007, 21:05
|- - singlskv   Цитата(sensor_ua @ Sep 30 2007, 01:05) та...   Sep 29 2007, 21:26
- - sensor_ua   ЦитатаЯ НЕ пользуюсь ни IARовским ни каким другим ...   Sep 29 2007, 23:01
- - sensor_ua   ЦитатаEEMEM, PROGMEM я типами данных просто не счи...   Oct 1 2007, 05:17
- - Rst7   Кстати, между прочим, переделав eeprom.s90 наприме...   Oct 1 2007, 13:41
|- - SasaVitebsk   Цитата(Rst7 @ Oct 1 2007, 16:41) Кстати, ...   Oct 1 2007, 18:04
||- - Rst7   Цитата(SasaVitebsk @ Oct 1 2007, 21:04) ...   Oct 2 2007, 06:42
||- - SasaVitebsk   Цитата(Rst7 @ Oct 2 2007, 09:42) Ээээ... ...   Oct 2 2007, 11:39
||- - Rst7   Цитата(SasaVitebsk @ Oct 2 2007, 14:39) Я...   Oct 2 2007, 11:57
|- - singlskv   Цитата(Rst7 @ Oct 1 2007, 17:41) Кстати, ...   Oct 2 2007, 18:06
|- - Непомнящий Евгений   Цитата(singlskv @ Oct 2 2007, 22:06) Може...   Oct 3 2007, 04:22
- - sensor_ua   ЦитатаБыла идея патчить кодегенератор, дабы он дел...   Oct 2 2007, 14:18
|- - Rst7   Цитата(sensor_ua @ Oct 2 2007, 17:18) Пыт...   Oct 3 2007, 05:38
- - sensor_ua   ЦитатаМожет все-таки стоит в подобных ситуациях оз...   Oct 2 2007, 19:38
|- - singlskv   Цитата(sensor_ua @ Oct 2 2007, 23:38) А ...   Oct 2 2007, 20:08
- - sensor_ua   ЦитатаКак сохранить текущую конфигурацию прибора п...   Oct 2 2007, 20:32
|- - singlskv   Цитата(sensor_ua @ Oct 3 2007, 00:32) Оза...   Oct 2 2007, 20:56
|- - defunct   Цитата(singlskv @ Oct 2 2007, 23:56) Если...   Oct 2 2007, 21:44
|- - sensor_ua   Цитата(singlskv @ Oct 2 2007, 23:56) Я и ...   Oct 3 2007, 05:16
- - sensor_ua   Цитатаон генерирует комманду записи в RAMPx, ее мо...   Oct 3 2007, 06:58


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

 


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


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