реклама на сайте
подробности

 
 
> ATMega128: в 3х соснах заблудился, программа в 5 строчек крашится
A. Fig Lee
сообщение May 27 2014, 12:29
Сообщение #1


Знающий
****

Группа: Участник
Сообщений: 974
Регистрация: 4-04-08
Из: далека
Пользователь №: 36 467



Вопчем работал мой Атмел, а через 2 месяца, когда достал с полки - перестал.
Выбросил все практически, пустая программа, крашится если записал что нибудь в UCSR1C.
Опять на начало скачет.
Чувствую, хочет какойто интеррапт, которого нет? Почему раньше не хотело?
В талмуде по Атмеге128 нет толкового описания UCSRC, какято художественная литература.
У майкрочипа все четко расписано.

Вот код (если закомментировать запись в UCSR1C, доходит до лупа и крутится):

CODE
/*
* Crashtest.c
*
* Created: 5/27/2014 12:23:37 PM
* Author: Administrator
*/


#include <avr/io.h>
#include <avr/interrupt.h>
#include <string.h>

#define __enable_interrupt sei
#define __disable_interrupt cli


void Init()
{


}

void test()
{
UCSR1C = 0;

}

volatile uint32_t s;

int main(void)
{
Init();
__enable_interrupt();
test();

while(1)
{
s++;
}
}


Сообщение отредактировал IgorKossak - May 27 2014, 15:05


--------------------
Верить нельзя никому, даже себе. Мне - можно.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов (1 - 7)
Alex A. Mihaylov
сообщение May 27 2014, 14:17
Сообщение #2


Участник
*

Группа: Участник
Сообщений: 63
Регистрация: 15-11-10
Из: Санкт-Петербург
Пользователь №: 60 892



Цитата(A. Fig Lee @ May 27 2014, 20:39) *
В талмуде по Атмеге128 нет толкового описания UCSRC, какято художественная литература.
У майкрочипа все четко расписано.


Каждый видит ровно то, что хочет увидеть.

http://www.atmel.com/Images/doc2467.pdf Страница 190 - USART Control and Status Register C – UCSRnC.

Подробнее некуда. И суда по всему дело не в этом регистре. Смотрите схему. Меняйте чип. По сбросу там должно быть 0x06 - попробуйте записать это значение (асинхронно, без четности, 8 бит, 1 стоп. Полярность не важна ибо не используется).

И прекратите ругать Atmel - их документация лучшая.
Go to the top of the page
 
+Quote Post
A. Fig Lee
сообщение May 27 2014, 15:13
Сообщение #3


Знающий
****

Группа: Участник
Сообщений: 974
Регистрация: 4-04-08
Из: далека
Пользователь №: 36 467



Цитата(Alex A. Mihaylov @ May 27 2014, 14:27) *
Каждый видит ровно то, что хочет увидеть.

http://www.atmel.com/Images/doc2467.pdf Страница 190 - USART Control and Status Register C – UCSRnC.

Подробнее некуда. И суда по всему дело не в этом регистре. Смотрите схему. Меняйте чип. По сбросу там должно быть 0x06 - попробуйте записать это значение (асинхронно, без четности, 8 бит, 1 стоп. Полярность не важна ибо не используется).

И прекратите ругать Atmel - их документация лучшая.

Да, спасибо, уже нашел.
Независимо от того, что писать, хоть 6, хоть 0, все равно крашится. Но почемуто именно в этот регистр.
Похоже на стэк..

Да, чудеса..
Инструкция
STS 0x009D, R1
меняет содержимое stack pointer с 0х10F2 на 0x1000.. wacko.gif


--------------------
Верить нельзя никому, даже себе. Мне - можно.
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение May 27 2014, 15:51
Сообщение #4


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



А вы ему случаем совместимость с мегой-103 не включили фузами?


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
A. Fig Lee
сообщение May 27 2014, 16:29
Сообщение #5


Знающий
****

Группа: Участник
Сообщений: 974
Регистрация: 4-04-08
Из: далека
Пользователь №: 36 467



Цитата(Сергей Борщ @ May 27 2014, 16:01) *
А вы ему случаем совместимость с мегой-103 не включили фузами?

