AVR Раздел по микроконтроллерам компании Atmel - AVR / ATtiny / ATmega / ATMega128 / ATxmega, вопросы по программированию в AVR studio и все, относящееся к AVR... |
23.12.2013, 16:52
|
|
Временная регистрация
Регистрация: 25.09.2008
Сообщений: 95
Сказал спасибо: 39
Сказали Спасибо 7 раз(а) в 7 сообщении(ях)
|
Atmel Studio 6 вопросник
Доброго времени суток. Решил изучать Atmel Studio 6.
Неверно происходит расчет данных для инициализации UARTA
PHP код:
|
# define F_CPU 14745600UL #define ON 0xD8 #define OFF 0x00 void UART_InitHW (char _uart, char _state, long _BaudRate) //#uart 0,1; state ON/OFF; speed { if(_uart) { UCSR1A=0x00; UCSR1B= _state; UCSR1C=0x06; UBRR1H=((F_CPU/(16*_BaudRate)-1)‹‹8)&0x00FF; // UBRR0(h/l)=FCLK/(16*Baud Rate)-1 UBRR1L=(F_CPU/(16*_BaudRate)-1)&0x00FF; } else // USART0 initialization {
UCSR0A=0x00; UCSR0B=_state; UCSR0C=0x06; UBRR0H=(unsigned char)((F_CPU/(16*_BaudRate)-1)‹‹8)&0x00FF; UBRR0L=(unsigned char)(F_CPU/(16*_BaudRate)-1)&0x00FF; } return; }
UART_InitHW (0, ON, 19200);
|
во время выполнения этого кода, в регистр UBRR0L записывается 0х03, а должно 0х2F. Это видно и в протеусе и в самой студии. Пробовал добавлять временно другие переменные, что бы отследить процес вычисления скорости:
PHP код:
|
volatile long tmtq; volatile long hgr; volatile unsigned char her;
UCSR0A=0x00; UCSR0B=_state; UCSR0C=0x06; tmtq=_BaudRate*16.0; hgr=F_CPU/tmtq; tmtq=hgr-1; her = (unsigned char) (tmtq‹‹8)&0x00FF; UBRR0H=her; her = (unsigned char) (tmtq & 0x00FF); UBRR0L=her;
|
Во время выполения этого участка, при попытке выполнить строчку tmtq=_BaudRate*16.0; дебагер или пишет в tmtq =0 и каким то образом перескакивая строки всеравно пишет 0х03 или матюкается No source Available.
Компиляция идет без ошибок и вонингов.
Не могу понять в чем проблема - HELP!
Последний раз редактировалось wellcom; 23.12.2013 в 16:58.
|
|
|
|
23.12.2013, 17:06
|
|
Гражданин KAZUS.RU
Регистрация: 16.03.2011
Сообщений: 486
Сказал спасибо: 8
Сказали Спасибо 131 раз(а) в 116 сообщении(ях)
|
Re: Atmel Studio 6 вопросник
Сообщение от wellcom
|
Не могу понять в чем проблема - HELP!
|
Понять-то немудрено... Где-то ошибка...
Точно не скажу где, но не нравится мне эта строка:
Код:
|
UBRR0H=(unsigned char)((F_CPU/(16*_BaudRate)-1)‹‹8)&0x00FF; |
сначала сдвигаете на 8 бит влево,то есть умножаете на 256 и получаете нули в младших 8 битах, а потом накладываете маску на них. Должно получится 0.Странно.
Попробуйте так:
Код:
|
UBRR0=F_CPU/16/BaudRate-1; |
Кстати, какое значение у F_CPU и BaudRate?
|
|
|
|
23.12.2013, 17:24
|
|
Временная регистрация
Регистрация: 25.09.2008
Сообщений: 95
Сказал спасибо: 39
Сказали Спасибо 7 раз(а) в 7 сообщении(ях)
|
Re: Atmel Studio 6 вопросник
Спасибо за оперативность. Вычисления происходили верно, затупил я сам , у меня через дефайн было определено # define F_CPU 14745600UL в delay.h а в моем главном хидере было # define F_CPU 1474560UL (без одного нуля)
|
|
|
|
23.12.2013, 17:30
|
|
Гражданин KAZUS.RU
Регистрация: 16.03.2011
Сообщений: 486
Сказал спасибо: 8
Сказали Спасибо 131 раз(а) в 116 сообщении(ях)
|
Re: Atmel Studio 6 вопросник
|
|
|
|
24.12.2013, 11:51
|
|
Временная регистрация
Регистрация: 25.09.2008
Сообщений: 95
Сказал спасибо: 39
Сказали Спасибо 7 раз(а) в 7 сообщении(ях)
|
Re: Atmel Studio 6 вопросник
еще вопрос: вроде как сохраняю масивы во флеш, но под них на старте почему то резервируется память. Как это исправить? Тот же код в CVAVR при старте не резервирует памяти. см. Рис симуляции в протеусе.
как сделать так, что бы оперативка не сжиралась всякими строчными масивами?
|
|
|
|
24.12.2013, 13:33
|
|
Почётный гражданин KAZUS.RU
Регистрация: 20.06.2006
Адрес: Украина, Запорожье
Сообщений: 7,985
Сказал спасибо: 0
Сказали Спасибо 4,943 раз(а) в 2,371 сообщении(ях)
|
Re: Atmel Studio 6 вопросник
wellcom,
позвольте полюбопытствовать - каким хреном ваши вопросы к студии6 относятся? типичные ошибки, да еще и кодедрыжен притянули за уши... поменяйте название темы или попрошу модераторов
|
|
|
|
24.12.2013, 13:40
|
|
Гражданин KAZUS.RU
Регистрация: 16.03.2011
Сообщений: 486
Сказал спасибо: 8
Сказали Спасибо 131 раз(а) в 116 сообщении(ях)
|
Re: Atmel Studio 6 вопросник
Сообщение от wellcom
|
вроде как сохраняю масивы во флеш, но под них на старте почему то резервируется память.
|
Всё правильно - const не означает что переменные во флеш попадут, их менять в программе нельзя.
Сообщение от wellcom
|
Тот же код в CVAVR при старте не резервирует памяти.
|
CVAVR - не образец ниразу, как хочет, так и делает.
Сообщение от wellcom
|
как сделать так, что бы оперативка не сжиралась всякими строчными масивами?
|
Криво всё это в GCC сделано, но ничего не поделаешь.
Подключайте хидер pgmspace.h и объявляйте переменные с атрибутом PROGMEM
Код:
|
#include ‹avr/pgmspace.h›
const char PROGMEM v[]="Test string."; |
|
|
|
|
24.12.2013, 14:01
|
|
Временная регистрация
Регистрация: 25.09.2008
Сообщений: 95
Сказал спасибо: 39
Сказали Спасибо 7 раз(а) в 7 сообщении(ях)
|
Re: Atmel Studio 6 вопросник
Сообщение от jump
|
wellcom,
позвольте полюбопытствовать - каким хреном ваши вопросы к студии6 относятся? типичные ошибки, да еще и кодедрыжен притянули за уши... поменяйте название темы или попрошу модераторов
|
просите, дело Ваше. все написано выше - все относиться к 6 студии. сивавр упомянут для сравнения. если типичные ошибки - проясните пожалуйста!
Сообщение от _Артём_
|
Всё правильно - const не означает что переменные во флеш попадут, их менять в программе нельзя.
Криво всё это в GCC сделано, но ничего не поделаешь.
Подключайте хидер pgmspace.h и объявляйте переменные с атрибутом PROGMEM
|
В том то и дело, если внимательней расмотрите рисунок, там в красном квардатике исходника и есть тот же PROGMEM о котором Вы говорите и хидер подключен правильный, однако масивы с теми же именами почему то в оперативке а ячейки имеют значения 0.
Вот этого я не могу прояснить.
PHP код:
|
//что так
const char PROGMEM C_hlp[]="help";
//что этак
const char C_hlp[] PROGMEM ="help";
|
результат один и тотже
https://kazus.ru/forums/attachment.p...8&d=1387871379
настройки компилятора такие
Последний раз редактировалось wellcom; 24.12.2013 в 14:52.
|
|
|
|
24.12.2013, 15:02
|
|
Заблокирован
Регистрация: 25.04.2013
Сообщений: 1,431
Сказал спасибо: 0
Сказали Спасибо 385 раз(а) в 254 сообщении(ях)
|
Re: Atmel Studio 6 вопросник
Сообщение от wellcom
|
вроде как сохраняю масивы во флеш, но под них на старте почему то резервируется память
|
Уверены или "вроде как"? Посмотрите в Студии, а то с вашего рисунка и зелёные человечки померещиться могут.
Сообщение от wellcom
|
Рис симуляции в протеусе.
|
Да, Протеус - железный аргумент!
|
|
|
|
24.12.2013, 15:13
|
|
Временная регистрация
Регистрация: 25.09.2008
Сообщений: 95
Сказал спасибо: 39
Сказали Спасибо 7 раз(а) в 7 сообщении(ях)
|
Re: Atmel Studio 6 вопросник
Сообщение от nahimovv
|
Уверены или "вроде как"? Посмотрите в Студии, а то с вашего рисунка и зелёные человечки померещиться могут.
|
еще раз, что бы не мерещилось, даже новый проект создал, таже история
выяснилось, что масив и во флеше и под него, я так понимаю в оперативке место забито. почему адреса одинаковые?
вот проект
123.rar
Сообщение от nahimovv
|
Да, Протеус - железный аргумент!
|
другого пока нет. Даже сама студия имеет тот же адрес масива что отображает протеус - тоже не аргумент? чему верить?
Подозреваю что студия коряво генерит elf файл...выходит, зря пытаюсь на студию перейти...
Последний раз редактировалось wellcom; 24.12.2013 в 15:43.
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 20:31.
|
|