реклама на сайте
подробности

 
 
> mega32l, Врагу такого не пожелаю !!!
Чип-Хрум
сообщение Apr 16 2007, 13:28
Сообщение #1


Участник
*

Группа: Новичок
Сообщений: 33
Регистрация: 1-04-07
Пользователь №: 26 675



Незнаю уже на что грешить .
Короче : п.о. AVR Ssutio 4.12. s.p.-4 build 498 ,
чипы кодирую на autoprog программаторе hex файлом.
Чип прошивается нормально без проблемм,
запускается mega32 тоже нормально инициирует жк индикатор мт-16s2r.
Выводит на индикатор все правильно .
А теперь самое интересное настраиваю портB на ввод информации.
записываю
DDRB= 0xb0;
а он зараза оказывается 0xff (инфа высвечивается на индикаторе)
Я пролистал всю программу в ассемблере под astudio ни одного обращения
к DDRB.
Оказалось что если в DDRB записать 0xb0 то там окажется 0xff
то бишь перенаправить выводы не удастся а в книге писалось об обратном.
(Микроконроллеры AVR семейств Tiny и Mega автор Евстифеев)
Это еще пол беды Шоу только начинается.
Порт в оставляю на вывод и берусь за портА.
Ставлю подтягивающие резисторы на 39кОм
Настраиваю porta
DDRA=0x00;
PORTA=0x00;
И тыркаюсь на каждый ввод сопротивлением 1 кОм подключенным на 5в.
7 вывод показал мне 0x7f. А остальные промолчали.
Кстати тема приколов не последняя
Особую Благодарность хочется высказать в пользу книги
(Программирование на языке си для avr и pic микроконтроллеров Ю.А. Шпак) maniac.gif
Автор не упомяну ничего о софте каторый дается в приложении что он
нихира не рабочий , глючный , и еще галимый.
А также механизм прерываний описан неправильно!!! maniac.gif
Я уже не говорю про те жыдкие программные примеры для микроконтроллеров
каторые этот чудак на букву МММ дает.
У меня ВСЕ!
Добрые люди !!!Подскажите ламеру где он не прав !!!
help.gif help.gif help.gif
Go to the top of the page
 
+Quote Post
3 страниц V  < 1 2 3 >  
Start new topic
Ответов (15 - 29)
slog
сообщение Apr 17 2007, 07:57
Сообщение #16


Знающий
****

Группа: Свой
Сообщений: 961
Регистрация: 28-11-05
Пользователь №: 11 489



Насчет sprintf() и printf() в IAR.

Эти функции кроме требования большого стека еще и все инициализированные строки хранит в ОЗУ, в IAR так сделано. И при большом кол-ве строк, ОЗУ очень быстро кончается. В IAR желательно пользовать printf_P(). Строки будут храниться во флэше.

ps. ну а если все глючит, то это конечно же не программист, а AVR виноват :-)


--------------------
В действительности всё не так, как на самом деле.
Go to the top of the page
 
+Quote Post
Dog Pawlowa
сообщение Apr 17 2007, 08:13
Сообщение #17


Гуру
******

Группа: Свой
Сообщений: 2 702
Регистрация: 14-07-06
Пользователь №: 18 823



Цитата(slog @ Apr 17 2007, 07:57) *
ps. ну а если все глючит, то это конечно же не программист, а AVR виноват :-)

А вот и неправда! Еще компилятор! laugh.gif


--------------------
Уходя, оставьте свет...
Go to the top of the page
 
+Quote Post
VladimirYU
сообщение Apr 17 2007, 08:57
Сообщение #18


Местный
***

Группа: Свой
Сообщений: 426
Регистрация: 5-04-07
Из: Санкт-Петербург
Пользователь №: 26 782



Может ошибаюсь, но вроде для printf_P() надо не забыть putchar() прописать (для IAR).
Go to the top of the page
 
+Quote Post
boez
сообщение Apr 17 2007, 21:12
Сообщение #19


Частый гость
**

Группа: Новичок
Сообщений: 79
Регистрация: 1-11-06
Пользователь №: 21 868



Цитата(WHALE @ Apr 17 2007, 07:24) *
2 rezident -я неочень большой знаток С,но мне казалось,что NULL-это некое абстрактное число,не равное ничему.А строка в С заканчивается обычным нулем.


Как правило:

#define NULL ((void *)0)

