CodeVision AVR в вопросах и ответах
Пишите уже на ассемблере. Там вы сделаете так, как пожелаете.
Docendo discimus
- Реклама
не увидел, где вы такое писали, и не вижу общего в последнем и предпоследнем примерах вашего кода - что там за "та же фигня" происходит, мне непонятно.pokk писал(а):Я же написал что такая фигня происходила в других местах примеру вот тут было тоже самое.
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
- Сообщения: 574
- Зарегистрирован: Вт ноя 02, 2010 17:46:37
Ну вот он опять запись в ОЗУ обернул функцией и вынес из за этого запись флага вместо положенных 3 такта выполняется за 11
CALL 0x0000134E
Код: Выделить всё
83: FLAG.flag.F_AC=1; //765765
+00000DB4: 91E00500 LDS R30,0x0500 Load direct from data space
+00000DB6: 64E0 ORI R30,0x40 Logical OR with immediate
+00000DB7: 940E134E CALL 0x0000134E Call subroutine
84: FLAG.flag.F_T1=1;
+00000DB9: 61E0 ORI R30,0x10 Logical OR with immediate
+00000DBA: 940E134E CALL 0x0000134E Call subroutine
85: FLAG.flag.F_I1=0;
+00000DBC: 7FEB ANDI R30,0xFB Logical AND with immediate
+00000DBD: 940E134E CALL 0x0000134E Call subroutine
86: FLAG.flag.F_I2=1;
+00000DBF: 60E8 ORI R30,0x08 Logical OR with immediate
+00000DC0: 93E00500 STS 0x0500,R30 Store direct to data space
87: FLAG.byte=0;
+00000DC2: E0E0 LDI R30,0x00 Load immediate
+00000DC3: 93E00500 STS 0x0500,R30 Store direct to data spaceКод: Выделить всё
0000134E: 93E00500 STS 0x0500,R30 Store direct to data space
+00001350: 9508 RET Subroutine returnЯ вот не могу въехать - что значит "обернул функцией"? И чем вам это не угодило?
Docendo discimus
- Сообщения: 574
- Зарегистрирован: Вт ноя 02, 2010 17:46:37
Я вот не могу въехать - что значит "обернул функцией"?
Код: Выделить всё
сделал +00000DBD: 940E134E CALL 0x0000134E Call subroutine
..
0000134E: 93E00500 STS 0x0500,R30 Store direct to data space
+00001350: 9508 RET Subroutine returnв 3 раза дольше выполняется.И чем вам это не угодило?
- Реклама
у вас оптимизация вообще включена или нет? судя по листингу компилятор достаточно умный, чтобы делать ORI и ANDI над содержимым регистра, но при этом достаточно туп, так как постоянно осуществляет сохранение этого регистра в ячейке памяти... бред какой-то.pokk писал(а):Ну вот он опять запись в ОЗУ обернул функцией и вынес
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
Ого сколько написали.
по поводу инкремента, сделал переменную не волотильной и
;unsigned char test_inc;
; 0000 0027
; 0000 0028 test_inc++;
INC R4
; 0000 0029 test_inc++;
INC R4
; 0000 002A test_inc++;
INC R4
Понятно же, что имелось в виду при инкременте, а не при сложении.Как видим, сброс в ноль не предусмотрен.
по поводу инкремента, сделал переменную не волотильной и
;unsigned char test_inc;
; 0000 0027
; 0000 0028 test_inc++;
INC R4
; 0000 0029 test_inc++;
INC R4
; 0000 002A test_inc++;
INC R4
Купи два беляша и собери из них кошку
Labor est etiam ipse voluptas Труд уже сам по себе есть наслаждение (*Формула любви)
Ave novie-nostra ales Если один человек построил - другой завсегда разобрать может....(*Формула Любви).
Labor est etiam ipse voluptas Труд уже сам по себе есть наслаждение (*Формула любви)
Ave novie-nostra ales Если один человек построил - другой завсегда разобрать может....(*Формула Любви).
Не понятно. Можно попонятнее?Panda_Y2K писал(а):Ого сколько написали.Понятно же...Как видим, сброс в ноль не предусмотрен.
Docendo discimus
- Сообщения: 574
- Зарегистрирован: Вт ноя 02, 2010 17:46:37
Благодарю всех за помощь. Разобрался я из за чего всё это было как и писал ARV
Panda_Y2K, Это если объявить как локальную переменную у меня примерно так же непонятно правда почему он SUBI вместо INC запихивает но да ладно по времени они одинаково выполняются.
Всё дело было в сферических конях =) для того что бы было проще было в ассемблерном листинге найти кусок кода я его вставлял в самое начало хотя использоваться он должен был в прерываниях. Ну а компилятор видимо по смотрел что код выполняется 1 раз по этому скорость не важна и запихал всё в функции. После того как запихал всё в прерывания не каких вызовов CALL не стало.ARV писал(а):пытаться оптимизировать бессмысленный код - пустая трата времени. оптимизировать надо конкретные задачи, а не сферических коней.
Panda_Y2K, Это если объявить как локальную переменную у меня примерно так же непонятно правда почему он SUBI вместо INC запихивает но да ладно по времени они одинаково выполняются.
Код: Выделить всё
106: test_inc++;
+00000FED: 5F2F SUBI R18,0xFF Subtract immediate
107: test_inc++;
+00000FEE: 5F2F SUBI R18,0xFF Subtract immediate
108: test_inc++;
+00000FEF: 5F2F SUBI R18,0xFF Subtract immediateЕсли время исполнения кода важно, то нужно писать на ассемблере.
Docendo discimus
У меня к стати переменная глобальная и код выполняется в функции майн один раз.
версия cv 2.05.3 оптимизация по размеру.
версия cv 2.05.3 оптимизация по размеру.
Купи два беляша и собери из них кошку
Labor est etiam ipse voluptas Труд уже сам по себе есть наслаждение (*Формула любви)
Ave novie-nostra ales Если один человек построил - другой завсегда разобрать может....(*Формула Любви).
Labor est etiam ipse voluptas Труд уже сам по себе есть наслаждение (*Формула любви)
Ave novie-nostra ales Если один человек построил - другой завсегда разобрать может....(*Формула Любви).
- Сообщения: 2
- Зарегистрирован: Ср июн 11, 2014 14:17:15
Может кто подскажет можно ли создать bit массив в codevisionavr ?
Почему ему не нравится такая запись bit A[10]; ?
Почему ему не нравится такая запись bit A[10]; ?
создать массив битов нельзя. потому и ругается. вообще в языке Си нет такого типа "бит".
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
Оформите все в структуру. Там можно сделать битовые поля.
Fucking static initialization order fiasco
- Сообщения: 2
- Зарегистрирован: Ср июн 11, 2014 14:17:15
второй раз повторяю: битовые массивы невозможны.
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
- Сообщения: 3832
- Зарегистрирован: Сб сен 10, 2011 17:46:25
можно попробовать приспособить библиотеку: https://github.com/noporpoise/BitArray/
- Сообщения: 33
- Зарегистрирован: Чт фев 07, 2013 10:46:46
Подскажите пжлст! CVAVR не генерирует файлы прошивки! Открываю готовый проект вношу изменнения, некоторые файлы дату изменения меняют , а файлы *.hex *.cof не меняют. Пробовал их удалять, новые не генерируются, пути менял, папку с проектом переносил в корень, нажимаю и "rebuild all" и "build the project" эффекта ноль. Версия программы 2.05.3. Кто то уже сталкивался с таким?
Создайте свой проект.
Docendo discimus
- Сообщения: 33
- Зарегистрирован: Чт фев 07, 2013 10:46:46
Спасибо за советы, но помогла переустановка.


