Показать сообщение отдельно
Непрочитано 15.04.2013, 20:04  
tempora
Почётный гражданин KAZUS.RU
 
Регистрация: 10.01.2007
Сообщений: 3,412
Сказал спасибо: 65
Сказали Спасибо 664 раз(а) в 443 сообщении(ях)
tempora на пути к лучшему
По умолчанию Re: FlowCode это оптимальный старт в програмировании AVR+PIC

Итак, пишем такой фрагмент:
Код:
struct  {
        char value, code;
    } xlattable[16] = {
        {'0',0}, {'1',0}, {'2',0}, {'3',0},
        {'4',0}, {'5',0}, {'6',0}, {'7',0},
        {'8',0}, {'9',0}, {'A',0}, {'B',0},
        {'C',0}, {'D',0}, {'E',0}, {'F',0}
    };
void    BuildXlat()
{
uchar   i;

        _putsf("Initiating XLAT table...\r");
        for(i=0; i ‹ (sizeof(xlattable)/sizeof(*xlattable)); ++i)
        {
            xlattable[i].code = somefunc(xlattable[i].value);
            
            _putsf("xlattable[");
            _puts(Int2Str(i,10));
            _putsf("] = {0x");
            _puts(Int2Str(xlattable[i].value,16));
            _putsf(";0x");
            _puts(Int2Str(xlattable[i].code, 16));
            _putsf("}\r");
        }
        _putsf("Initiating XLAT table done.\r");
}
смотрим, как он работает, в исполнении CvAvr:
и как он должен работать (IAR, первые две строки вывода - от предыдущего прогона):

Делаем выводы.

Кроме того, в CvAvr будет скомпилирован и такой вариант:
Код:
struct  {
        char value, code;
    } xlattable[16] = {
        {'0',0}, {'1',0}, {'2',0}, {'3',0},
        {'4',0}, {'5',0}, {'6',0}, {'7',0},
        {'8',0}, {'9',0}, {'A',0}, {'B',0},
        {'C',0}, {'D',0}, {'E',0}, {'F',0}
    };
void    BuildXlat()
{
uchar   i;

        _putsf("Initiating XLAT table...\r");
        for(i=0; i ‹ (sizeof(xlattable)/sizeof(*xlattable)); ++i)
        {
            xlattable.code = somefunc(xlattable.value);
            
            _putsf("xlattable[");
            _puts(Int2Str(i,10));
            _putsf("] = {0x");
            _puts(Int2Str(xlattable.value,16));
            _putsf(";0x");
            _puts(Int2Str(xlattable.code, 16));
            _putsf("}\r");
        }
        _putsf("Initiating XLAT table done.\r");
}
и он даст тот же результат, что и в первом случае.

Вспоминать все глюки CvAvr нет ни желания, ни возможности (поисковики - в помощь), но их более чем достаточно, чтобы перестать признавать в нем компилятор.
Да еще состав этих глюков с каждой новой версией меняется - это уж и вовсе "для настоящих джигитов". :о)))

По поводу кодогенератора тоже можно было бы "пройтись", однако, сдается мне, что халява для его любителей представляет бОльшую ценность, чем такие вещи, как самодокументируемость, модифицируемость, переносимость...

Пишу не для того, чтобы кого-либо, в чем-либо упрекнуть/уличить, нет - просто рекомендую не умножать свои ошибки на ошибки этого "чуда в перьях".
Если кому-то мое предостережение оказалось полезным, то и замечательно, нет - пусть, оные любители покоятся с миром...

___________________________________________
Сообщение от oleg110592 Посмотреть сообщение
Наверное и в других компиляторах можно найти "плюхи" ...
Даже если предположить, что в IAR Systems и у Павла Гайдука разработка/тестирование ПО поставлены одинаково хорошо (что со всей очевидностью не так) всё равно придется признать, что у IAR'овских продуктов преимущество, хотя бы уже потому, что у них гораздо больше пользователей, которые могут отловить ошибки, просочившиеся через бета-тестирование.

Сообщение от SasaVitebsk Посмотреть сообщение
А CV непосредственно в код гонит.
Всё ещё хуже - он сначала все сливает в один "__.c" файл, а уж потом "гонит". Повидимому, именно в связи с этим у него есть ещё и проблемы с инклудами/областью видимости, насколько я помню.
__________________
There's always more than one way to skin a cat.
tempora вне форума  
Сказали "Спасибо" tempora
dosikus (15.04.2013)