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

 
 
> проблема портирования программы с AtMega32 на AtMega 128
Nekromant
сообщение Aug 6 2008, 07:05
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 47
Регистрация: 21-03-07
Пользователь №: 26 369



Доброго времени суток,
суть проблемы заключается ч том, что написанная программа для AtMega 128 работает без каких либо изъянов, но при попытке ее перенести на AtMega 32 возникла следующая проблема:
приведенная ниже конструкция на 32 меге просто не работает:
Вариант 1
if(tmp==0x00)
{
Closed=true;
}
else
{
Closed=false;
if(tmp==0x3F)
{
All=true;
}
else
{
All=false;
for( i = 1; i < 6; i++)
{
if(tmp & (1 << i))
SensorData[i]=false;
else
SensorData[i]=true;
}

}
}
Вариант 2
if(tmp==0x00)
{
Closed=true;
}

else
{
Closed=false;
if(tmp==0x3F)
{
All=true;
}
else
{
All=false;
tmp=(~tmp)&0x01;
if(tmp!=0x01)
{
Nurse1=true;
}
else
{
Nurse1=false;
}
tmp=tmp_data;
tmp=(~tmp)&0x02;
if(tmp!=0x02)
{
Nurse2=true;
}
else
{
Nurse2=false;
}
tmp=tmp_data;
tmp=(~tmp)&0x04;
if(tmp!=0x04)
{
Hall=true;
}
else
{
Hall=false;
}
tmp=tmp_data;
tmp=(~tmp)&0x08;
if(tmp!=0x08)
{
Bedroom=true;
}
else
{
Bedroom=false;
}
tmp=tmp_data;
tmp=(~tmp)&0x10;
if(tmp!=0x10)
{
Kitchen=true;
}
else
{
Kitchen=false;
}
tmp=tmp_data;
tmp=(~tmp)&0x20;
if(tmp!=0x20)
{
Door=true;
}
else
{
Door=false;
}
}
оба варианта ведут себя одинаково нормально на меге 128 и оба же варианта ведут себя одинаково плохо на меге 32 07.gif
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
MrYuran
сообщение Aug 6 2008, 07:14
Сообщение #2


Беспросветный оптимист
******

Группа: Свой
Сообщений: 4 640
Регистрация: 26-12-07
Из: Н.Новгород
Пользователь №: 33 646



1. Используйте теги [code][/code] для кусков кода, иначе нечитабельно вообще
2. Вместо if/else/else/else лучше использовать switch/case по возможности
3. Вряд ли проблема в этом месте, код достаточно примитивный.
Опять же, не указали, что значит не работает и каким именно образом.


--------------------
Программирование делится на системное и бессистемное. ©Моё :)
— а для кого-то БГ — это Bill Gilbert =)
Go to the top of the page
 
+Quote Post
Nekromant
сообщение Aug 6 2008, 07:35
Сообщение #3


Участник
*

Группа: Участник
Сообщений: 47
Регистрация: 21-03-07
Пользователь №: 26 369



1)именно плохо в том, что на 32 меге изменяются только флаги nurse1 и nurse2 остальные как будто вообще не существуют
2) проверил все части программы которые берут эти флаги-их изменение ничего не выявило, т. е. как были активными только два первые флага так они и остались
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Aug 6 2008, 07:45
Сообщение #4


Гуру
******

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



Цитата(Nekromant @ Aug 6 2008, 10:35) *
2) проверил все части программы которые берут эти флаги-их изменение ничего не выявило, т. е. как были активными только два первые флага так они и остались
Телепатически предположу, что tmp изменяется в прерывании и объявлена без квалификатора volatile.


--------------------
На любой вопрос даю любой ответ
"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
MrYuran
сообщение Aug 6 2008, 07:59
Сообщение #5


Беспросветный оптимист
******

Группа: Свой
Сообщений: 4 640
Регистрация: 26-12-07
Из: Н.Новгород
Пользователь №: 33 646



Цитата(Сергей Борщ @ Aug 6 2008, 11:45) *
Телепатически предположу, что tmp изменяется в прерывании и объявлена без квалификатора volatile.

++
То же самое хотел сказать
Вообще, тяжело телепатировать на голодный желудок...


--------------------
Программирование делится на системное и бессистемное. ©Моё :)
— а для кого-то БГ — это Bill Gilbert =)
Go to the top of the page
 
+Quote Post
Nekromant
сообщение Aug 6 2008, 08:12
Сообщение #6


Участник
*

