Судя по пути к файлу, он Вас то ли в каком-то временном файле, то ли в архиве ... Что за каталог Rar$... ? Rar закрыли, каталог убился и всё.... А Вы оттуда ещё и компилить хотите.
Скопируйте файлы проекта в нормальный каталог на винте (типа C:\CvAvrTest) и работайте.
mixon46 писал(а):мне бы еще на этом языке научиться писать программы. мне вообще не понятно ничего))
Почитайте какую-нибудь простую книжку по C. c++ не нужен . Под авр писать на С++ - крайне неэффективно - памяти мало и прочие сложности. Читайте основы языка - синтаксис, операторы, управляющие структуры (if, for, while ...). Они всегда и везде одинаковые хоть для какого проца ... Файловые операции (типа fopen, fread ..., их Керниган-Ритчи любят ) смело пропускайте. Нету их здеся. Их будете учить, когда доживёте до работы с разно-всякими SD картами. Пока Вам до этого далеко.
Можете у меня в личку спрашивать, дабы здесь не оффтопить. Подскажу, помогу.
Могу также Ваш или мой код разжевать, объяснить, что там к чему ...
ну создал файл. потом появилась кнопочка компиляции. ну выдает ошибку. а вообще походу ничего не понимаю
Вы видимо открыли в архиваторе файл test.c потом архиватор закрыли, папка удалилась. Создайте новый файл проекта, дайте ему осмысленное имя и сохраните в своей папке. Когда создадите, скопируйте из файла entitled.c в этот файл. Можно подключить и этот, конечно, но переименовать нужно.Нажмите сохранить как в меню"файл" выберите куда и под каким именем. Далее заходим Project -configure там нажмите add и выберите свои файл.
выдаёт ошибку на операцию memcpy(mass, date15, sizeof(mass)); есть ли способ обойти эту проблему без написания алгоритма вида for (a = 0; a<5; a++) { for (i = 0; i < 5; i++) { mass[a][i] = date15[a][i]; } }
просто массивов будет много и запись со строкой memcpy было бы удобнее всего...
int temper,temp; unsigned char *text="000.0000"; //вывод температуры на диссплей unsigned char *time="00:00:00"; //вывод на дисплей времени unsigned char button; //переменная для опроса кнопок unsigned char s,m,h; //переменная для формирования времени signed char i,j;
При объявлении *text и *time одновременно компилится все нормально, никаких ошибок или предупреждений, но на дисплей выводится корректно только переменная объявленная первой(в данном случае text), и сама схема работает по неизвестным мне законам. Если одну из них исключить, то все работает. Не могу понять - в чем ошибка?
Делать вывод в дисплей в прерывании - плохая идея. Вот представьте, что программа в основном цикле выводит температуру - дергает управляющими сигналами дисплея, выставляет данные. И тут приходит прерывание, которое пытается сделать то же самое. И дисплей принимает винигрет. В прерывании надо установить программный флаг, переменную которая будет показывать, что время обновилось. А в основном цикле проверять эту переменную. Если она установлена - вывести новое время и сбросить переменную.
А из наших труб идет необычный дым. Стой! Опасная зона! Работа мозга!...
Я пробовал! Но как только объявляю unsigned char *time, начинаются чудеса! В протеусе программа не хочет работать! Пришлось, пока, выводить время посимвольно! Вообще я только начал атмелы изучать, до этого пики программировал. И еще вопрос - для отладки программы нужен AVRStudio или что-нибудь другое подойдет! Проблема в том, что весит достаточно много, а я занимаюсь этим на работе, в свободное время! За большой трафик пятую точку порвать могут!
Большое спасибо Goodefine, разобрался с отладкой в протеусе, настроил таймер. Но все равно с *text и *time проблема осталась(пока ее обошел, но разобраться хочется), при том поэксперементировал, и выяснил интересную вещь - если не проводить вычислений типа time[0]=(h/10)%10+48, то проблемы нет, но в этом случае выводится не время, а нули, а если произвести вычисления, то абра кадабра получается!
Строка символов в массиве должна заканчиваться нулём. Я думаю у тебя этот ноль забивается результатом вычисления. Нужно просто округлить до нужного количества разрядов...
Все решилось неожиданно, просто инициализацию *time провел на несколько строк ниже и все заработало. Думаю проблема была в том, что сперва надо было инициализировать переменные s,m,h. Теперь другой вопрос - подскажите, есть ли команда для смены состояния порта при совпадении 2-х переменных, без опроса состояния порта?
Goodefine писал(а):А зачем читать порт чтоб изменить состояние?
Видимо имелось в виду изменение на противоположное значение. Если AVR, то в некоторых моделях(смотреть в даташите) запись в порт PINx приводит к инверсии.