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

novlev

Участник
  • Постов

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

  • Посещение

Весь контент novlev


  1. Всем день добрый, прошу помощи у знающих. Прграмма может отработать сутки, двое.., а потом вылететь. Как вариант - портится стек, т к прерывания вложенные, может кто-то что-то не сохраняет, вот пример дизасма: /------------------------------------------------------------------- // Procedure statistics: // Frame size = 172 // Scratch registers used: {R0-R3,P0-P2,I0-I3,B0-B3,M0-M3,A0-A1,ASTAT0-ASTAT1,CC,AQ,LC0-LC1,LT0-LT1,LB0-LB1} // Call preserved registers used: {R4-R7,P4-P5,FP,SP,L0-L3,RETS,RETI} // Registers that could be clobbered by function calls: {R0-R3,P0-P2,I0-I3,B0-B3,M0-M3,A0-A1,ASTAT0-ASTAT1,CC,AQ,LC0-LC1,LT0-LT1,LB0-LB1,RETS,SEQSTAT,SYSCFG,USP} //------------------------------------------------------------------- // line ".\SHR-2.c":4310 LINK 0; [--SP] = RETI; [--SP] = ASTAT; [--SP] = (R7:0); [--SP] = P0; [--SP] = P1; [--SP] = P2; [--SP] = P4; [--SP] = P5; [--SP] = A0.W; [--SP] = A0.X; [--SP] = A1.W; [--SP] = A1.X; [--SP] = L0; [--SP] = L1; [--SP] = L2; [--SP] = L3; [--SP] = I0; [--SP] = I1; [--SP] = I2; [--SP] = I3; [--SP] = B0; [--SP] = B1; [--SP] = B2; [--SP] = B3; [--SP] = M0; [--SP] = M1; [--SP] = M2; [--SP] = M3; [--SP] = LC0; [--SP] = LC1; [--SP] = LT0; [--SP] = LT1; [--SP] = LB0; [--SP] = LB1; L0 = 0; L1 = 0; L2 = 0; L3 = 0; SP += -12; Это обаботчик тика таймера, в нем вызываются др подпрограммы. Может надо все регистры сохранять? Как отлавливать подобные ошибки?
  2. Продлема решилась странно... /* When Compiler Optimization is active, hardware loops are setup for a while loop */ /* The Loop Count Registers (LC0/LC1) are not necessarily cleared */ sysreg_write(reg_LC0,0); sysreg_write(reg_LC1,0); Эти строки приводили к паузе только на одной железяке. Это строки из кода инициализации, там оптимизатор выключен. Но в основном коде включена максимальная оптимизация по размеру. Может кто объяснит мне темному...
  3. Спасибо за ответ, пробовал из spi внутренней, там все норм запустилось. Разводка норм, звона на линиях нет... Именно пауза, без обращений на внешнюю шину...просто что-то ждет.
  4. Всем доброе утро! Может кто сталкивался - не стартует программа, пытается вычитать из внешней параллельной флешки и замирает, если через отладчик запустить - все работает и читает, если изменить код инициализации - добавить маркеров пинами - то они все отлавливаются осмыслографом, и иногда через паузу загружается процессор, а иногда так и висит...
  5. Отвечу сам себе - проблема в конвеере команд и прерываниях. Конвеер умудрялся выполнить 2 раза чтение, те железяка отработала клоки и прочее и ушла по прерыванию, а вернулась тудаже - и по новой. Решение - запретить прерывания...если можно. Сейчас пробую дма типа память- память, возможно тоже решение, если нельзя запрещать. Это применительно к bf518f.
  6. Доброго времени суток. Может кто сталкивался, как правильно читать пакеты меньше 64 байт на этой микрухе, просто статусные регистры говорят о 64 байтах для всех пакетов, которые меньше 64, но при этом в самом фифо уже норм пакеты, т е не добитые нулями. Как правильно читать в таком случае, не портя фифо?
  7. Начните с простого - проверте качество сигналов на шине, я сейчас с этим столкнулся. По быстрому можно проверить сбросив частоту периферии до 80, потом на 100 проверить -у меня на 80 сразу все заработало, что натолкнуло на мысль - идти искать норм осциллограф и смотреть фронты.
  8. Проблема была в железе :) Гигагерцовый осмыслограф все показал и рассказал. Пара дорожек звенели, терминаторы были далеко от абонента. Вывод - надо внимательнее проверять шину на предмет отраженных сигналов. Напишу подробнее: в мурзилке на MT48LC8M16A2 есть строки "VDDQ Supply DQ power: Isolated DQ power on the die for improved noise immunity. VSSQ Supply DQ ground: Isolated DQ ground on the die for improved noise immunity." - вот в этом месте земля была через дроссель к основной подключена. В этом и была причина, убрав дроссель получили норм фронты.
  9. Спасибо за участие в решениип роблемы, когда я определюсь - все заработает, к этому и иду.
  10. Этот адрес вылета не имеет значения, это плод криво залитого кода из-за фиговой инициализации айсом озухи, на реальной железяке инит код норм все делает, - телевизор же работал без сбоев. Сейчас картина уже другая, вылет по реальному адресу, 0х208 - это буду смотреть, что именно не нравится (на демо борде работал и на этом адресе).
  11. Запустил код на демоборде - все работает. Оказывается она норм инициализирует озу. А если пристегнуть кастом борд xml к моей железяке - значения в регистры попадают, но в сд стате висит ошибка, т е озу фигово инициализировалась. Вопрос - в чем может быть причина такого поведения?
  12. Ну пичальки никакой не вижу, а код ошибки - Instruction fetch CPLB miss 0x2C E CPLB miss on an instruction fetch. Не пойму, что не так с сгенерированой таблицей. Может не в таблице дело? Приведу и таблицу. Что странно - адрес вылета - 0100002E, он вроде как для моего процессора находится в области "резерв". В мимуляторе отработало все как надо... но ему доверять...
  13. Даташиты прочитаны, именно из них следует, что визард сам сгенерит несколько масок настройки кеша, и он это делает, и забьет цплд таблицы - и это он делает. Но код вылетает. никаких линухов никто запускать не будет, это гиблый путь. Специфика работы - никакого чужого кода.
  14. cplb_miss_without_replacement - откуда ноги уэто йоштбки растут, кто-нибудь сталкивался?
  15. Я принудительно линковал все дма во внутреннюю озу, во внешней только картинки и кусок кода, в инит коде я все настраивал под свое железо, рам тестировал долго и нудно, сбоев не было. ДМА в приоритете уже, выставлял с самого начала. Спасибо за ответ. Мне кэш данных и не нужен, только команд, добить бы его... А с кодом в озу можно вести отладку? У меня постоянно вылетает программа в анноу эксепшн, или еще куда.
  16. Спасибо, это дело изучу. Программа не влезает в память программ - так и есть, просто много взвалили на железяку, там пара изернетом с птп, нтп, кучей всяго другого, другое оптические интерфяки, жпс глонасс и все не вспомню. Вот чтоб этим всем рулить - надо гуюю, больше всего места скушала программа ее инициализации. Ради спортивного интереса, пересобрал код инициализации с другими параметрами озу, увеличил время на запись (а вдруг) - продвинуласть программа дальше... чо за нах происходит. Терминаторы есть, шина не звенит.
  17. Ну...проблем с размещением нет и работой гуи, там все норм как для второго класса безопасности. Проблема с исполнением кода из внешнего озу.
  18. Не очень понял о чем Вы, но огромное спасибо, что отозвались. Поясню что я творю. Есть интерфейс для тыкательного экрана, у него есть экраны с контролами, строками и прочим. Key2->normAddr = (unsigned short*)&button2_n[0]; Key2->actAddr = (unsigned short*)&button2_p[0]; Key2->height = 32; Key2->width = 32; Key2->x = 36-(Key2->width)/2; Key2->y = 91-(Key2->height)/2; Key2->pressed = false; Key2->pClick = &CheckControlTouch; Key2->pReDraw = &ReDrawControl; Key2->pAction = &DigitKeyPressed; Key2->refreshed = false; Key2->type = t_button; Key2->digitNumber = 1; Key2->data = (void*)&two; Вот такая простыня - присваивание обработчиков кнопке, рисовалок и и прочего. К сожалению это надо для всех делать - отсюда и простыня. Плюс надо перкинуть картинки кнопок и цифр из пзу в озу, чтобы городить изображение. Вот этот код я хочу разместить во внешем озу, там что-то около твсячи строк - инициализация гуи. Эти константы - продукт линкера, каждый раз меняются (если править код) - пожтому просто массивом хранить не выйдет. tmpValu4e = (unsigned short*)&litButInc_n[0]; for(f=0; f<384; f++) { *tmpValu4e++ = *addrP++; } - а так я картинки перекидываю, таких блоков кода тоже прилично, в памяти программ проца им тоже места не хватило... Да и файловой системы нет у меня, это программа самодельная, без линухов.
  19. Если в визарде указать и кэш данных - ничего не работает, если без него - часть кода работает. Кто работал с кодом из озу, подскажите. - иожет надо программно еще настраивать что-то, может визарда встроенного не достаточно? Может есть ограничение на размер кода в озу? Насовал в простыню кода, между циклами копирования данных сунков - код заработал (не до самого конца, но продвинулся), похоже время надо ему было, или синхронизировать кэш. Но послушать человека, который с этим работал, очень хочется.
  20. Код есть, и он работает. Мне не очень понятно почему не все исполняется из внешней памяти.. та часть которая работает - долго исполняется, возможно есть какие-то критерии для написания кода...или прагмами надо говорить что-то линкерам/компиляторам...
  21. На текущий момент часть проблем решиласть пересборкой проекта, основная простыня кода выполняется, но участок кода, где копируются данные по указателю, который хранится в озу процессора, не идет... tmpValu4e = (unsigned short*)BDigits[0]; for(f=0; f<1457; f++) { *tmpValu4e++ = *addrP++; }
  22. Добро времени суток! Проблема заключается в следующем: Программа стала огромной, даже оптимизатор не ужимает ее...вылез я из памяти программ, да еще и под конец сроков работ. Подскажите как правильно разместить код в озу (16М его аж там) и заставить его исполняться. Если просто через #pragma section("sdram0") разместить и галочкой сказать - используй кэш коменд, - ничего не происходит, кроме ошибки при первой записи в регист указателя. Смущает, что на шине с озу сидит дма отображалки экрана, и пара изернетов... не тесно ли там им будет? Выручайте...
  23. Прошелся я по всей программе в отладчике. Вывод - какой-то он хитрый, работает код как надо, но часто отображаются левые значения, особенно если внешнее ОЗУ есть. При отрисовке все выводится с нужных адресов...
  24. sizeof(digit) = 00000008; #pragma pack(1) typedef struct _digit { fontData* mormAddr; unsigned short height; unsigned short width; } digit; #pragma pack() уже через псевдоним попробовал, определил свойт тип для указателя на беззнаковый шот. Похоже проблема где-то в другом месте, щас раскопаю все сначала...
×
×
  • Создать...