|
проблема портирования программы с AtMega32 на AtMega 128 |
|
|
|
Aug 6 2008, 07:05
|
Участник

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

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

|
1)именно плохо в том, что на 32 меге изменяются только флаги nurse1 и nurse2 остальные как будто вообще не существуют 2) проверил все части программы которые берут эти флаги-их изменение ничего не выявило, т. е. как были активными только два первые флага так они и остались
|
|
|
|
|
Aug 6 2008, 07:45
|

Гуру
     
Группа: Модераторы
Сообщений: 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)
|
|
|
|
|
Aug 6 2008, 07:59
|

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

|
Цитата(Сергей Борщ @ Aug 6 2008, 11:45)  Телепатически предположу, что tmp изменяется в прерывании и объявлена без квалификатора volatile. ++ То же самое хотел сказать Вообще, тяжело телепатировать на голодный желудок...
--------------------
Программирование делится на системное и бессистемное. ©Моё :) — а для кого-то БГ — это Bill Gilbert =)
|
|
|
|
|
Aug 6 2008, 08:12
|
Участник

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

|
Цитата(MrYuran @ Aug 6 2008, 10:59)  ++ То же самое хотел сказать Вообще, тяжело телепатировать на голодный желудок... tmp не в прерывании изменяется. tmp_data=Sens_Data; tmp=tmp_data; вот откуда берется tmp. поа функция один раз не не выполнится второй раз копирования не происходит)
|
|
|
|
|
Aug 6 2008, 08:38
|
Участник

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

|
да, это сигналы, подключенные на порты, точнее 6 датчиков висящих на PORTC
Сообщение отредактировал Nekromant - Aug 6 2008, 08:48
|
|
|
|
|
Aug 6 2008, 09:46
|
Участник

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

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

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

|
Цитата(Stanislav_S @ Aug 6 2008, 13:53)  По у молчанию фьюз установлен и PORTC работает как JTAG, а не обычный порт ввода вывода. то есть даже те две строчки не помогут и все равно фьюз придется снимать?
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|