roboforum.ru

Технический форум по робототехнике.
Текущее время: 17 июл 2025, 01:17

Часовой пояс: UTC + 4 часа




Начать новую тему Ответить на тему  [ Сообщений: 127 ]  На страницу Пред.  1, 2, 3, 4, 5, 6, 7, 8, 9  След.
Автор Сообщение
 Заголовок сообщения: Re: Очередная дискавери. Уже хачу!
СообщениеДобавлено: 05 дек 2012, 00:35 
Не в сети
Аватара пользователя

Зарегистрирован: 13 янв 2011, 15:25
Сообщения: 8033
Откуда: Санкт-Петербург
elmot писал(а):
а если оптимизацию включить?

Все, меньше чем привел выше - нельзя, это из-за того что арм не умеет работать с битами...
elmot писал(а):
В то же время - рассматриваемый код - это все-таки Std Periph Lib.

Да, некорректно сослался :oops:


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Очередная дискавери. Уже хачу!
СообщениеДобавлено: 05 дек 2012, 00:38 
Не в сети
Аватара пользователя

Зарегистрирован: 10 дек 2010, 13:16
Сообщения: 4995
Откуда: Красногорск МО
прог. языки: C, Python, wiring/processing
ФИО: Андрей
GPIOB->BSRR |= 0x00000001;

А зачем |= ?????
Просто = !!!!

Там первые 16 бит - сетят, вторые ресетят!

_________________
Мой волшебник это я сам. Всю архитектуру программы придумал лично, а ребята помогли воплотить её. Я бы и сам мог написать, но лень учить язык и его конструкции.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Очередная дискавери. Уже хачу!
СообщениеДобавлено: 05 дек 2012, 00:49 
Не в сети
Аватара пользователя

Зарегистрирован: 13 янв 2011, 15:25
Сообщения: 8033
Откуда: Санкт-Петербург
dccharacter писал(а):
А тут (я не понимаю):

фигасссе, это кто так компилит?
Вообще, система команд ARM слишком хитрая для компиляторов, IAR жестко это делает. Скорее всего, компилятором еще предстоит научиться нормально кодить.
Вот супер-пупер красивый пример на асм , что может система команд ARM:
Код:
;Cortex-M3/M4F Instruction Set

CMP R0, #9              ; Convert R0 hex value (0 to 15) into ASCII
                        ; ('0'-'9', 'A'-'F').
ITE GT                  ; Next 2 instructions are conditional.
ADDGT R1, R0, #55       ; Convert 0xA -> 'A'.
ADDLE R1, R0, #48       ; Convert 0x0 -> '0'.


Последний раз редактировалось Dmitry__ 05 дек 2012, 00:52, всего редактировалось 1 раз.

Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Очередная дискавери. Уже хачу!
СообщениеДобавлено: 05 дек 2012, 00:51 
Не в сети
Аватара пользователя

Зарегистрирован: 10 дек 2010, 13:16
Сообщения: 4995
Откуда: Красногорск МО
прог. языки: C, Python, wiring/processing
ФИО: Андрей
CoIDE

Добавлено спустя 26 секунд:
т.е. GNU ARM 4.6

Добавлено спустя 1 минуту 2 секунды:
Ты объясни, нафига ты |= делаешь? BSRR и ODR - спец регистры. Один битбангит, второй тогглит. Не нужно там |=

_________________
Мой волшебник это я сам. Всю архитектуру программы придумал лично, а ребята помогли воплотить её. Я бы и сам мог написать, но лень учить язык и его конструкции.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Очередная дискавери. Уже хачу!
СообщениеДобавлено: 05 дек 2012, 01:03 
Не в сети
Аватара пользователя

Зарегистрирован: 10 ноя 2011, 12:02
Сообщения: 5691
Откуда: Turku, Finland
Skype: elmot73
прог. языки: Java и все-все=все
ФИО: Илья
есть у меня легкое подозрение, что битбанг - это деятельность stm поверх ядра арм. Поэтому компилер этого напрочь не умеет.
dccharacter, оптимизацию включи


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Очередная дискавери. Уже хачу!
СообщениеДобавлено: 05 дек 2012, 01:09 
Не в сети
Аватара пользователя

