Перейти к содержанию
    

Waso

Свой
  • Постов

    303
  • Зарегистрирован

  • Посещение

Сообщения, опубликованные Waso


  1. 0_0 Красиво компилит! Только что заметил что у меня почемуто компилятор не использует смещение при записи в регистры...

    А вообще, как я говорил, у меня там в цикле еще есть громоздкая обработка конца буфера, которая кушает регистры. С ней возможно результат уже не будет выглядеть так хорошо.

     

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

    {-----------------------------------UPDATED 10.06.08-----------------------------------------}

    Обнаружил что у меня в настройках установлен THUMB MODE. Без него все получается красиво в асме, но зато в железе сразу же улетает в Undefvec..... :wacko:

  2. Нет. всеравно не хочет. дело в том что там в цикле еще есть условие и обнуление указателя буфера, со всякой обработкой, где много регистров используется. Поэтому и жадничает компилятор наверное. Но мог бы сохранить регистры в стек внутри этой обработки...

  3. День добрый! Назрел такой вопрос: как ИАР-у(4.20) сказать чтобы перед циклом запомнил в регистр процессора адрес регистра выходных данных и потом не грузил его снова каждый раз. (Нужно ускорить процесс). Написал так:

    register uint16_t *pcSource;
    register uint32_t *pOut;
            pcSource = (uint16_t*)( xRxDescriptors[ ulNextRxBuffer ].addr & emacADDRESS_MASK);
    pin_off(clk_pin); 
      // from  AT91SAM7X256.h :     
      //#define AT91C_PIOA_ODSR ((AT91_REG *)     0xFFFFF438) // (PIOA) Output Data Status Register
            pOut = (uint32_t*) AT91C_PIOA_ODSR; 
        while( ulTotalFrameLength)
        {
                      *pOut = *(pcSource++);
                      pin_on(clk_pin);
                      ulTotalFrameLength --;
                      pin_off(clk_pin);
                }

    Но в результате компиляции упорно получается следующее:

    //  385         pOut = (uint32_t*) AT91C_PIOA_ODSR;
            LDR      R3,??vEMACRead_and_Go_0+0x8 ;; 0xfffff430
            CMP      R5,#+0
            BEQ      ??vEMACRead_and_Go_4
    //  396                   *pOut = *(pcSource++);
    ??vEMACRead_and_Go_5:
            LDR      R6,??vEMACRead_and_Go_0+0xC ;; 0xfffff438
            LDRH     R7,[R4, #+0]
            STR      R7,[R6, #+0]
            ADDS     R4,R4,#+2
    //  399                   pin_on(clk_pin);
            MOVS     R6,#+128
            LSLS     R6,R6,#+10      ;; #+131072
            STR      R6,[R3, #+0]
    //  400                   ulTotalFrameLength --;
            SUBS     R5,R5,#+1
    //  401                   pin_off(clk_pin);
            STR      R6,[R2, #+0]
    ...

    Тоесть при инициализации pOut в регистр пишется совсем другой адрес, который затем используется совсем в другом месте - макросом pin_on. Это макросы из ascold.h - знатокам знаком этот хедер. Оптимизация выставлена максимальная. При других уровнях оптимизации компилятор и вовсе игнорирует переменную pOut.

    Как это победить?

  4. ЗдОрово! Благодарю.

    ВОТ какраз нарыл похожего зверя в одном корпусе, но характеристики не ахти, и получается крупнее и дороже дискретных полевиков. Такчто спасибо за схемку - не придется изобретать велик. :)

  5. Добрый день. Дубовый вопрос. Скажите пожалуйста, а у всех мосфетов встроен защитный диод? Мне нужно чтоб при закрывании через транзистор ток немог теч ни в одном направлении. Вобщем мне нужно собрать электронный переключатель, который бы переключал питание схемы с батареи на USB и обратно. Нужны минимальные падения напруги на этом переключателе - не более 0.3В при токе 100мА.

  6. Обновил УГО - подкорректировал графику. Делаю "Update schematic sheets" - обновляет УГО, но и забывает(обновляет) все параметры. Как этого избежать? Как обновить только графику или может както можно скопировать параметры?

  7. Хм... у меня нет такой вкладки. Версия альтиума 6.5. Девятый в пути.. %)

    На схеме основной части - только вкладка с ее названием. На схеме канала - несколько вкладок с именами каналов. Я скопировал канал на основную схему - получилось как надо, но в PCB такую схему наверное уже не перегонишь. Только для распечатки...

  8. С линиями печально. Но ничего..

     

    Обрыскал форум, но так и не нашел ответ - как создать свой символ или элемент в библиотеке типа Power port. А то у земли палочка худенькая, и у питания стрелка не по ГОСТу... Пробовал сделать элемент типа Net tie(no bom) у которого один из пинов скрыт и подключен к GND, но это не то, потомучто цепь, подключенная к другому выводу не получает нужного имени.

  9. Эм.. А можно еще вопрос? Можно тип линий свой задать? Ато мне вот надо по ГОСТу одинаковые каналы обвести штрих-пунктирной линией, а ее такой нет. Есть только отдельно штриховая и пунктирная.. :'(

     

    .. А я пока вкладку "Editor" поищщу... 0_о

  10. Подскажите пожалуйста, можно какнибудь на схеме в случае многоканального устройства поз. обозначения отображать логические а не физические (с довеском имени канала). Такая возможность есть при рисовании платы, а на схеме я такого не нашел.

  11. Хорошо, спасибо, поз.обозначения так тягаются. А вот меня не устраивает например расстояние от УГО микросхемы до текстового символа - номера ноги. Он почемуто далековато получается. Както не по ГОСТу... И шрифт этого элемента где задавать - тоже пока не нашел... Как быть?

  12. Ругается что мое семейство CoolRunner XPLA3 поддерживает пулап только для входных портов. А у меня двунаправленный с переходом в третье состояние. И вот надо чтоп в третьем состоянии включались пулапы. Это можно сделать?

  13. Эм... Ну и как обстоят дела с самодельным JTAG -ом спустя годик с небольшим? ;)

     

    Я вот подумываю присобачить FT232RQ к JTAG mini ICE, но неуверен будет ли оно работать с альтерой... А было бы здорово! Может уже кто изобрел такой велосипед?

  14. Имеется STK500, пишу в IAR. Надо прошить. AVRstudio говорит что hex, сгенеренный IAR-ом имеет неверную контрольную сумму. Уже много разных хексов перепробовал - они одни и теже получаются и ошибка не уходит. Программа простейшая - ledchase, идущий с яром.

     

    Неужели все транслируют в студию через ubrof8 а не напрямую hex??

     

    И еще непонятна ситуация с отладчиками для авр. Я вот по первости игрался с AlgorithmBuilder-ом и был шчасслефф. Он умеет контролировать регистры проца (аля Жытаг), дописывая свой отладочный код и используя всего одну ногу, одну из тех что и для прошивки.

    И вот пришла пора писать серьезные проекты - пересел на ИАР и незнаю как быть с отладкой, ибо настоящий JTAG держат не все AVR-ы...

  15. Рецепт работает, благодарю!

     

    Еще вопрос по CRC - хочу дописывать в конец файла число, которое давало бы нулевую CRC после прохода функции подсчета по файлу и этому числу вконце. Взял функцию crc16 из иаровских апнотов. Прогнал по прошивке. Результат сходится. В иаре менял настройку чтоб вставлял инверсионную сумму. И делал завершающий проход по этому числу. Результат ненулевой. Где я ошибся/как правильно??? Именно эту тонкость в гугле не нашол. :(

  16. Однако подвисает симулятор при запуске. Но всеравно спасибо за участие! Я пока обошел эту проблему работая напрямую с железом. Позже разберусь с макросами и настрою симулятор. Буду использовать ваш файл как отправную точку.

  17. Хочется внутри одной большой функции создавать мелкие, которые бы видели переменные родительской функции как глобальные. Как я понимаю, при вызове функции с параметрами компилятор предварительно копирует эти параметры в отдельные переменные, которые вместе с переменными, обьявленными внутри той функции, образуют ее стек. Это долго и жирно. Хочется создать функцию, при вызове которой в стек заносился бы только адрес места вызова, а переменные брались бы из внешней функции.

     

    Как это сделать?

     

    Как я понимаю, при обращении через указатель, его значение также копируется в стек, такчто это не вариант.

  18. Я вообще не подключаю Cstartup, линкуется библиотечный..
    А можно поподробнее о библиотечном аналоге Cstartup? Как его слинковать, откуда взять, какие функции он выполняет? Ато первый раз про такой слышу. :unsure:

     

    И еще. Резервировать 0x40 байт под вектора не много ли? Всего там 8 4-х байтных векторов, правильно? Это 0х20. В два раза больше места это на случай что все они будут грузить в PC абсолютный адрес? Или там есть чтото еще?

     

    Извиняюсь что так много вопросов.... :laughing: :smile3046:

  19. нулевой адрес в зависимости от ремап/не ремап должна зеркалится команда перехода на загрузчик (с адреса 0x00100000) или на приложение (зеркалится с адреса 0x00200000, куда ее копирует загрузчик).можно. в .mac - файле написать соответствующий скрипт.
    Отладчик не зеркалит флеш в нулевые адреса при старте. Это и надо исправить.

    Отлаживаю пока в симуляторе. Оттого и удивляюсь насчет брейкпоинтов.

    Проц - AT91SAM7X256, ИДЕ IAR 440A

×
×
  • Создать...