Страница 85 из 160

Re: AVR studio 4 в вопросах и ответах

Добавлено: Сб апр 26, 2014 13:53:38
a_skr
У Вас выключена оптимизация (-O0)!

для использования функций _delay_ms() и _delay_us() оптимизация должна быть включена, иначе они сожрут всю память и не факт, что будут работать, как надо.
In order for these functions to work as intended, compiler optimizations must be enabled, and the delay time must be an expression that is a known constant at compile-time. If these requirements are not met, the resulting delay will be much longer (and basically unpredictable), and applications that otherwise do not use floating-point calculations will experience severe code bloat by the floating-point library routines linked into the application.

Re: AVR studio 4 в вопросах и ответах

Добавлено: Сб апр 26, 2014 14:17:00
Kill17
угу, то есть организовать побитную передачу, в принципе я так и делал, хорошо, с этим понятно. А прием как ?

Re: AVR studio 4 в вопросах и ответах

Добавлено: Сб апр 26, 2014 14:24:36
FreshMan
a_skr писал(а):У Вас выключена оптимизация (-O0)!
включил
все удачно скомпилилось
но хотелось бы понять для себя, по простому, почему ф-ция задержки не работает при отключенной оптимизации ?

Re: AVR studio 4 в вопросах и ответах

Добавлено: Сб апр 26, 2014 14:54:16
ИС-пытатель
Kill17 писал(а):А прием как ?
аналогично. отслеживаете в цикле приход 0 (старт бит)
делаете половинную задержку (чтобы попасть на середину импульса)
А потом через каждую полную задержку считываете состояние порта и добавляете их в регистр памяти со сдвигом

Re: AVR studio 4 в вопросах и ответах

Добавлено: Сб апр 26, 2014 15:33:29
a_skr
FreshMan, посмотрите на код _delay_ms():
Спойлер

Код: Выделить всё

void
_delay_ms(double __ms)
{
	uint16_t __ticks;
	double __tmp = ((F_CPU) / 4e3) * __ms;
	if (__tmp < 1.0)
		__ticks = 1;
	else if (__tmp > 65535)
	{
		//	__ticks = requested delay in 1/10 ms
		__ticks = (uint16_t) (__ms * 10.0);
		while(__ticks)
		{
			// wait 1/10 ms
			_delay_loop_2(((F_CPU) / 4e3) / 10);
			__ticks --;
		}
		return;
	}
	else
		__ticks = (uint16_t)__tmp;
	_delay_loop_2(__ticks);
}
- сплошная плавающая арифметика. Без оптимизации все будет скомпилировано "как есть", с подключением плавающей точки. Что и вынесет всю память и задержку еще увеличит. Если включена оптимизация, и аргументом функции является константа (а это тоже необходимое условие), то компилятор сам все посчитает и соптимизирует код до нескольких(или до одного) пустых циклов с вычисленными заранее значениями счетчиков. Если оптимизацию включить, но передавать в функцию не константу, а значение переменной, то толку тоже не будет, т.к. опять все вычисления будут в процессе выполнения с использованием плавающей точки.

Re: AVR studio 4 в вопросах и ответах

Добавлено: Сб апр 26, 2014 23:25:55
FreshMan
пытаюсь выловит баг в проге
после выполнения тела обработчика прерывания рабочая точка с какого то дуру прыгает ПРЯМО сюда
Изображение
mode_button я нигде принудительно в ноль не выставлял !
это шшо баг студии или баг моей проги ?
как понять ?

Re: AVR studio 4 в вопросах и ответах

Добавлено: Вс апр 27, 2014 01:15:36
*скрыто*
avr studio 4.18
как сделать чтобы РОН отображались в симуляторе ?

Re: AVR studio 4 в вопросах и ответах

Добавлено: Вс апр 27, 2014 11:01:23
Jack_A
Элементарно, Ватсон. View - Register

Re: AVR studio 4 в вопросах и ответах

Добавлено: Вт апр 29, 2014 01:35:22
*скрыто*
все получилось

AVR studio 4, assembler помогите победить ошибку

Добавлено: Сб май 10, 2014 11:58:02
Айвен
Для Atmega128 пишу программу, скажем для "домофона". Только учусь. Возникла проблема, на которую не могу найти конкретного решения. Смотрел по темам- подобное находил но проблему они, к сожалению, не решали. Вот что пишу:

Код: Выделить всё

".include "m128def.inc"
 
.def temp = r16     
.def knopa = r17     
.def counter = r20
.def vizg = r21

.set TOP1slope = 6249            
                                   
.set TOP2slope = 23424          
.set TOPdelay = 1563    


rjmp RESET                  
.org INT0addr
rjmp SIGNAL                  
                                      
.org OC1Aaddr
rjmp T1_Compare1A            
.org OC0addr
rjmp T0_Compare0_launch               


RESET:


ldi temp, high(RAMEND)
out SPH, temp
ldi temp, low(RAMEND)
out SPL, temp

