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

 
 
 
Reply to this topicStart new topic
> есть вопрос, может кто с таким сталкивался
Berny
сообщение Aug 4 2011, 08:34
Сообщение #1





Группа: Новичок
Сообщений: 6
Регистрация: 24-11-10
Пользователь №: 61 136



Есть код, но причина в его куске, причина следующая, прогоняю его в симуляторе avrstudio 4, отдельно написал програмку тестить только его, слетает на 0 и в основной и в тестовой, только в тестовой проходов больше.

i=list_left_x;
nline0=0;
while(i<(list_left_x+80))
{
tmp&=nlineb;
wr_to_tmp(tmp,0x02,i>>1);
nlineb>>=1;
if(nlineb==0)
{
nlineb=0x80;
nline0++;
tmp=fonts_8x8[(list_left[nline0]<<3)+nline1];
}
i++;
}

код писался под iar, но аналогичный есть и под gcc, fonts_8x8 и list_left во флеше, функция только формирует буфер
после 2-3х проходов симулятор делает сброс, память проверял, стек тоже, переполнения нет, вдт включен но сбрасывается как надо,
пробовал и отключать, прерывание только по таймеру.
если кто сталкивался с таким помогите)
Go to the top of the page
 
+Quote Post
Палыч
сообщение Aug 4 2011, 09:06
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 2 399
Регистрация: 10-05-06
Из: г. Новочеркасск
Пользователь №: 16 954



Цитата(Berny @ Aug 4 2011, 12:34) *
...слетает на 0 ...
Такое случается, если разрешено какое-либо прерывание, а функции(процедуры) обработки этого прерывания - нет.
Go to the top of the page
 
+Quote Post
Berny
сообщение Aug 4 2011, 09:42
Сообщение #3





Группа: Новичок
Сообщений: 6
Регистрация: 24-11-10
Пользователь №: 61 136



специально расписал) только 2 прерывания, других нет и по битам нет, и написал, что пробовал запрещать, тоже самое
еще одно, если ставить оптимизацию, то проходов больше, вот что не понятно
Go to the top of the page
 
+Quote Post
one_eight_seven
сообщение Aug 4 2011, 09:49
Сообщение #4


Знающий
****

Группа: Участник
Сообщений: 916
Регистрация: 3-10-08
Из: Москва
Пользователь №: 40 664



Если в теле программы встречается функция, которой нет, выполнение программы начинается с нулевого адреса
Go to the top of the page
 
+Quote Post
Палыч
сообщение Aug 4 2011, 09:49
Сообщение #5


Гуру
******

Группа: Свой
Сообщений: 2 399
Регистрация: 10-05-06
Из: г. Новочеркасск
Пользователь №: 16 954



Цитата(Berny @ Aug 4 2011, 13:42) *
если ставить оптимизацию, то проходов больше, вот что не понятно
Вполне логично: оптимизированный код выполняется быстрее; если дело, например, в прерываниях от таймера, то между прерываниями - выполнится больший кусочек программы.
У Вас "слёт" программы - всегда в приведенном вами участке программы? Поставьте перед ним запрет прерываний, а после него - разрешение. Посмотрите: всегда ли будет выполнятся этот кусочек программы до конца при запрешенных прерываниях?
Go to the top of the page
 
+Quote Post
xemul
сообщение Aug 4 2011, 09:51
Сообщение #6



*****

Группа: Свой
Сообщений: 1 928
Регистрация: 11-07-06
Пользователь №: 18 731



Цитата(Berny @ Aug 4 2011, 12:34) *
вдт включен но сбрасывается как надо

Цитата(Berny @ Aug 4 2011, 13:42) *
если ставить оптимизацию, то проходов больше

запретите WDT
или добавьте его сброс перед while(i<(list_left_x+80)) {...}
или лампочкой на него помигайте
или измерьте время выполнения while(i<(list_left_x+80)) {...}
или ...

ЗЫЖ в следующий раз, когда будете расписывать, постарайтесь придумать осмысленное название темы и научиться пользоваться тэгами code /code.
Go to the top of the page
 
+Quote Post
Berny
сообщение Aug 4 2011, 09:57
Сообщение #7





Группа: Новичок
Сообщений: 6
Регистрация: 24-11-10
Пользователь №: 61 136



проще asm("cli");
повторяю пробовал, дизасемблером слетает на call'е, я 10 лет контроллеры програмлю, что я такие вещи не знаю
а вот с симулятором в данном случае проблема возникла, тут не в прерываниях дело
Go to the top of the page
 
+Quote Post
Палыч
сообщение Aug 4 2011, 09:57
Сообщение #8


Гуру
******

Группа: Свой
Сообщений: 2 399
Регистрация: 10-05-06
Из: г. Новочеркасск
Пользователь №: 16 954



Цитата(one_eight_seven @ Aug 4 2011, 13:49) *
Если в теле программы встречается функция, которой нет, выполнение программы начинается с нулевого адреса
Линкер при этом обязан выдать ошибку! Вряд ли ТС её не замечает...
Go to the top of the page
 
+Quote Post
Berny
сообщение Aug 4 2011, 10:54
Сообщение #9





Группа: Новичок
Сообщений: 6
Регистрация: 24-11-10
Пользователь №: 61 136



еще хуже упростил до безумия
Код
int main(void)
{
   unsigned int i=0;
   unsigned char tmp=0;
   asm("cli")
   while(1)
   {
       i=0;
       while(i<640)
       {
           tmp=pgm_read_byte(%fonts_8x8[0]);
           i++;
       }
    }
}

слетает после 9го прохода

тема закрыта, так и не понял из-за чего, но после перезагрузке компа норм проходит

Сообщение отредактировал Berny - Aug 4 2011, 10:12
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 21st July 2025 - 06:12
Рейтинг@Mail.ru


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