Группа: Участник
Сообщений: 47
Регистрация: 21-03-07
Пользователь №: 26 369



Цитата(MrYuran @ Aug 6 2008, 10:59) *
++
То же самое хотел сказать
Вообще, тяжело телепатировать на голодный желудок...

tmp не в прерывании изменяется.
tmp_data=Sens_Data;
tmp=tmp_data; вот откуда берется tmp.
поа функция один раз не не выполнится второй раз копирования не происходит)
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Aug 6 2008, 08:19
Сообщение #7


Гуру
******

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



Цитата(Nekromant @ Aug 6 2008, 11:12) *
tmp не в прерывании изменяется.
tmp_data=Sens_Data;
tmp=tmp_data; вот откуда берется tmp.
Продолжаем допрос с пристрастием. Что такое Sens_Data, как она объявлена, где изменяется?


--------------------
На любой вопрос даю любой ответ
"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

Сообщений в этой теме
- Nekromant   проблема портирования программы с AtMega32 на AtMega 128   Aug 6 2008, 07:05
- - Непомнящий Евгений   теги [code] используйте... А как именно "пло...   Aug 6 2008, 07:11
|- - Dog Pawlowa   Цитата(Nekromant @ Aug 6 2008, 11:12) tmp...   Aug 6 2008, 08:24
|- - Nekromant   да, это сигналы, подключенные на порты, точнее 6 ...   Aug 6 2008, 08:38
|- - Stanislav_S   Цитата(Nekromant @ Aug 6 2008, 13:38) да,...   Aug 6 2008, 09:05
|- - Nekromant   фьюз я не трогал просто в функции маин в самом нач...   Aug 6 2008, 09:46
|- - Stanislav_S   Цитата(Nekromant @ Aug 6 2008, 14:46) фью...   Aug 6 2008, 10:53
|- - Nekromant   Цитата(Stanislav_S @ Aug 6 2008, 13:53) П...   Aug 6 2008, 11:38
|- - MrYuran   Цитата(Nekromant @ Aug 6 2008, 15:38) то ...   Aug 6 2008, 11:50
- - GDI   Может с размером стека проблемы? Map-файл посмотри...   Aug 6 2008, 07:21
- - Nekromant   Точно, снял фьюз и большая часть глюков исчезла...   Aug 6 2008, 11:59
|- - Stanislav_S   Цитата(Nekromant @ Aug 6 2008, 16:59) Точ...   Aug 6 2008, 12:04
|- - Палыч   Цитата(Nekromant @ Aug 6 2008, 14:59) Точ...   Aug 6 2008, 12:11
|- - MrYuran   Цитата(Палыч @ Aug 6 2008, 16:11) Интерес...   Aug 6 2008, 12:17
|- - Nekromant   [quote name='MrYuran' date='Aug 6 2008...   Aug 6 2008, 12:29
- - defunct   Цитата(Stanislav_S @ Aug 6 2008, 15:04) Я...   Aug 6 2008, 12:18
|- - Stanislav_S   Цитата(defunct @ Aug 6 2008, 17:18) Кто в...   Aug 6 2008, 13:28
|- - defunct   Цитата(Stanislav_S @ Aug 6 2008, 16:28) Л...   Aug 6 2008, 14:07
|- - Stanislav_S   Цитата(defunct @ Aug 6 2008, 19:07) Чем л...   Aug 6 2008, 16:56
|- - defunct   Цитата(Stanislav_S @ Aug 6 2008, 19:56) т...   Aug 6 2008, 19:15
- - Nekromant   если честно ума не приложу взял то же самое продел...   Aug 6 2008, 12:20
|- - defunct   Цитата(Nekromant @ Aug 6 2008, 15:20) так...   Aug 6 2008, 12:26
|- - Палыч   Цитата(Nekromant @ Aug 6 2008, 15:20) есл...   Aug 6 2008, 12:31
|- - Nekromant   Цитата(Палыч @ Aug 6 2008, 15:31) ИМХО, э...   Aug 6 2008, 14:59
|- - defunct   Цитата(Nekromant @ Aug 6 2008, 17:59) 2) ...   Aug 6 2008, 15:14
|- - Nekromant   Цитата(defunct @ Aug 6 2008, 18:14) Если ...   Aug 6 2008, 15:33
|- - defunct   Цитата(Nekromant @ Aug 6 2008, 18:33) Я б...   Aug 6 2008, 16:09
- - Nekromant   Мой девайс сегодня оттестировался и вполне отработ...   Aug 7 2008, 02:14


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

 


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


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