Было такое подозрение. Галочка не стоит, extended byte показывает 0xFF.
На всякий случай поставил галочку, проверил, снял галочку, проверил.

В обоих случаях одинаково себя ведет. Хедер платка от Олимекс с Atmega128.
Еще попробую через ISP прочитать. Сейчас JTAG пользую


--------------------
Верить нельзя никому, даже себе. Мне - можно.
Go to the top of the page
 
+Quote Post
alexeyv
сообщение May 28 2014, 00:04
Сообщение #6


Местный
***

Группа: Участник
Сообщений: 298
Регистрация: 26-01-09
Из: Пермь
Пользователь №: 43 940



Может быть что то в настройках проекта полетело? Например, имя проца не то
В какой среде пишете?
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение May 28 2014, 01:48
Сообщение #7


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Цитата(A. Fig Lee @ May 27 2014, 22:23) *
Да, чудеса..
Инструкция
STS 0x009D, R1
меняет содержимое stack pointer с 0х10F2 на 0x1000.. wacko.gif
Такое ощущение, что процессор исполняет одну программу, а отладчик показывает вам листинг от другой. То есть он показывает вам не дизассемблированное на лету содержимое памяти, а загруженный в отладчик готовый листинг. Такое наблюдалось когда в процессе запуска отладчика не заливаелась прошивка. Там нигде галочка вроде "заливать образ перед отладкой" не снята?

И да, среды бывают разные, вы наблюдаете это при шагании в окне исходника или в окне дизассемблера? Некоторые среды в окне исходников показывают сгенерированный листинг, а "честное" дизассемблированное содержимое памяти только в окне дизассемблера.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
A. Fig Lee
сообщение May 28 2014, 07:08
Сообщение #8


Знающий
****

Группа: Участник
Сообщений: 974
Регистрация: 4-04-08
Из: далека
Пользователь №: 36 467



Цитата(alexeyv @ May 28 2014, 00:14) *
Может быть что то в настройках проекта полетело? Например, имя проца не то
В какой среде пишете?


AVR Studio 6.1
Вчера проапгрейдил gcc и до AVR Studio 6.2
gcc попробовал, результат тот же.


Цитата(Сергей Борщ @ May 28 2014, 01:58) *
Такое ощущение, что процессор исполняет одну программу, а отладчик показывает вам листинг от другой. То есть он показывает вам не дизассемблированное на лету содержимое памяти, а загруженный в отладчик готовый листинг. Такое наблюдалось когда в процессе запуска отладчика не заливаелась прошивка. Там нигде галочка вроде "заливать образ перед отладкой" не снята?

И да, среды бывают разные, вы наблюдаете это при шагании в окне исходника или в окне дизассемблера? Некоторые среды в окне исходников показывают сгенерированный листинг, а "честное" дизассемблированное содержимое памяти только в окне дизассемблера.


Да, есть такое ощущение, я даже дизассемблерные коды посмотрел в .lss, сверил с hex файлом,
Есть там "10 92" и так далее.
Галочка не снята, верификация есть.
Если компилирую программу с -O2 (новый gcc -O1 тоже) или -Os то проблем нет,
но инструкцию эту выбрасывает.
Получается, заливка работает, так как меняется поведение.

Я сейчас на 80% грешу что там таки М103 compatibility какая то проблема.
Фьюз хоть и показывает, что Мега128 мод, но я ему не верю.
По пробую erase весь чип..
Делаю паралельный программатор, может от 12 В прошьется.
Чтото мне не везет с Атмелами, лежит At90s2313, At90s8515 не шьются последовательным
программатором, наверное фьюз слетел.

Да, и попробую
1) скомпилить для М103 мода (маленькая программка, мне должно и его хватить) и
2) поигратся с инструкциями не характерными для Меги128 - убедится насчет М103 мода..

Спасибо всем за помощь, проинформирую, что помогло, если поможет


--------------------
Верить нельзя никому, даже себе. Мне - можно.
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 18th July 2025 - 22:16
Рейтинг@Mail.ru


Страница сгенерированна за 0.01413 секунд с 7
ELECTRONIX ©2004-2016