-
Постов
303 -
Зарегистрирован
-
Посещение
Сообщения, опубликованные Waso
-
-
Нет. всеравно не хочет. дело в том что там в цикле еще есть условие и обнуление указателя буфера, со всякой обработкой, где много регистров используется. Поэтому и жадничает компилятор наверное. Но мог бы сохранить регистры в стек внутри этой обработки...
-
День добрый! Назрел такой вопрос: как ИАР-у(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.
Как это победить?
-
ЗдОрово! Благодарю.
ВОТ какраз нарыл похожего зверя в одном корпусе, но характеристики не ахти, и получается крупнее и дороже дискретных полевиков. Такчто спасибо за схемку - не придется изобретать велик. :)
-
О шотках - посмотрел на BAT54 и испугался. У них 0.8В падение при 100мА.
Посоветуйте шотку с действительно малым падением.
-
Добрый день. Дубовый вопрос. Скажите пожалуйста, а у всех мосфетов встроен защитный диод? Мне нужно чтоб при закрывании через транзистор ток немог теч ни в одном направлении. Вобщем мне нужно собрать электронный переключатель, который бы переключал питание схемы с батареи на USB и обратно. Нужны минимальные падения напруги на этом переключателе - не более 0.3В при токе 100мА.
-
Обновил УГО - подкорректировал графику. Делаю "Update schematic sheets" - обновляет УГО, но и забывает(обновляет) все параметры. Как этого избежать? Как обновить только графику или может както можно скопировать параметры?
-
Хм... у меня нет такой вкладки. Версия альтиума 6.5. Девятый в пути.. %)
На схеме основной части - только вкладка с ее названием. На схеме канала - несколько вкладок с именами каналов. Я скопировал канал на основную схему - получилось как надо, но в PCB такую схему наверное уже не перегонишь. Только для распечатки...
-
С линиями печально. Но ничего..
Обрыскал форум, но так и не нашел ответ - как создать свой символ или элемент в библиотеке типа Power port. А то у земли палочка худенькая, и у питания стрелка не по ГОСТу... Пробовал сделать элемент типа Net tie(no bom) у которого один из пинов скрыт и подключен к GND, но это не то, потомучто цепь, подключенная к другому выводу не получает нужного имени.
-
Эм.. А можно еще вопрос? Можно тип линий свой задать? Ато мне вот надо по ГОСТу одинаковые каналы обвести штрих-пунктирной линией, а ее такой нет. Есть только отдельно штриховая и пунктирная.. :'(
.. А я пока вкладку "Editor" поищщу... 0_о
-
Подскажите пожалуйста, можно какнибудь на схеме в случае многоканального устройства поз. обозначения отображать логические а не физические (с довеском имени канала). Такая возможность есть при рисовании платы, а на схеме я такого не нашел.
-
О! Получилось. Благодарю. Этого достаточно. Хотя гибкости поменьше чем в пикаде в этом месте получается.
-
Хорошо, спасибо, поз.обозначения так тягаются. А вот меня не устраивает например расстояние от УГО микросхемы до текстового символа - номера ноги. Он почемуто далековато получается. Както не по ГОСТу... И шрифт этого элемента где задавать - тоже пока не нашел... Как быть?
-
А можно ли в Альтиуме на схеме перемещать части УГО (поз. обозначния, номера выводов и тп), как это делается в P-CAD-е с помощью шифта.
-
Ругается что мое семейство CoolRunner XPLA3 поддерживает пулап только для входных портов. А у меня двунаправленный с переходом в третье состояние. И вот надо чтоп в третьем состоянии включались пулапы. Это можно сделать?
-
А вы в чем пишете? У меня ISE4.2 ругается на неизвестный символ "|"Я всегда пишу в ucf файле и всё ок:NET "FPGA_DONE" LOC = "p3" | PULUP ;
А пулапы ой как нужны...
Девайс - xcr3064xl
-
Эм... Ну и как обстоят дела с самодельным JTAG -ом спустя годик с небольшим? ;)
Я вот подумываю присобачить FT232RQ к JTAG mini ICE, но неуверен будет ли оно работать с альтерой... А было бы здорово! Может уже кто изобрел такой велосипед?
-
О! Уже два варианта!
Второй - в ветке OLEG_BOS:
Ставим в настройках линкера IAR -Intel-extended, Format Variant: 32bit linear without entry point
после этого AVRстудия начинает проглатывать HEX файл из IARa.
Спасибо!
-
Имеется STK500, пишу в IAR. Надо прошить. AVRstudio говорит что hex, сгенеренный IAR-ом имеет неверную контрольную сумму. Уже много разных хексов перепробовал - они одни и теже получаются и ошибка не уходит. Программа простейшая - ledchase, идущий с яром.
Неужели все транслируют в студию через ubrof8 а не напрямую hex??
И еще непонятна ситуация с отладчиками для авр. Я вот по первости игрался с AlgorithmBuilder-ом и был шчасслефф. Он умеет контролировать регистры проца (аля Жытаг), дописывая свой отладочный код и используя всего одну ногу, одну из тех что и для прошивки.
И вот пришла пора писать серьезные проекты - пересел на ИАР и незнаю как быть с отладкой, ибо настоящий JTAG держат не все AVR-ы...
-
Рецепт работает, благодарю!
Еще вопрос по CRC - хочу дописывать в конец файла число, которое давало бы нулевую CRC после прохода функции подсчета по файлу и этому числу вконце. Взял функцию crc16 из иаровских апнотов. Прогнал по прошивке. Результат сходится. В иаре менял настройку чтоб вставлял инверсионную сумму. И делал завершающий проход по этому числу. Результат ненулевой. Где я ошибся/как правильно??? Именно эту тонкость в гугле не нашол. :(
-
Однако подвисает симулятор при запуске. Но всеравно спасибо за участие! Я пока обошел эту проблему работая напрямую с железом. Позже разберусь с макросами и настрою симулятор. Буду использовать ваш файл как отправную точку.
-
Ну, некоторые не настолько мелкие чтоб их делать inline. Хотя при наличии достаточного количества свободно места помешать может только жадность программиста. :)
Благодарю за идею со структурами!
-
Хочется внутри одной большой функции создавать мелкие, которые бы видели переменные родительской функции как глобальные. Как я понимаю, при вызове функции с параметрами компилятор предварительно копирует эти параметры в отдельные переменные, которые вместе с переменными, обьявленными внутри той функции, образуют ее стек. Это долго и жирно. Хочется создать функцию, при вызове которой в стек заносился бы только адрес места вызова, а переменные брались бы из внешней функции.
Как это сделать?
Как я понимаю, при обращении через указатель, его значение также копируется в стек, такчто это не вариант.
-
А можно поподробнее о библиотечном аналоге Cstartup? Как его слинковать, откуда взять, какие функции он выполняет? Ато первый раз про такой слышу. :unsure:Я вообще не подключаю Cstartup, линкуется библиотечный..И еще. Резервировать 0x40 байт под вектора не много ли? Всего там 8 4-х байтных векторов, правильно? Это 0х20. В два раза больше места это на случай что все они будут грузить в PC абсолютный адрес? Или там есть чтото еще?
Извиняюсь что так много вопросов.... :laughing: :smile3046:
-
Отладчик не зеркалит флеш в нулевые адреса при старте. Это и надо исправить.нулевой адрес в зависимости от ремап/не ремап должна зеркалится команда перехода на загрузчик (с адреса 0x00100000) или на приложение (зеркалится с адреса 0x00200000, куда ее копирует загрузчик).можно. в .mac - файле написать соответствующий скрипт.Отлаживаю пока в симуляторе. Оттого и удивляюсь насчет брейкпоинтов.
Проц - AT91SAM7X256, ИДЕ IAR 440A
Как сказать по IARски?
в IAR
Опубликовано · Пожаловаться
0_0 Красиво компилит! Только что заметил что у меня почемуто компилятор не использует смещение при записи в регистры...
А вообще, как я говорил, у меня там в цикле еще есть громоздкая обработка конца буфера, которая кушает регистры. С ней возможно результат уже не будет выглядеть так хорошо.
Но всеравно красиво. Неужто пятый настолько умнее? Нехотел на него переходить, потомучто читал тут что у него свои заморочки. Но похоже надо...
{-----------------------------------UPDATED 10.06.08-----------------------------------------}
Обнаружил что у меня в настройках установлен THUMB MODE. Без него все получается красиво в асме, но зато в железе сразу же улетает в Undefvec.....![:wacko:](https://electronix.ru/forum/uploads/emoticons/wacko.gif)