data:
   .DB 0b00000000 , 0                 ;0
   .DB 0b00000001 , 0                 ;1   !!!!!!!<--- в данном месте
   .DB 0b00000010 , 0                 ;2
   .DB 0b00000011 , 0                 ;3
   .DB 0b00000100 , 0                 ;4
   .DB 0b00000101 , 0                 ;5
   .DB 0b00000110 , 0                 ;6
   .DB 0b00000111 , 0                 ;7
   .DB 0b00001000 , 0                 ;8
   .DB 0b00001001 , 0                 ;9
   .DB 0b00001010 , 1                 ;ключ
   .DB 0b00001100 , 1                 ;звонок
   .DB 0b00001101 , 1                 ;сброс



clr temp
out DDRC, temp                               
cbi DDRD, DDD0                              
 sbi DDRB, DDB0      
                      
ldi temp, (1<<INT0)	
out EIMSK, temp                           
ldi temp, (1<<ISC01)|(1<<ISC00) 
sts EICRA, temp                          
sei                                       

MAIN:                                       
rjmp MAIN"
Вот выдержка из программы. Когда пробую проверить работоспособность программы, на моменте ".DB 0b00000001 , 0 " выдает ошибку
"AVR Simulator: Invalid opcode 0x0001 at address 0x000024". Подскажите пожалуйста как же ее можно побороть.

Re: AVR studio 4, assembler помогите победить ошибку

Добавлено: Сб май 10, 2014 19:38:50
Kavka
У тебя управление попадает в секцию с данными!
Оно тебе надо так? :))
Или вынеси данные заведомо за область выполнения кода, или "перепрыгнуть" данные можно.
Спойлер

Код: Выделить всё

jmp skip_data

data:
   .DB 0b00000000 , 0                 ;0
   .DB 0b00000001 , 0                 ;1   !!!!!!!<--- в данном месте
   .DB 0b00000010 , 0                 ;2
   .DB 0b00000011 , 0                 ;3
   .DB 0b00000100 , 0                 ;4
   .DB 0b00000101 , 0                 ;5
   .DB 0b00000110 , 0                 ;6
   .DB 0b00000111 , 0                 ;7
   .DB 0b00001000 , 0                 ;8
   .DB 0b00001001 , 0                 ;9
   .DB 0b00001010 , 1                 ;ключ
   .DB 0b00001100 , 1                 ;звонок
   .DB 0b00001101 , 1                 ;сброс

skip_data:

Re: AVR studio 4 в вопросах и ответах

Добавлено: Сб июн 07, 2014 09:06:12
FreshMan
интересует такое вопрос: раз студия бесплатная то почему компания не сделает натурпродукт под линукс ?

Re: AVR studio 4 в вопросах и ответах

Добавлено: Сб июн 07, 2014 09:20:32
BOB51
Скажи "СПАСИБО", что 4.19 ПОКА еще бесплатная... :cry:
А 6-я основана на компонентах микрософта - без оных работать не будет в принципе. :kill: :kill: :kill:
Это "привязка" к продукту, абы не соскочили. 8)

Re: AVR studio 4 в вопросах и ответах

Добавлено: Сб июн 07, 2014 09:37:05
Kavka
FreshMan, они дают AVR toolchain под линукс. А редакторов (сред разработки) под линкус и так хватает. Ну, разве что, с симулятором не так всё гладко.

Re: AVR studio 4 в вопросах и ответах

Добавлено: Сб июн 07, 2014 11:33:22
FreshMan
Kavka писал(а):Ну, разве что, с симулятором не так всё гладко.
в этом то и проблемма :(

Re: AVR studio 4 в вопросах и ответах

Добавлено: Ср июн 11, 2014 14:16:50
FreshMan
как во время отладки симитировать нажатие кнопки ?

Re: AVR studio 4 в вопросах и ответах

Добавлено: Ср июн 11, 2014 14:22:46
ARV
протеусом :)))

а в студии установкой битика в регистре PINx в нужный момент отладки. либо составлением stimuli-файла и загрузки его в отладчик (довольно муторная и негибкая штука). я об этом писал вот здесь: http://www.simple-devices.ru/attachment ... 7-2010.pdf и здесь: http://www.simple-devices.ru/attachment ... 8-2010.pdf

Re: AVR studio 4 в вопросах и ответах

Добавлено: Пн июн 16, 2014 21:50:53
FreshMan
как в режиме пошаговой отладки сделать несколько шагов назад ?

Re: AVR studio 4 в вопросах и ответах

Добавлено: Пн июн 16, 2014 22:07:29
Alexeyslav
Никак. Это все равно что фарш обратно в мясо прокрутить.

Re: AVR studio 4 в вопросах и ответах

Добавлено: Пн июн 16, 2014 22:22:40
FreshMan
фигово :(
у меня на 16 секунде глюк сидит
каждый раз запускать и ждать столько времени не очень-то и радостно :)