Зарегистрирован: 10 дек 2010, 13:16
Сообщения: 4995
Откуда: Красногорск МО
прог. языки: C, Python, wiring/processing
ФИО: Андрей
23 GPIO_SetBits(GPIOC, GPIO_Pin_9);
08000a8c: mov.w r0, #4096 ; 0x1000
08000a92: movt r0, #16385 ; 0x4001
08000a96: mov.w r1, #512 ; 0x200
08000a9a: bl 0x8000a44 <GPIO_SetBits>
08000a9e: ldr r6, [pc, #172] ; (0x8000b4c <main+256>)
08000aa0: ldr.w r8, [pc, #176] ; 0x8000b54 <main+264>
08000aa4: ldrb r3, [r4, #0]

_________________
Мой волшебник это я сам. Всю архитектуру программы придумал лично, а ребята помогли воплотить её. Я бы и сам мог написать, но лень учить язык и его конструкции.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Очередная дискавери. Уже хачу!
СообщениеДобавлено: 05 дек 2012, 01:17 
Не в сети
Аватара пользователя

Зарегистрирован: 13 янв 2011, 15:25
Сообщения: 8033
Откуда: Санкт-Петербург
dccharacter писал(а):
Ты объясни, нафига ты |= делаешь? BSRR и ODR - спец регистры.

Лаханулси, работал как с выходным регистром, |= -чтоб не трогать другие биты.

Сухой остаток:
Код:
GPIOB->BSRR = 0x00000001;
    0x80001e6: 0x4827         LDR.N     R0, ??DataTable3_3      ; GPIOB_BSRR.BR0
    0x80001e8: 0x2101         MOVS      R1, #1
    0x80001ea: 0x6001         STR       R1, [R0]
??DataTable3_3:
    DC32     0x48000418

arm: 10 байт 4 такта, на 72 мгц 55 нс.
PIC33 3 байта 1 такт, на 40 мгц 50 нс. :)

Добавлено спустя 2 минуты 9 секунд:
elmot писал(а):
есть у меня легкое подозрение, что битбанг - это деятельность stm поверх ядра арм. Поэтому компилер этого напрочь не умеет.

Не, это ядро, arm так пытается допилить свой проц до ембеддед приложений :)
http://www.gaw.ru/html.cgi/txt/doc/micr ... /2_3_7.htm


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Очередная дискавери. Уже хачу!
СообщениеДобавлено: 05 дек 2012, 01:19 
Не в сети
Аватара пользователя

Зарегистрирован: 10 дек 2010, 13:16
Сообщения: 4995
Откуда: Красногорск МО
прог. языки: C, Python, wiring/processing
ФИО: Андрей
На PIC33 наверное тоже лоханулся :-))) Если посидишь еще - до четырех тактов доведешь и все будет ОК. Я думаю, я могу тактов 20 с первой попытки сделать, у меня талант

_________________
Мой волшебник это я сам. Всю архитектуру программы придумал лично, а ребята помогли воплотить её. Я бы и сам мог написать, но лень учить язык и его конструкции.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Очередная дискавери. Уже хачу!
СообщениеДобавлено: 05 дек 2012, 01:46 
Не в сети
Аватара пользователя

Зарегистрирован: 13 янв 2011, 15:25
Сообщения: 8033
Откуда: Санкт-Петербург
Ага, щазз

BSET f,#bit4 1 слово, 1 такт :)

Добавлено спустя 19 минут 2 секунды:
dccharacter писал(а):
BSRR и ODR - спец регистры. Один битбангит, второй тогглит. Не нужно там |=

А где это ODR - спец регистр? Запаришься его тогглить :)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Очередная дискавери. Уже хачу!
СообщениеДобавлено: 05 дек 2012, 02:21 
Не в сети
Аватара пользователя

Зарегистрирован: 10 дек 2010, 13:16
Сообщения: 4995
Откуда: Красногорск МО
прог. языки: C, Python, wiring/processing
ФИО: Андрей
ну теперь я глюканул...

_________________
Мой волшебник это я сам. Всю архитектуру программы придумал лично, а ребята помогли воплотить её. Я бы и сам мог написать, но лень учить язык и его конструкции.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Очередная дискавери. Уже хачу!
СообщениеДобавлено: 05 дек 2012, 10:54 
Не в сети
Аватара пользователя

Зарегистрирован: 15 сен 2007, 13:03
Сообщения: 6338
Откуда: Красноярск
прог. языки: ASM(МК), C(PC)
ФИО: Гагарский Андрей Александрович
я что-то упустил или хливар 8 бит против 16 и более давно закончился в виде - нужно дрыгать ногами - берем авр/пик/нек 8мибитку, нужно что то считать и неспешно опрашивать датчики и прочее - берем многобитный быстрый камень и быдлокодим ?

само страшное - между этими вариантами.

_________________
«Как сердцу выразить себя? … Мысль изреченная есть ложь!»
В этом мире меня подводит доброта и порядочность...
"двое смотрят в лужу, один видит лужу, другой отраженные в ней звезды"


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Очередная дискавери. Уже хачу!
СообщениеДобавлено: 05 дек 2012, 22:27 
Не в сети

Зарегистрирован: 14 окт 2009, 11:46
Сообщения: 160
Откуда: Самара
elmot писал(а):
при правильно заданных опциях ассерт превращается в ничто.

