|
|
  |
startup asm |
|
|
|
Jan 21 2009, 23:53
|
Гуру
     
Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448

|
Цитата(zltigo @ Jan 22 2009, 02:30)  'Здесь' некие действия с негарантированным результатом и непредсказуемым продолжением. Укажите, почему это здесь "негарантированный результат" и "непредсказуемое продолжение". Только конкретно. Голословные обвинения не рассматриваются. Цитата(zltigo @ Jan 22 2009, 02:30)  Был задан вопрос о недостатках приведенного решения. У приведенного решения недостатков я не вижу. printf, ввод/вывод и прочую требуху придумали Вы, а не я.
|
|
|
|
|
Jan 22 2009, 09:06
|
Гуру
     
Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448

|
Цитата(zltigo @ Jan 22 2009, 11:24)  Лично мня отладка локализующая проблему только в паректных условиях не устраивает. Опять 25! Последний раз спрашиваю: где паркетные условия, как она ломается? Цитата(zltigo @ Jan 22 2009, 11:24)  Причины и как сделано у меня уже описал, и если все это "требуха", то это в общем-то проблемы того, кто так поступает. Требуха - это то, что Вы мне пытаетесь навязать: Цитата Угу, только вот произвольная функция начинает требовать побольше места под стек, вызывать, например, printf(), захочет воспользоваться прерываниями.... Совершенно высосанные из пальца претензии.
|
|
|
|
|
Jan 22 2009, 17:30
|
Гуру
     
Группа: Свой
Сообщений: 2 546
Регистрация: 23-05-07
Из: Самарская область Сызрань
Пользователь №: 27 923

|
Каждый человек индивидуальный, как и его решения, конкретных ошибок ведь нет? А стоит возвращаться, или нет после exeption это не такая уж проблема  объясните пожалуйста, по векторам в aic регистры AIC_SVR0-31 содержат вектора прерываний от 0 до 31, регистры AIC_SMR0-31 настраивают прерывания от 0 - 31 приоритеты,фронты. Регистр AIC_SMR0 настраивает прерывание FIQ, регистры AIC_SVR0 и AIC_FVR содержат вектора прерывания FIQ, получается у FIQ два вектора почему два и если приоритет не для FIQ не действует тогда что настраивает регистр SMR0?
|
|
|
|
|
Jan 22 2009, 17:40
|
Гуру
     
Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448

|
Цитата(sergey sva @ Jan 22 2009, 20:30)  AIC_SVR0 и AIC_FVR содержат вектора прерывания FIQ, получается у FIQ два вектора AIC_FVR - read only регистр, из которого можно прочитать только содержимое AIC_SVR0. Цитата(sergey sva @ Jan 22 2009, 20:30)  что настраивает регистр SMR0? Цитата The fast interrupt logic of the AIC has no priority controller. The mode of interrupt source 0 is programmed with the AIC_SMR0 and the field PRIOR of this register is not used even if it reads what has been written. The field SRCTYPE of AIC_SMR0 enables programming the fast interrupt source to be positive-edge triggered or negative-edge triggered or high-level sensitive or low-level sensitive
|
|
|
|
|
Jan 22 2009, 18:11
|
Гуру
     
Группа: Свой
Сообщений: 2 546
Регистрация: 23-05-07
Из: Самарская область Сызрань
Пользователь №: 27 923

