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

 
 
3 страниц V   1 2 3 >  
Reply to this topicStart new topic
> проблема портирования программы с 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
Непомнящий Евген...
сообщение Aug 6 2008, 07:11
Сообщение #2


Знающий
****

Группа: Свой
Сообщений: 771
Регистрация: 16-07-07
Из: Волгодонск
Пользователь №: 29 153



теги [code] используйте...

А как именно "плохо"?
Go to the top of the page
 
+Quote Post
MrYuran
сообщение Aug 6 2008, 07:14
Сообщение #3


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

Группа: Свой
Сообщений: 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
GDI
сообщение Aug 6 2008, 07:21
Сообщение #4


Профессионал
*****

Группа: Свой
Сообщений: 1 235
Регистрация: 14-05-05
Из: Санкт-Петербург
Пользователь №: 5 008



Может с размером стека проблемы? Map-файл посмотрите.


--------------------
http://www.embedders.org Блоги разработчиков электроники.
Go to the top of the page
 
+Quote Post
Nekromant
сообщение Aug 6 2008, 07:35
Сообщение #5


Участник
*

Группа: Участник
Сообщений: 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
Сообщение #6


Гуру
******

Группа: Модераторы
Сообщений: 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
Сообщение #7


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

Группа: Свой
Сообщений: 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
Сообщение #8


Участник
*

Группа: Участник
Сообщений: 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
Сообщение #9


Гуру
******

Группа: Модераторы
Сообщений: 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
Dog Pawlowa
сообщение Aug 6 2008, 08:24
Сообщение #10


Гуру
******

Группа: Свой
Сообщений: 2 702
Регистрация: 14-07-06
Пользователь №: 18 823



Цитата(Nekromant @ Aug 6 2008, 11:12) *
tmp не в прерывании изменяется.
tmp_data=Sens_Data;
tmp=tmp_data; вот откуда берется tmp.
поа функция один раз не не выполнится второй раз копирования не происходит)

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

А вообще-то ... Как лодку назовешь, так она и поплывет.


--------------------
Уходя, оставьте свет...
Go to the top of the page
 
+Quote Post
Nekromant
сообщение Aug 6 2008, 08:38
Сообщение #11


Участник
*

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



да, это сигналы, подключенные на порты, точнее 6 датчиков висящих на PORTC

Сообщение отредактировал Nekromant - Aug 6 2008, 08:48
Go to the top of the page
 
+Quote Post
Stanislav_S
сообщение Aug 6 2008, 09:05
Сообщение #12


извечный пессимист
*****

Группа: Свой
Сообщений: 1 113
Регистрация: 9-10-06
Из: Днепропетровск
Пользователь №: 21 125



Цитата(Nekromant @ Aug 6 2008, 13:38) *
да, это сигналы, подключенные на порты, точнее 6 датчиков висящих на PORTC

А фьюз JTAG как установлен?


--------------------
Slaves are those of this world
Given freedom to lay chains upon The Master
The wolf is no longer free
Release the chains and come for me
Go to the top of the page
 
+Quote Post
Nekromant
сообщение Aug 6 2008, 09:46
Сообщение #13


Участник
*

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



фьюз я не трогал просто в функции маин в самом начале прописано
MCUCSR = (1 << JTD); //Disable JTAG
MCUCSR = (1 << JTD); //Disable JTAG
(по совету Haker Fox)
Go to the top of the page
 
+Quote Post
Stanislav_S
сообщение Aug 6 2008, 10:53
Сообщение #14


извечный пессимист
*****

Группа: Свой
Сообщений: 1 113
Регистрация: 9-10-06
Из: Днепропетровск
Пользователь №: 21 125



Цитата(Nekromant @ Aug 6 2008, 14:46) *
фьюз я не трогал просто в функции маин в самом начале прописано
MCUCSR = (1 << JTD); //Disable JTAG
MCUCSR = (1 << JTD); //Disable JTAG
(по совету Haker Fox)

По у молчанию фьюз установлен и PORTC работает как JTAG, а не обычный порт ввода вывода.


--------------------
Slaves are those of this world
Given freedom to lay chains upon The Master
The wolf is no longer free
Release the chains and come for me
Go to the top of the page
 
+Quote Post
Nekromant
сообщение Aug 6 2008, 11:38
Сообщение #15


Участник
*

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



Цитата(Stanislav_S @ Aug 6 2008, 13:53) *
По у молчанию фьюз установлен и PORTC работает как JTAG, а не обычный порт ввода вывода.

то есть даже те две строчки не помогут и все равно фьюз придется снимать?
Go to the top of the page
 
+Quote Post

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

 


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


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