Форум myROBOT.ru » Роботы и робототехника » Делимся опытом » Нужна помощь по С и программированию МК

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

16. mogikanin - 13 Февраля, 2011 - 12:57:10 - перейти к сообщению
nest пишет:
mogikanin, дизасемблируйте прошивку и посмотрите, всё ли там верно работает.

Это я делал в первую очередь и не раз (потому что в Ассемблере я лучше разбираюсь, чем в СИ). Всё работает правильно, а результат "FF" - т.е. не записывает или не читает. Запись-то можно проверить только чтением. Или есть другая возможность?
17. nest - 13 Февраля, 2011 - 13:27:50 - перейти к сообщению
ну запишите и считайте EEPROM-память программатором.
18. mogikanin - 13 Февраля, 2011 - 15:18:35 - перейти к сообщению
1_ulyanovsk пишет:
Не знаете где в WinAVR хранятся описания функций и в частности eeprom_write_byte..? хотелосьбы знать как она работает.

В WinAVR есть заголовочный файл eeprom.h. Я его пробовал - пока ничего не вышдо.
19. Белый Волк - 13 Февраля, 2011 - 15:19:09 - перейти к сообщению
mogikanin
С каким уровнем оптимизации Вы компилируете код?

В моём опыте с ATmega16, в режиме без оптимизации код был сгенерирован некорректно. При просмотре полученного кода ассемблера, я так и не смог установить, почему код не работает. Однако, проблема была решена использованием максимальной оптимизации компиляции.
20. mogikanin - 13 Февраля, 2011 - 15:24:15 - перейти к сообщению
Белый Волк пишет:
С каким уровнем оптимизации Вы компилируете код?

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

О каком программном модуле идёт речь(интерфейс. EEPROM или ещё что-то, с чем я ещё не имел дела)?
21. nest - 13 Февраля, 2011 - 15:39:57 - перейти к сообщению
mogikanin пишет:
Для меня этот вопрос непонятен. Я даже не знаю, как это сделать в AVRStudio4.
Project -> Configuration Options -> во вкладке General -> Optimization
Ну и посмотреть где то в хелпе, что сии оптимизации означают.

А как вас угораздило к СИ обратиться?
22. Белый Волк - 13 Февраля, 2011 - 16:48:36 - перейти к сообщению
mogikanin
-O0 - оптимизация отключена.
-O1 - первая степень оптимизации
-O2 - вторая степень
-O3 - третья степень
-Os - оптимизация по размеру кода

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

В крайнем случае, можно записать функции чтения и записи EEPROM на ассемблере.
23. mihail - 13 Февраля, 2011 - 16:50:40 - перейти к сообщению
За уровень оптимизации отвечает следующая строчка 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.
24. mogikanin - 13 Февраля, 2011 - 17:08:11 - перейти к сообщению
Спасибо, завтра попробую.
25. mogikanin - 14 Февраля, 2011 - 07:20:48 - перейти к сообщению
nest пишет:
Project -> Configuration Options -> во вкладке General -> Optimization

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

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

Для дисплеев с сенсорным экраном идут библиотеки на СИ. Пришлось все свои программы переводить с Ассемблера на СИ и осваивать новую для "железячника" систему программирования.
26. Белый Волк - 14 Февраля, 2011 - 08:12:12 - перейти к сообщению
mogikanin
Если проблема решена, в этом действительно нет необходимости.

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

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

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

Так с чего вы вдруг к СИ обратились? Просто интересно, на чём споткнулся носитель исходного языка ? :)
29. mogikanin - 14 Февраля, 2011 - 10:52:23 - перейти к сообщению
nest пишет:
что то типа такого:
asm("sbi PORTB,1""\n"Подмигивающий;
но есть страшные подводные камни .

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

Может я вопрос не понял. Носитель исходного языка (Ассемблер) нигде не спотыкался, всё работало отлично. Просто возникла необходимость использовать дисплеи с сенсорной панелью (TouchScreen). А для дисплеев с сенсорным экраном идут библиотеки на СИ, которые просто встраиваются в программы, но СИ. Иначе эти программы пришлось бы "рожать" самому в Ассемблерном варианте, что затягивает сроки разаработок. Вот и пришлось все свои программы переводить с Ассемблера на СИ и осваивать новый для "железячника" язык программирования СИ. До этого я использовал цифровые и графическо-цифровые примитивные монохромные дисплеи.
30. nest - 14 Февраля, 2011 - 11:18:56 - перейти к сообщению
mogikanin пишет:
Мне попадались и (asm) и (_asm), но никак не пойму, что правильно
это зависит от компилятора.
Это у нас в асм только однозначно всё, а у СИщников кому как нравится - тот так и лабает Улыбка


Не знаю, будет ли быстрее осваивать СИ и ещё обрабатывать напильником сторонние библиотеки... чем "родить" всё своё на асм.