И к ASCII коду отношения особого не имеет, а обозначает указатель, "не указывающий ни на что". А то что в символах - называется нулевым символом, и равно совершенно обычному нулю, хотя может быть записано и по модному, типа такого: '\0' или '\x00'. Но '\0' == 0 всегда.
Go to the top of the page
 
+Quote Post
Чип-Хрум
сообщение Apr 18 2007, 12:00
Сообщение #20


Участник
*

Группа: Новичок
Сообщений: 33
Регистрация: 1-04-07
Пользователь №: 26 675



Я написал простинькую програмку ,камень оказался целым , программатор значит тоже.
Похоже действительно sprintf виновата , я думал что библиотечные функции рабочии
и на них можно расчитывать а тут ...
Как лучше описать подобную функцию я раньше к примеру делал так
в числе 0x34 , обнулял 3 и делал сравнение на четверку ,
затем делал битовый сдвиг вправо ни четыре позиции ,и опять сравнение.
А какой механизм можно сделать попрощще?
Go to the top of the page
 
+Quote Post
aesok
сообщение Apr 18 2007, 12:52
Сообщение #21


Знающий
****

Группа: Участник
Сообщений: 596
Регистрация: 26-05-06
Из: Москва
Пользователь №: 17 484



Цитата(Чип-Хрум @ Apr 18 2007, 13:00) *
Похоже действительно sprintf виновата , я думал что библиотечные функции рабочии
и на них можно расчитывать а тут ...


Функция sprintf рабочая.

Для общего развития попробуйте поргнать через симулятор програмку и обьяснить результат.

Код
#include <stdio.h>

signed char dat0 = 0xFF;
unsigned char dat1 = 0xFF;

char buffer0[10],buffer1[10];

int main(void)
{
    sprintf(buffer0,"%02x",dat0);
    sprintf(buffer1,"%02x",dat1);

    for (;;);
}


Анатолий.
Go to the top of the page
 
+Quote Post
WHALE
сообщение Apr 18 2007, 13:49
Сообщение #22


Знающий
****

Группа: Свой
Сообщений: 902
Регистрация: 2-01-06
Из: Краснодар
Пользователь №: 12 768



А просто книжку почитать по Си-вам такая мысль никогда в голову не приходила?


--------------------
"Hello, word!" - 17 errors 56 warnings
Go to the top of the page
 
+Quote Post
IgorKossak
сообщение Apr 19 2007, 10:51
Сообщение #23


Шаман
******

Группа: Модераторы
Сообщений: 3 064
Регистрация: 30-06-04
Из: Киев, Украина
Пользователь №: 221



Цитата(WHALE @ Apr 18 2007, 13:49) *
А просто книжку почитать по Си-вам такая мысль никогда в голову не приходила?

А Вам не приходило в голову, что тыкать человека носом в книжку не вполне прилично или Вас кто-то преподавателем назначил (с предупреждениями то)?
Go to the top of the page
 
+Quote Post
dxp
сообщение Apr 19 2007, 11:28
Сообщение #24


Adept
******

Группа: Свой
Сообщений: 3 469
Регистрация: 6-12-04
Из: Novosibirsk
Пользователь №: 1 343



Цитата(WHALE @ Apr 17 2007, 11:24) *
2 rezident -я неочень большой знаток С,но мне казалось,что NULL-это некое абстрактное число,не равное ничему.А строка в С заканчивается обычным нулем.

В Си NULL определен как ((void*)0) и используется как значение указателя, который никуда не указывает. Т.е. это не интегральная константа, а указатель.


--------------------
«Отыщи всему начало, и ты многое поймёшь» К. Прутков
Go to the top of the page
 
+Quote Post
Igor26
сообщение Apr 19 2007, 11:40
Сообщение #25


Знающий
****

Группа: Свой
Сообщений: 521
Регистрация: 10-02-05
Пользователь №: 2 544



Цитата
В Си NULL определен как ((void*)0) и используется как значение указателя, который никуда не указывает. Т.е. это не интегральная константа, а указатель.

А вот так NULL определен в библиотеке stdio.h от EWAVR

#ifndef NULL
#define NULL (0)
#endif

это как расценить?
Go to the top of the page
 
+Quote Post
WHALE
сообщение Apr 19 2007, 13:12
Сообщение #26


Знающий
****

Группа: Свой
Сообщений: 902
Регистрация: 2-01-06
Из: Краснодар
Пользователь №: 12 768



