DimSun 0 1 мая, 2005 Опубликовано 1 мая, 2005 · Жалоба Что-то я не пойму, симулятор в IAR симулирует обвязку или нет. Пробую симулировать таймер. Запускаю, а он стоит. В студии все идет ОК. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ssm 0 1 мая, 2005 Опубликовано 1 мая, 2005 · Жалоба Скачай с сайта Atmel бесплатную AVRSTUDIO и пользуйся им. Понимает иаровские файлы dbg и симулирует периферию весма прилично. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
aal 0 2 мая, 2005 Опубликовано 2 мая, 2005 · Жалоба В иаре хорошо циклы программы проверять, код оптимизировать, проверять правильность работы своих выкрутасов, но с переферией он не дружит.... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
DimSun 0 2 мая, 2005 Опубликовано 2 мая, 2005 · Жалоба Скачай с сайта Atmel бесплатную AVRSTUDIO и пользуйся им. Понимает иаровские файлы dbg и симулирует периферию весма прилично. <{POST_SNAPBACK}> Студия есть, только я не понял, она С++ код понимает? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
DimSun 0 2 мая, 2005 Опубликовано 2 мая, 2005 · Жалоба В иаре хорошо циклы программы проверять, код оптимизировать, проверять правильность работы своих выкрутасов, но с переферией он не дружит.... <{POST_SNAPBACK}> Что вообще? Тогда зачем он нужен? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dxp 56 3 мая, 2005 Опубликовано 3 мая, 2005 · Жалоба В иаре хорошо циклы программы проверять, код оптимизировать, проверять правильность работы своих выкрутасов, но с переферией он не дружит.... <{POST_SNAPBACK}> Что вообще? Тогда зачем он нужен? <{POST_SNAPBACK}> В IAR'е есть специальные макросы для эмуляции периферийных устройств. Т.е. не для собственно симуляции того, как, например, таймерный регистр щелкает, а для эмуляции результатов работы периферийных устройств. По опыту скажу, что на деле это ценнее и лучше, нежели простая симуляция периферии, которая только и годится для того, чтобы проверить, а запустился ли таймер. Поясню. Предположим, я отлаживаю протокол обмена через UART, где летают пакеты - загловок, тело, трейлер (контрольная сумма). Вот мне и надо логику отладить. Как это с помощью симулятора сделать? Правильно - написать ему стимул на вход (для UART'а), который изображает всю диаграмму! Не такое простое дело, между прочим. И на деле этого-то мне тут и не надо - мне ведь не правильность работы UART'а надо проверять, а логику работы своего принимающего кода. Поэтому меня бы просто устроила возможность подавать принятые байты на обработчик прерывания. Вот именно это и дает сделать С-SPY: пишу скриптик, где задаю прерывание (с определенным периодом, задержкой и т.д.), задаю immediate breakpoint на обращение к регистру данных UART'а, при котором будет вызван макрос (мною же написанный), где в этот регистр (еще до чтения его процессором) будет подсунуто значение из файла. Таким образом, просто составляю текстовый файл, где просто прописываю байты на прием, и указываю этот файл как входной для симулятора. Все. Та же история с АЦП. Подаю файл с данными и смотрю, как АЦП "оцифровывает" "данные". Очень просто можно смоделировать, например, ситуацию, когда в момент выполнения обработчика прерываний приходит другое прерывание (например, чтобы отследить использование стека в прерываниях) - достаточно задать нужные задержки возникновения прерываний. В общем, макросы эти - очень мощное и гибкое средство моделирования! А для чего еще симулятор нужен?! Именно для моделирования. А уж таймер правильно запустить можно и без симулятора. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Ljubitel 0 3 мая, 2005 Опубликовано 3 мая, 2005 · Жалоба В IAR'е есть специальные макросы для эмуляции периферийных устройств. Т.е. не для собственно симуляции того, как, например, таймерный регистр щелкает, а для эмуляции результатов работы периферийных устройств. По опыту скажу, что на деле это ценнее и лучше, нежели простая симуляция периферии, которая только и годится для того, чтобы проверить, а запустился ли таймер. Вот где бы еще почитать об этом поподробнее,не скажете ? Скудный хэлп все же в IARе. Например я хочу периодически менять значение подаваемое на ножку PIND_Bit2. Пишу макрос. execUserSetup() { __registerMacroFile("1.mac"); } __var i; execUserReset() { StimulPinD2(); } StimulPinD2() { while(1) { for (i = 0;i < 100;i++) { }; PIND_Bit2 ^= 1; }; } IAR вылетает с ошибкой. Как правильно сделать ? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dxp 56 4 мая, 2005 Опубликовано 4 мая, 2005 · Жалоба В IAR'е есть специальные макросы для эмуляции периферийных устройств. Т.е. не для собственно симуляции того, как, например, таймерный регистр щелкает, а для эмуляции результатов работы периферийных устройств. По опыту скажу, что на деле это ценнее и лучше, нежели простая симуляция периферии, которая только и годится для того, чтобы проверить, а запустился ли таймер. Вот где бы еще почитать об этом поподробнее,не скажете ? Скудный хэлп все же в IARе. Например я хочу периодически менять значение подаваемое на ножку PIND_Bit2. Пишу макрос. [...] IAR вылетает с ошибкой. Как правильно сделать ? <{POST_SNAPBACK}> Это прерывание? Для эмуляции прерываний существует специальный макрос __orderInterrupt(), где задается периодичность и прочие условия, а также - очень важно - пользовательский макрос, который вызывается в этом прерывании и выполняет нужную пользователю работу. Вот пример с упомянутым UART'ом: // Setting up a periodic interrupt simulation: __var UART_Rx_period; __var UDR; __var fid; __var err; RxIn() { UDR = __readFile(fid); __writeMemoryByte (UDR, 0x0c, "I/O-SPACE"); message "fid = ", fid, "\n"; message "UDR = ", UDR, "\n"; __printLastMacroError(); } execUserSetup() { T_C0_period = 10000; UART_Rx_period = 5000; __cancelAllInterrupts(); __orderInterrupt("USART RXC", 1000, UART_Rx_period, 0, 0, 100); // set T_C0 overflow interrupt __setBreak("0x0c", "I/O-SPACE", 1, 1,"", "TRUE", "I", "RxIn()"); err = __openFile(fid, "uart.dat", "r"); message "fid = ", fid, "\n"; message "err = ", err, "\n"; } execUserExit() { __cancelAllInterrupts(); __closeFile(fid); } Здесь с периодом в 1000 тактов будет возникать прерывание "USART RXC", в нем у нас происходит обращение к регистру данных порта - и в этот самый момент, т.е. даже до считывания данных из UDR возникает immediate breakpoint ("I" - в спецификации брейка задает тип оного) - именно в при обращении к адресу UDR, но ДО считывания его значения. При этом вызывается наш макрос RxIn(), где мы и подсовываем значение из файла. Т.е. при считывании в программе из регистра данных UART'а каждый раз получаем следующее значение из файла. Работоспособность именно этого примера не проверял (могут быть мелкие синтаксические огрехи), но почти такое прекрасно работает. Для другого прерывания все делается по аналогии. Все это неплохо описано в документации (не в хелпе, который очень краткий), в pdf'никах. Читайте, пробуйте и все получится. :) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
DimSun 0 4 мая, 2005 Опубликовано 4 мая, 2005 · Жалоба В IAR'е есть специальные макросы для эмуляции периферийных устройств. Т.е. <{POST_SNAPBACK}> Спасибо, буду разбираться. вообще похоже удобная штука. Мне такое знакомо по Фитоновскому х96. Там правда покруче. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dowhile 0 14 февраля, 2009 Опубликовано 14 февраля, 2009 · Жалоба Помогите пожалуйста с макросом вызова прерывания по насчету таймером_1 числа 255 - подробно в топике (сообщение 6) http://electronix.ru/forum/index.php?showtopic=58243 Спасибо ! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dowhile 0 14 февраля, 2009 Опубликовано 14 февраля, 2009 · Жалоба И как запустить счет таймера 1 ? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться