|
проблема портирования программы с 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
|
|
|
|
3 страниц
1 2 3 >
|
 |
Ответов
(1 - 33)
|
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, а не обычный порт ввода вывода. то есть даже те две строчки не помогут и все равно фьюз придется снимать?
|
|
|
|
|
Aug 6 2008, 11:59
|
Участник

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

|
Точно, снял фьюз и большая часть глюков исчезла! спасибо большое! Чувствуется фьюзы все придется зазубрить на зубок чтоб потом так мытьем и катаньем не искать проблему!
|
|
|
|
|
Aug 6 2008, 12:17
|

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

|
Цитата(Палыч @ Aug 6 2008, 16:11)  Интересно, почему же двойная запись единицы в JTD не отключила JTAG? Цитата The application software must write this bit to the desired value twice within four cycles to change its value. Надо посмотреть, чё там компилятор скомпилил. Может, больше 4 тактов получилось?
--------------------
Программирование делится на системное и бессистемное. ©Моё :) — а для кого-то БГ — это Bill Gilbert =)
|
|
|
|
|
Aug 6 2008, 12:18
|

кекс
     
Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326

|
Цитата(Stanislav_S @ Aug 6 2008, 15:04)  Я сам в свое время на эти грабли наступал, любит Атмел такие приколы  Кто вас заставляет использовать JTAG выводы? Обратный пример - в некоторых МК Reset совмещен с GPIO, по вашему не меняя Fuses этот GPIO должен сразу работать? А то что он не работает назовем "приколом"? Разработчики ловят приколы от нежелания полноценно и вдумчиво ознакомиться с документацией. Цитата фьюзы все придется зазубрить на зубок Это первое с чего надо начинать портирование. А вы с чего начали?
|
|
|
|
|
Aug 6 2008, 12:29
|
Участник

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

|
[quote name='MrYuran' date='Aug 6 2008, 15:17' post='449869'] Надо посмотреть, чё там компилятор скомпилил. Может, больше 4 тактов получилось? [/qкстати возможно так оно и есть
|
|
|
|
|
Aug 6 2008, 14:07
|

кекс
     
Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326

|
Цитата(Stanislav_S @ Aug 6 2008, 16:28)  Логичней было его не устанавливать. Чем логичней? Ведь это интерфейс не только для отладки, но и для программирования. А кристал по-умолчанию голый. И как бы в "логичном для вас случае" жилось тем у кого из программаторов только JTAG-ICE? Цитата Ну во первых мне например много ног надо, так что мне весь порт из за JTAG не использовать? Я думаю Вам стоит попробовать использовать JTAG (если еще не пробовали), и кстати он занимает не весь порт, а всего 4 пина. PS: Все равно при первой прошивке кристала Fuses надо менять, и менять надо не наугад, а со знанием дела.
|
|
|
|
|
Aug 6 2008, 14:59
|
Участник

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

|
Цитата(Палыч @ Aug 6 2008, 15:31)  ИМХО, это от того, что JTAG в разных МК цепляется на разные ноги (порты). Например, в m128 - на PF4-PF7 я на 128 и подцепился на него получил то что работает и не сбоит. 2) согласен что логичнее не устанавливать jtag по умолчанию, зачастубю проще включить что надо чем искать что тебе мешает работать.
|
|
|
|
|
Aug 6 2008, 15:14
|

кекс
     
Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326

|
Цитата(Nekromant @ Aug 6 2008, 17:59)  2) согласен что логичнее не устанавливать jtag по умолчанию, зачастубю проще включить что надо чем искать что тебе мешает работать. Если бы вы программировали МК через JTAG, вы бы задались вопросом - как его включить? И пришли бы к выводу что - без стороннего программатора (еще одного) - никак. Потому этот фуз запрограммирован. Цитата зачастубю проще включить что надо чем искать что тебе мешает работать. Хотя понимаю, что счастливым пользователям PonyProg'a этот вопрос не интересен. Только лохи читают документацию перед началом работы, "реальные пацаны" читают доку только тогда когда появляется реальная проблема.
|
|
|
|
|
Aug 6 2008, 15:33
|
Участник

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

|
Цитата(defunct @ Aug 6 2008, 18:14)  Если бы вы программировали МК через JTAG, вы бы задались вопросом - как его включить? И пришли бы к выводу что - без стороннего программатора (еще одного) - никак. Потому этот фуз запрограммирован. Хотя понимаю, что счастливым пользователям PonyProg'a этот вопрос не интересен. Только лохи читают документацию перед началом работы, "реальные пацаны" читают доку только тогда когда появляется реальная проблема. Я бы сказал что при изучени нового лучше все таки начинать сначала - а не кидаться на всю информацию целиком-в школе тоже можно задачки стразу через иксы решать, но их никто сразу не дает, потому что понимание приходит со временем. И у меня как и у многих начинающих еще просто не хватает понимания, что может повлиять на работу а что нет.
|
|
|
|
|
Aug 6 2008, 16:09
|

кекс
     
Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326

|
Цитата(Nekromant @ Aug 6 2008, 18:33)  Я бы сказал что при изучени нового лучше все таки начинать сначала - а не кидаться на всю информацию целиком В таком случае рекомендую Вам собрать JTAG-ICE и поработать с ним. МК - будет как на ладони. На начальном этапе это самый лучший инструмент из возможных. Цитата -в школе тоже можно задачки стразу через иксы решать, но их никто сразу не дает, потому что понимание приходит со временем. И тут JTAG лучший помошник т.к. например устанавливать требуемые значения портов - можно мышкой, а истинные значения портов будут отображаться на экране. Т.е. у вас будет полный доступ к любому узлу МК из отладчика. Цитата И у меня как и у многих начинающих еще просто не хватает понимания, что может повлиять на работу а что нет. Посмотрите на заголовок топика - "портирование с M32 на M128". Разве можно предположить по заголовку, что Вы начинающий?
|
|
|
|
|
Aug 6 2008, 19:15
|

кекс
     
Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326

|
Цитата(Stanislav_S @ Aug 6 2008, 19:56)  точно так же, как например если бы SPIEN был бы не установлен, и что мне тогда обязательно JTAG-ICE иметь? Речь не о том какой интерфейс запретить. Речь о том, что НИ ОДИН интерфейс программирования не может быть запрещенным в заводских настройках! И всякие доводы о "логичности" запрещения JTAG интерфейса по-умолчанию, лишь потому что именно Вы или кто-то еще его не использует, - неприемлемы. Цитата которое JTAG может мешать, или там джампера ставить? Я так и поступаю в дизайнах где нужен и JTAG и что-то мешает его использованию. Например в m162 джампера единственный выход, т.к. JTAG пересекается с внешней шиной памяти. Тем не менее следует отдать должное разработчикам Atmel, что они не слепо воткнули JTAG, а хотя бы поместили его на 4 старших бита адреса, т.е. можно и шину пользовать (хоть всего 4kb пространства остается), и периферия не пострадала.
|
|
|
|
|
Aug 7 2008, 02:14
|
Участник

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

|
Мой девайс сегодня оттестировался и вполне отработал 12 часов без сбоев. огромное с пасибо за помощь. Теперь я буду копать в сторону удобства или неудобства использования JTAG (хотя бы чтоб знать его влияние на остальную периферию МК).
|
|
|
|
4 чел. читают эту тему (гостей: 4, скрытых пользователей: 0)
Пользователей: 0
|
|
|