Я считаю неприличным не сделав ни малейшей попытки что-либо "асилить" самостоятельно выходить
на форум с вопросами,излагаемых в куче литературы.
ИМХО,предупреждение нужно выносить за такой стиль общения-я тут кой-чаво наковырял левой ногой,
почему-то не пашет,памажите кто может.
При этом еще вводя в заблуждение,заявляя,что на симуляторе это работает-чего не может быть.
Впрочем,модератор вы и решать вам.


--------------------
"Hello, word!" - 17 errors 56 warnings
Go to the top of the page
 
+Quote Post
rezident
сообщение Apr 19 2007, 14:30
Сообщение #27


Гуру
******

Группа: Свой
Сообщений: 10 920
Регистрация: 5-04-05
Пользователь №: 3 882



Цитата(WHALE)
Я считаю неприличным не сделав ни малейшей попытки что-либо "асилить" самостоятельно выходить
на форум с вопросами,излагаемых в куче литературы.

Ваше предыдущее сообщение
Цитата(WHALE)
А просто книжку почитать по Си-вам такая мысль никогда в голову не приходила?

формулируется гораздо короче - RTFM! wink.gif Поэтому без указания раздела FM это выглядит неубедительно smile.gif C другой стороны я был бы сильно удивлен, если бы за мое сообщение со ссылкой на K&R мне вынесли бы предупреждение. blink.gif
Go to the top of the page
 
+Quote Post
dxp
сообщение Apr 19 2007, 15:17
Сообщение #28


Adept
******

Группа: Свой
Сообщений: 3 469
Регистрация: 6-12-04
Из: Novosibirsk
Пользователь №: 1 343



Цитата(Igor26 @ Apr 19 2007, 15:40) *
А вот так NULL определен в библиотеке stdio.h от EWAVR

#ifndef NULL
#define NULL (0)
#endif

это как расценить?

Наверное, как самодеятельность (если там не применен какой-нить хитрый финт ушами).

Цитата
ISO/IEC 9899:1999 (E)

7.17 Commonde?nitions<stddef.h>
...

3 The macros are
NULL
which expands to an implementation-defined null pointer constant; ...


Для чего им в stdio потребовалось этот макрос переоределлять к нулю, не понятно. Был бы это С++, было бы понятно, но в С... Не знаю.


--------------------
«Отыщи всему начало, и ты многое поймёшь» К. Прутков
Go to the top of the page
 
+Quote Post
Чип-Хрум
сообщение Apr 19 2007, 19:24
Сообщение #29


Участник
*

Группа: Новичок
Сообщений: 33
Регистрация: 1-04-07
Пользователь №: 26 675



Ув. WHALE выяснять отношения иди на другой форум твои замечания не по теме.
Дело в том что функция sprintf переводит любое шестнадцатеричное
число в массив в виде кода( это удобно для жк индикации для отображения переменных
в десятичном представлении ).
Из-за этого я ее и использовал , как сделать что-то подобное я не знаю,
Подскажите кто силен ,хотя-бы дайте наброски !
Я не прошу за меня делать всю работу мне нужен хотя-бы примерный алгоритм.
Go to the top of the page
 
+Quote Post
Dog Pawlowa
сообщение Apr 19 2007, 20:13
Сообщение #30


Гуру
******

Группа: Свой
Сообщений: 2 702
Регистрация: 14-07-06
Пользователь №: 18 823



Цитата(Чип-Хрум @ Apr 19 2007, 19:24) *
...Из-за этого я ее и использовал , как сделать что-то подобное я не знаю,
Подскажите кто силен ,хотя-бы дайте наброски !
Я не прошу за меня делать всю работу мне нужен хотя-бы примерный алгоритм.

Вам же уже указали - нужно увеличить размер буфера для sprintf.
Пробовали?

вариант второй - табличное преобразование

char tab[16]={'0', ..'9','A'..'F'};
char byte_to_display;

//вывод
display(tab[byte_to_display>>4]);
display(tab[byte_to_display&0x0f]);


--------------------
Уходя, оставьте свет...
Go to the top of the page
 
+Quote Post

3 страниц V  < 1 2 3 >
Reply to this topicStart new topic
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 19th July 2025 - 03:03
Рейтинг@Mail.ru


Страница сгенерированна за 0.03696 секунд с 7
ELECTRONIX ©2004-2016