|
Еще одна неясность возникла, вот код из файла описания AT91sam7s256.h Код // ***************************************************************************** // PERIPHERAL ID DEFINITIONS FOR AT91SAM7XC256 // ***************************************************************************** #define AT91C_ID_FIQ ((unsigned int) 0) // Advanced Interrupt Controller (FIQ) #define AT91C_ID_SYS ((unsigned int) 1) // System Peripheral #define AT91C_ID_PIOA ((unsigned int) 2) // Parallel IO Controller A #define AT91C_ID_PIOB ((unsigned int) 3) // Parallel IO Controller B #define AT91C_ID_SPI0 ((unsigned int) 4) // Serial Peripheral Interface 0 #define AT91C_ID_SPI1 ((unsigned int) 5) // Serial Peripheral Interface 1 #define AT91C_ID_US0 ((unsigned int) 6) // USART 0 #define AT91C_ID_US1 ((unsigned int) 7) // USART 1 #define AT91C_ID_SSC ((unsigned int) 8) // Serial Synchronous Controller #define AT91C_ID_TWI ((unsigned int) 9) // Two-Wire Interface #define AT91C_ID_PWMC ((unsigned int) 10) // PWM Controller #define AT91C_ID_UDP ((unsigned int) 11) // USB Device Port #define AT91C_ID_TC0 ((unsigned int) 12) // Timer Counter 0 #define AT91C_ID_TC1 ((unsigned int) 13) // Timer Counter 1 #define AT91C_ID_TC2 ((unsigned int) 14) // Timer Counter 2 #define AT91C_ID_CAN ((unsigned int) 15) // Control Area Network Controller #define AT91C_ID_EMAC ((unsigned int) 16) // Ethernet MAC #define AT91C_ID_ADC ((unsigned int) 17) // Analog-to-Digital Converter #define AT91C_ID_AES ((unsigned int) 18) // Advanced Encryption Standard 128-bit #define AT91C_ID_TDES ((unsigned int) 19) // Triple Data Encryption Standard #define AT91C_ID_20_Reserved ((unsigned int) 20) // Reserved #define AT91C_ID_21_Reserved ((unsigned int) 21) // Reserved #define AT91C_ID_22_Reserved ((unsigned int) 22) // Reserved #define AT91C_ID_23_Reserved ((unsigned int) 23) // Reserved #define AT91C_ID_24_Reserved ((unsigned int) 24) // Reserved #define AT91C_ID_25_Reserved ((unsigned int) 25) // Reserved #define AT91C_ID_26_Reserved ((unsigned int) 26) // Reserved #define AT91C_ID_27_Reserved ((unsigned int) 27) // Reserved #define AT91C_ID_28_Reserved ((unsigned int) 28) // Reserved #define AT91C_ID_29_Reserved ((unsigned int) 29) // Reserved #define AT91C_ID_IRQ0 ((unsigned int) 30) // Advanced Interrupt Controller (IRQ0) #define AT91C_ID_IRQ1 ((unsigned int) 31) // Advanced Interrupt Controller (IRQ1) #define AT91C_ALL_INT ((unsigned int) 0xC00FFFFF) // ALL VALID INTERRUPTS
// ***************************************************************************** Понятно что этот код описывает номера регистров SMR ,то есть какой регистр SMP отвечает за какую периферию. прерывание от юсб будет настраиваться в smp11 USART 0 в smr6, а AT91C_ID_SYS, это прерывание в каком случае возникает, или AT91C_ID_IRQ0 это ,прерывание от контроллера прерываний, в каком случае может возникнуть для чего это может понадобится ?
|
|
|
|
|
Jan 22 2009, 18:20
|
Гуру
     
Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448

|
Цитата(sergey sva @ Jan 22 2009, 21:11)  AT91C_ID_SYS, это прерывание в каком случае возникает Прерывание от System Controllera (DBGU, PITC etc). Цитата(sergey sva @ Jan 22 2009, 21:11)  или AT91C_ID_IRQ0 Прерывание от внешнего пина.
|
|
|
|
|
Jan 22 2009, 18:23
|

Гуру
     
Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244

|
Цитата(sergey sva @ Jan 22 2009, 19:30)  Каждый человек индивидуальный, как и его решения, Допущенные системные ошибки вполне объективны  . А вот Ваша и aaarrr оценка серьезности этих системных ошибок индивидуально-субьективна  , это да  . Цитата конкретных ошибок ведь нет? Конкретных? Вычитывать не стал, но уж если собрались куда-то корректно "возвращаться" из exceptions для начала подумайте, куда возвратитесь по минус 4 от LR и куда хотели возвратиться.
--------------------
Feci, quod potui, faciant meliora potentes
|
|
|
|
|
Jan 22 2009, 18:32
|
Гуру
     
Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448

|
Цитата(zltigo @ Jan 22 2009, 21:23)  Допущенные системные ошибки вполне объективны  Еще раз спрашиваю: где они? Пока все Ваши утверждения остаются абсолютно голословными.Цитата(zltigo @ Jan 22 2009, 21:23)  Конкретных? Вычитывать не стал, но уж если собрались куда-то корректно "возвращаться" из exceptions для начала подумайте, куда возвратитесь по минус 4 от LR и куда хотели возвратиться. Цитата After fixing the reason for the abort, the handler should execute the following irrespective of the state (ARM or Thumb): SUBS PC,R14_abt,#4 for a prefetch abort, or SUBS PC,R14_abt,#8 for a data abort This restores both the PC and the CPSR, and retries the aborted instruction. Цитата After emulating the failed instruction, the trap handler should execute the following irrespective of the state (ARM or Thumb): MOVS PC,R14_und This restores the CPSR and returns to the instruction following the undefined instruction.
|
|
|
|
|
Jan 22 2009, 20:34
|

