роботы робототехника микроконтроллеры


 Страниц (3): « 1 [2] 3 »   

> Без описания
mogikanin Post Id


Рядовой


Сообщений всего: 10
Дата рег-ции: Февр. 2011  



nest пишет:
mogikanin, дизасемблируйте прошивку и посмотрите, всё ли там верно работает.

Это я делал в первую очередь и не раз (потому что в Ассемблере я лучше разбираюсь, чем в СИ). Всё работает правильно, а результат "FF" - т.е. не записывает или не читает. Запись-то можно проверить только чтением. Или есть другая возможность?
 
 Top
nest Администратор Post Id



Администратор


Сообщений всего: 4866
Дата рег-ции: Сент. 2009  



ну запишите и считайте EEPROM-память программатором.
 
 Top
mogikanin Post Id


Рядовой


Сообщений всего: 10
Дата рег-ции: Февр. 2011  



1_ulyanovsk пишет:
Не знаете где в WinAVR хранятся описания функций и в частности eeprom_write_byte..? хотелосьбы знать как она работает.

В WinAVR есть заголовочный файл eeprom.h. Я его пробовал - пока ничего не вышдо.
 
 Top
Белый Волк Супермодератор Post Id



Супермодератор


Сообщений всего: 648
Дата рег-ции: Февр. 2007  



mogikanin
С каким уровнем оптимизации Вы компилируете код?

В моём опыте с ATmega16, в режиме без оптимизации код был сгенерирован некорректно. При просмотре полученного кода ассемблера, я так и не смог установить, почему код не работает. Однако, проблема была решена использованием максимальной оптимизации компиляции.
 
 Top
mogikanin Post Id


Рядовой


Сообщений всего: 10
Дата рег-ции: Февр. 2011  



Белый Волк пишет:
С каким уровнем оптимизации Вы компилируете код?

Для меня этот вопрос непонятен. Я даже не знаю, как это сделать в AVRStudio4.
Белый Волк пишет:
В моём опыте с ATmega16, в режиме без оптимизации код был сгенерирован некорректно. При просмотре полученного кода ассемблера, я так и не смог установить, почему код не работает. Однако проблема была решена включением максимальной оптимизации компиляции.

О каком программном модуле идёт речь(интерфейс. EEPROM или ещё что-то, с чем я ещё не имел дела)?
 
 Top
nest Администратор Post Id



Администратор


Сообщений всего: 4866
Дата рег-ции: Сент. 2009  



mogikanin пишет:
Для меня этот вопрос непонятен. Я даже не знаю, как это сделать в AVRStudio4.
Project -> Configuration Options -> во вкладке General -> Optimization
Ну и посмотреть где то в хелпе, что сии оптимизации означают.

А как вас угораздило к СИ обратиться?
 
 Top
Белый Волк Супермодератор Post Id



Супермодератор


Сообщений всего: 648
Дата рег-ции: Февр. 2007  



mogikanin
-O0 - оптимизация отключена.
-O1 - первая степень оптимизации
-O2 - вторая степень
-O3 - третья степень
-Os - оптимизация по размеру кода

Приложите, пожалуйста, исходный код.

В крайнем случае, можно записать функции чтения и записи EEPROM на ассемблере.
 
 Top
mihail Post Id



Гуру


Сообщений всего: 1065
Дата рег-ции: Март 2010  



За уровень оптимизации отвечает следующая строчка Makefile
OPT = s

Цитата:
# Optimization level, can be [0, 1, 2, 3, s].
# 0 = turn off optimization. s = optimize for size.
# (Note: 3 is not always the best optimization level. See avr-libc FAQ.)

(Добавление)
Это для WinAVR.
 
 Top
mogikanin Post Id


Рядовой


Сообщений всего: 10
Дата рег-ции: Февр. 2011  



Спасибо, завтра попробую.
 
 Top
mogikanin Post Id


Рядовой


Сообщений всего: 10
Дата рег-ции: Февр. 2011  



nest пишет:
Project -> Configuration Options -> во вкладке General -> Optimization

Обалдеть!!!! При уровне оптимизации 01 тестовая программа сразу пошла! Даже не знаю, как выразить благодарность! Сейчас буду пробовать основную программу и железо. Но почему в Ассемблере всё работало по умолчаниям, а для СИ потребовалась такая операция? Что-то на Atmel не похоже. В "Хелпе" пока ничего не смог найти по этим вопросам.
Белый Волк пишет:
Приложите, пожалуйста, исходный код.