Эх, списочек бы ещё правильных опций, ..., для начинающих с STM32 ... Или ссылку на то место, откуда их берут.

_________________
Когда я слышу слова "Первый закон робототехники", я вспоминаю анекдот про ноусэров.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Очередная дискавери. Уже хачу!
СообщениеДобавлено: 16 дек 2012, 15:32 
Не в сети
Аватара пользователя

Зарегистрирован: 09 май 2011, 16:43
Сообщения: 536
Откуда: Украина, Киев
прог. языки: Нецензурный
ФИО: Евгений НеОН
http://www.kosmodrom.ua/el.php?name=STM32F3DISCOVERY
УРА! Появилась на складе! Заказал.

_________________
Никогда не бойся делать то, что ты не умеешь. Ковчег был сооружен любителем. Профессионалы построили “Титаник“
2:5020/2140.1979@fidonet


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Очередная дискавери. Уже хачу!
СообщениеДобавлено: 24 дек 2012, 23:47 
Не в сети
Аватара пользователя

Зарегистрирован: 13 янв 2011, 15:25
Сообщения: 8033
Откуда: Санкт-Петербург
Кто-нибудь смог понять этот загибон?
Ни по формулам, ни по миганию светодиодов не понял, что стмовцы хотели написать.
Наверно должен был быть компас не зависящий от положения в горизонте...
Код:
      /* Read Compass data */
      Demo_CompassReadMag(MagBuffer);
      Demo_CompassReadAcc(AccBuffer);
     
      for(i=0;i<3;i++)
        AccBuffer[i] /= 100.0f;
     
      fNormAcc = sqrt((AccBuffer[0]*AccBuffer[0])+(AccBuffer[1]*AccBuffer[1])+(AccBuffer[2]*AccBuffer[2]));
     
      fSinRoll = -AccBuffer[1]/fNormAcc;
      fCosRoll = sqrt(1.0-(fSinRoll * fSinRoll));
      fSinPitch = AccBuffer[0]/fNormAcc;
      fCosPitch = sqrt(1.0-(fSinPitch * fSinPitch));
     if ( fSinRoll >0)
     {
       if (fCosRoll>0)
       {
         RollAng = acos(fCosRoll)*180/PI;
       }
       else
       {
         RollAng = acos(fCosRoll)*180/PI + 180;
       }
     }
     else
     {
       if (fCosRoll>0)
       {
         RollAng = acos(fCosRoll)*180/PI + 360;
       }
       else
       {
         RollAng = acos(fCosRoll)*180/PI + 180;
       }
     }
     
      if ( fSinPitch >0)
     {
       if (fCosPitch>0)
       {
            PitchAng = acos(fCosPitch)*180/PI;
       }
       else
       {
          PitchAng = acos(fCosPitch)*180/PI + 180;
       }
     }
     else
     {
       if (fCosPitch>0)
       {
            PitchAng = acos(fCosPitch)*180/PI + 360;
       }
       else
       {
          PitchAng = acos(fCosPitch)*180/PI + 180;
       }
     }

      if (RollAng >=360)
      {
        RollAng = RollAng - 360;
      }
     
      if (PitchAng >=360)
      {
        PitchAng = PitchAng - 360;
      }
     
      fTiltedX = MagBuffer[0]*fCosPitch+MagBuffer[2]*fSinPitch;
      fTiltedY = MagBuffer[0]*fSinRoll*fSinPitch+MagBuffer[1]*fCosRoll-MagBuffer[1]*fSinRoll*fCosPitch;
     
      HeadingValue = (float) ((atan2f((float)fTiltedY,(float)fTiltedX))*180)/PI;

      if (HeadingValue < 0)
      {
        HeadingValue = HeadingValue + 360;   
      }
     
      if ((RollAng <= 40.0f) && (PitchAng <= 40.0f))
      {
        if (((HeadingValue < 25.0f)&&(HeadingValue >= 0.0f))||((HeadingValue >=340.0f)&&(HeadingValue <= 360.0f)))
        {
          STM_EVAL_LEDOn(LED10);
          STM_EVAL_LEDOff(LED3);
          STM_EVAL_LEDOff(LED6);
          STM_EVAL_LEDOff(LED7);
          STM_EVAL_LEDOff(LED4);
          STM_EVAL_LEDOff(LED8);
          STM_EVAL_LEDOff(LED9);
          STM_EVAL_LEDOff(LED5);
        }
        else  if ((HeadingValue <70.0f)&&(HeadingValue >= 25.0f))
        {
          STM_EVAL_LEDOn(LED9);
          STM_EVAL_LEDOff(LED6);
          STM_EVAL_LEDOff(LED10);
          STM_EVAL_LEDOff(LED3);
          STM_EVAL_LEDOff(LED8);
          STM_EVAL_LEDOff(LED5);
          STM_EVAL_LEDOff(LED4);
          STM_EVAL_LEDOff(LED7);
        }
        else  if ((HeadingValue < 115.0f)&&(HeadingValue >= 70.0f))
        {
          STM_EVAL_LEDOn(LED7);
          STM_EVAL_LEDOff(LED3);
          STM_EVAL_LEDOff(LED4);
          STM_EVAL_LEDOff(LED9);
          STM_EVAL_LEDOff(LED10);
          STM_EVAL_LEDOff(LED8);
          STM_EVAL_LEDOff(LED6);
          STM_EVAL_LEDOff(LED5);
        }
        else  if ((HeadingValue <160.0f)&&(HeadingValue >= 115.0f))
        {
          STM_EVAL_LEDOn(LED5);
          STM_EVAL_LEDOff(LED6);
          STM_EVAL_LEDOff(LED10);
          STM_EVAL_LEDOff(LED8);
          STM_EVAL_LEDOff(LED9);
          STM_EVAL_LEDOff(LED7);
          STM_EVAL_LEDOff(LED4);
          STM_EVAL_LEDOff(LED3);
        }
        else  if ((HeadingValue <205.0f)&&(HeadingValue >= 160.0f))
        {
          STM_EVAL_LEDOn(LED3);
          STM_EVAL_LEDOff(LED6);
          STM_EVAL_LEDOff(LED4);
          STM_EVAL_LEDOff(LED8);
          STM_EVAL_LEDOff(LED9);
          STM_EVAL_LEDOff(LED5);
          STM_EVAL_LEDOff(LED10);
          STM_EVAL_LEDOff(LED7);
        }
        else  if ((HeadingValue <250.0f)&&(HeadingValue >= 205.0f))
        {
          STM_EVAL_LEDOn(LED4);
          STM_EVAL_LEDOff(LED6);
          STM_EVAL_LEDOff(LED10);
          STM_EVAL_LEDOff(LED8);
          STM_EVAL_LEDOff(LED9);
          STM_EVAL_LEDOff(LED5);
          STM_EVAL_LEDOff(LED3);
          STM_EVAL_LEDOff(LED7);
        }
        else  if ((HeadingValue < 295.0f)&&(HeadingValue >= 250.0f))
        {
          STM_EVAL_LEDOn(LED6);
          STM_EVAL_LEDOff(LED9);
          STM_EVAL_LEDOff(LED10);
          STM_EVAL_LEDOff(LED8);
          STM_EVAL_LEDOff(LED3);
          STM_EVAL_LEDOff(LED5);
          STM_EVAL_LEDOff(LED4);
          STM_EVAL_LEDOff(LED7);
        }       
        else  if ((HeadingValue < 340.0f)&&(HeadingValue >= 295.0f))
        {
          STM_EVAL_LEDOn(LED8);
          STM_EVAL_LEDOff(LED6);
          STM_EVAL_LEDOff(LED10);
          STM_EVAL_LEDOff(LED7);
          STM_EVAL_LEDOff(LED9);
          STM_EVAL_LEDOff(LED3);
          STM_EVAL_LEDOff(LED4);
          STM_EVAL_LEDOff(LED5);
        }
      }
      else
      {
        /* Toggle All LEDs */
        STM_EVAL_LEDToggle(LED7);
        STM_EVAL_LEDToggle(LED6);
        STM_EVAL_LEDToggle(LED10);
        STM_EVAL_LEDToggle(LED8);
        STM_EVAL_LEDToggle(LED9);
        STM_EVAL_LEDToggle(LED3);
        STM_EVAL_LEDToggle(LED4);
        STM_EVAL_LEDToggle(LED5);
        /* Delay 50ms */
        Delay(5);
      }





Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Очередная дискавери. Уже хачу!
СообщениеДобавлено: 24 дек 2012, 23:55 
Не в сети
Аватара пользователя

Зарегистрирован: 10 дек 2010, 13:16
Сообщения: 4995
Откуда: Красногорск МО
прог. языки: C, Python, wiring/processing
ФИО: Андрей
круто
код не читал, но идея такая: у тебя есть направление на север, но ты не знаешь, как ты спозиционирован по отношению к планете. Ты это пытаешься вычислить.

_________________
Мой волшебник это я сам. Всю архитектуру программы придумал лично, а ребята помогли воплотить её. Я бы и сам мог написать, но лень учить язык и его конструкции.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 127 ]  На страницу Пред.  1, 2, 3, 4, 5, 6, 7, 8, 9  След.

Часовой пояс: UTC + 4 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 0


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
phpBB SEO