Гуру
     
Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244

|
Цитата(aaarrr @ Jan 22 2009, 20:32)  Еще раз спрашиваю: Перечитайте, если это все еще кажется Вам несущественным, то это Ваши проблемы. Приведннные цитаты мне? Я то знаю, по этой причине и спросил. А что там в сишной функции-то "для исправления"-то сделаете и куда попадете возвращению без разбору по типу аборта на -4?
--------------------
Feci, quod potui, faciant meliora potentes
|
|
|
|
|
Jan 22 2009, 20:47
|
Гуру
     
Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448

|
Цитата(zltigo @ Jan 22 2009, 23:34)  Перечитайте, если это все еще кажется Вам несущественным, то это Ваши проблемы. 3 раза перечитал. Никакой конкретики, кроме "стек сожрет" да "printf вызовет" от Вас слышно не было, а это, извините, бред и домыслы. У меня, например, процедура, вызываемая из abort'а или выбрасывает диагностику в консоль и виснет, или пишет ее в память для последующего помещения в лог и рестартует процессор, в зависимости от настроек проекта debug/release. Цитата(zltigo @ Jan 22 2009, 23:34)  Приведннные цитаты мне? Я то знаю, по этой причине и спросил. А что там в сишной функции-то "для исправления"-то сделаете и куда попадете возвращению без разбору по типу аборта на -4? Тогда обратите внимание на этот пост, и не пытайтесь приписать мне чужие ошибки.
|
|
|
|
|
Jan 22 2009, 21:30
|

Гуру
     
Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244

|
Цитата(aaarrr @ Jan 22 2009, 22:47)  У меня, например, процедура, вызываемая из abort'а или выбрасывает диагностику в консоль Ну а чего это Вы 'не заметили' замечания на счет того, что периферия может быть в общем случае находится в произвольном состоянии? А если консоль не UARTа USB? А с Ethernet поработать? Цитата и виснет, или пишет ее в память для последующего помещения в лог и рестартует процессор, в зависимости от настроек проекта debug/release. Отлично. Теперь почему-бы все эти 'суперфункции' просто не реализовать несколькими командами там-же в ASM? Цитата Тогда обратите внимание на этот пост, и не пытайтесь приписать мне чужие ошибки. Я обсуждаю представленный в текущей теме код. Ваши комментарии действительно не заметил  . Однако вопрос том, что в сишной функции было сделано для того, что-бы реально мог быть осуществлен остался без ответа, а сама функция по крайней мере в Вашей реализации - без возврата, как и у меня. - практически ничего не делающая, ну кроме попытки в UART выплюнуть сообщение. Так о чем спор? О том, что я выдаю/сохраняя сообщения просто НОРМАЛЬНО ШТАТНО подняв систему после рестарта по интерфейсам любой сложности а не в экстремальных условиях и только в UART.
--------------------
Feci, quod potui, faciant meliora potentes
|
|
|
|
|
Jan 22 2009, 21:48
|
Гуру
     
Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448

|
Цитата(zltigo @ Jan 23 2009, 00:30)  Ну а чего это Вы 'не заметили' замечания на счет того, что периферия может быть в общем случае находится в произвольном состоянии? Может быть, хотя вероятность почти нулевая. Проинициализировать UART для лобового вывода - дело нескольких команд. Цитата(zltigo @ Jan 23 2009, 00:30)  А если у консоль не UARTа USB? А с Ethernet поработать? Да пожалуйста. В "представленном в текущей теме" коде пока и UART не упоминался. Вариантов масса, на каждый из них нужно свое решение, и это решение спокойно надстраивается над handler'ом. Цитата(zltigo @ Jan 23 2009, 00:30)  Отлично. Теперь почему-бы все эти 'суперфункции' просто не реализовать несколькими командами там-же в ASM? А почему бы все-таки не на C, а? У меня вот несколько платформ, asm-handler'ы для всех одинаковые, а надстройки меняются - очень удобно. Цитата(zltigo @ Jan 23 2009, 00:30)  Однако вопрос том, что в сишной функции было сделано для того, что-бы реально мог быть осуществлен остался без ответа Кто осуществлен? Цитата(zltigo @ Jan 23 2009, 00:30)  Так о чем спор? О том, что я выдаю/сохраняя сообщения просто НОРМАЛЬНО ШТАТНО подняв систему по все доступным интерфейсам а не в экстремальных условиях и только в UART. Если Вы не заметили, именно это (НОРМАЛЬНО ШТАТНО пишу в лог) я и делаю в "боевой" версии ПО.
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|