Может теперь это не имеет смысла? Если настаиваете, я вышлю свою тестовую программку.
nest пишет:
А как вас угораздило к СИ обратиться?

Для дисплеев с сенсорным экраном идут библиотеки на СИ. Пришлось все свои программы переводить с Ассемблера на СИ и осваивать новую для "железячника" систему программирования.
 
 Top
Белый Волк Супермодератор Post Id



Супермодератор


Сообщений всего: 648
Дата рег-ции: Февр. 2007  



mogikanin
Если проблема решена, в этом действительно нет необходимости.

Что касается оптимизации: компилятор допускает какую-то ошибку при трансляции в код ассемблера, причём ошибка, похоже, не в последовательности действий а в содержимом одного из регистров. Когда Вы пишете программу на ассемблере, компилятор собирает её "как есть", поэтому проблемы не возникали.
 
 Top
mogikanin Post Id


Рядовой


Сообщений всего: 10
Дата рег-ции: Февр. 2011  



Белый Волк пишет:
Что касается оптимизации: компилятор допускает какую-то ошибку при трансляции в код ассемблера, причём ошибка, похоже, не в последовательности действий а в содержимом одного из регистров. Когда Вы пишете программу на ассемблере, компилятор собирает её "как есть", поэтому проблемы не возникали.

А-а-а... Ну, это очень похоже на правду. Точно могут утверждать только разработчики компилятора, я полагаю?
Спасибо за помощь!
(Добавление)
Железо тоже заработало, как в Ассемблере! Ещё раз спасибо!
Вот только непонятно: в предыдущих обсуждениях (до меня) этот приёмчик даже не обсуждался, почему-то у них и так заработало, а у меня только через "оптимизацию". Или я что-то упустил?
Есть ещё просьба: пока не было необходимости встроить код Ассемблера в программу (функцию) СИ, но, похоже это надо уметь. Нет ли простого примера, как это сделать? (Что надо сделать предварительно в СИ, что в Ассемблере и как потом вызвать). Или где эти примеры для чайников? Извините за назойливость.
 
 Top
nest Администратор Post Id



Администратор


Сообщений всего: 4866
Дата рег-ции: Сент. 2009  



mogikanin пишет:
встроить код Ассемблера в программу (функцию) СИ... Нет ли простого примера, как это сделать?

что то типа такого:
asm("sbi PORTB,1""\n");
но есть страшные подводные камни .

Так с чего вы вдруг к СИ обратились? Просто интересно, на чём споткнулся носитель исходного языка ? :)
 
 Top
mogikanin Post Id


Рядовой


Сообщений всего: 10
Дата рег-ции: Февр. 2011  



nest пишет:
что то типа такого:
asm("sbi PORTB,1""\n"Подмигивающий;
но есть страшные подводные камни .

Мне попадались и (asm) и (_asm), но никак не пойму, что правильно и где тут Ассемблерный код, и зачем кавычки, ну и т.д. Чайник, что тут ещё про меня скажешь.
nest пишет:
Так с чего вы вдруг к СИ обратились? Просто интересно, на чём споткнулся носитель исходного языка ? Улыбка

Может я вопрос не понял. Носитель исходного языка (Ассемблер) нигде не спотыкался, всё работало отлично. Просто возникла необходимость использовать дисплеи с сенсорной панелью (TouchScreen). А для дисплеев с сенсорным экраном идут библиотеки на СИ, которые просто встраиваются в программы, но СИ. Иначе эти программы пришлось бы "рожать" самому в Ассемблерном варианте, что затягивает сроки разаработок. Вот и пришлось все свои программы переводить с Ассемблера на СИ и осваивать новый для "железячника" язык программирования СИ. До этого я использовал цифровые и графическо-цифровые примитивные монохромные дисплеи.
 
 Top
nest Администратор Post Id



Администратор


Сообщений всего: 4866
Дата рег-ции: Сент. 2009  



mogikanin пишет:
Мне попадались и (asm) и (_asm), но никак не пойму, что правильно
это зависит от компилятора.
Это у нас в асм только однозначно всё, а у СИщников кому как нравится - тот так и лабает Улыбка


Не знаю, будет ли быстрее осваивать СИ и ещё обрабатывать напильником сторонние библиотеки... чем "родить" всё своё на асм.
 
 Top
Страниц (3): « 1 [2] 3 »
« Делимся опытом »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 





Powered by Exclusive Bulletin Board
ExBB FM 1.0 RC1 Smiles by Fool from Foolstown
  Яндекс.Метрика   Рейтинг@Mail.ru