roboforum.ru

Технический форум по робототехнике.

Python на STM32

ARM7, ARM9, ARM11 etc.

Re: Python на STM32

Сообщение Flexz » 07 ноя 2011, 22:25

Он имел ввиду A7/A9
Ваш Кэп
Flexz
 
Сообщения: 47
Зарегистрирован: 27 авг 2011, 14:05

Re: Python на STM32

Сообщение EdGull » 08 ноя 2011, 10:43

кстати, т.к. я питона в глаза не видел, то можете показать как на нем будет выглядеть поморгать светодиодом?
Аватара пользователя
EdGull
 
Сообщения: 10211
Зарегистрирован: 28 дек 2004, 20:33
Откуда: Тольятти
Skype: Ed_Gull
прог. языки: Bascom AVR Basic
ФИО: Гуль Эдуард Викторович

Re: Python на STM32

Сообщение Grem » 08 ноя 2011, 11:16

И как и чем собрать в *.hex.
"There is nothing better than sliding down snow and flying through the air" (с) Shane McConkey.
Lieber ein Brett am Fuß als eins vorm Kopf, aber lieber ein Brett vorm Kopf als zwei am Fuß.
Аватара пользователя
Grem
 
Сообщения: 1530
Зарегистрирован: 16 май 2009, 12:50
Откуда: Россия
прог. языки: Java, C

Re: Python на STM32

Сообщение dccharacter » 08 ноя 2011, 11:18

EdGull писал(а):кстати, т.к. я питона в глаза не видел, то можете показать как на нем будет выглядеть поморгать светодиодом?

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

Re: Python на STM32

Сообщение EdGull » 08 ноя 2011, 12:06

потому что...
EdGull писал(а):есть предположение что писать код на питоне будет простой и быстрый
Аватара пользователя
EdGull
 
Сообщения: 10211
Зарегистрирован: 28 дек 2004, 20:33
Откуда: Тольятти
Skype: Ed_Gull
прог. языки: Bascom AVR Basic
ФИО: Гуль Эдуард Викторович

Re: Python на STM32

Сообщение svp » 08 ноя 2011, 13:56

EdGull писал(а):как на нем будет выглядеть поморгать светодиодом?

В самом тривиальном виде что-то вроде такого:
Код: Выделить всёРазвернуть
import stm32, time

while True:
    stm32.pin3.set(1)
    time.sleep(0.2)
    stm32.pin3.set(0)
    time.sleep(0.2)

Я ещё не разбирался как конкретно работает этот питон-на-чипе, но в hex программы, скорее всего, конвертировать не придётся. Программа на питоне может быть представлена в двух видах: текст и байткод. Полная аналогия с Java. Для большого компа не важно что запускать, байткод или текстовую прогу. Байткод из текста генерируется налету и кладётся рядом в соседнем файле. Возможно для экономии ресурсов контроллера подавать ему мы будем готовый байткод.
Прошивка контроллера будет осуществляться один раз. В него будет записан интерпретатор и, скорее всего, как-то будет настроен автозапуск питоновских файлов из какого-то источника. Например флашка, или внутренняя флеш-память.
Это чисто теоретически. Как устроен stm, сколько у него памяти, когда и как в неё можно писать я ещё не разбирался.
Зато можно пофантаззировать, как можно завернуть низкоуровневый код работы с контроллером в чудесный синтаксический сахар питона.
Код: Выделить всёРазвернуть
import time, stm32, robots, leds, motors, servo
# модуль для работы с параллельными потоками
import thread

# Описание нашего особенного робота. Он потомок обычного гусеничного.
class MyPrettyRobot(robots.TrackedBot):
    def __init__(self):
        # инициализация атрибутов предка
        super(robots.TrackedBot, self).__init__()
        # назначение моторам управляющих пинов на ШИМ и реверс
        self.left_motor.pwm_channel = stm32.pin1
        self.right_motor.pwm_channel = stm32.pin3
        self.left_motor.reverse_channel = stm32.pin2
        self.right_motor.reverse_channel = stm32.pin4
        self.power_led.channel = stm32.pin5
       
        # добавление нового шагового двигателя для поворота башни
        self.head_motor = motors.StepMotor(
            # сигналы на шаг против и по ч.с.
            lr_channel=(stm32.pin6, stm32.pin7),
            step_angle=360.0/100)

        # добавление какого-нибудь серво-мотора
        self.tail = servo.SimpleAB(
            angles=(-30, 30), # предельные углы
            pwm_channel=stm32.pin8, # канал управления
            pwm_delta=30, # период ШИМ, например в мс
            pwm_levels=(10, 90)) # скважности крайних положений

        # Цветные фары
        self.headlight = leds.RGB(
            channel=(stm32.pin9, stm32.pin10, stm32.pin11),
            pwm_delta=30)

        self.tail_swing_interval = 2.0 # интервал мотыляния хвостом 2с
        # поток для мотыляния хвостом
        self.swinging = thread.start_new(self.doSwing, (self,))

    def doSwing(self):
        while True:
            # назначаем хвосту угол в процентах, вычесленных от времени
            self.tail.asPercent = (
                (stm32.timer.s % self.tail_swing_interval) /
                self.tail_swing_interval * 2 - 1) * 50 + 50

            # если хвост в верхней своей точке +-5 градусов
            if -5 < self.tail.angle < 5:
                # плавно зажигаем фары пурпурным цветом
                self.headlight.color = leds.PURPLE
                self.headlight.brightness = (5-abs(self.tail.angle))*20
            else: # иначе гасим их
                self.headlight.brightness = 0
            # спим немножко
            time.sleep(self.tail_swing_interval/64)
               
Последний раз редактировалось Vooon 09 ноя 2011, 10:29, всего редактировалось 1 раз.
Причина: [code=python]
Аватара пользователя
svp
 
Сообщения: 42
Зарегистрирован: 13 дек 2005, 16:01
Откуда: Белгород
прог. языки: object pascal, c++, Lisp, Prolog

Re: Python на STM32

Сообщение dccharacter » 08 ноя 2011, 14:03

Код: Выделить всёРазвернуть
while(1)
{
GPIO_SetBits(GPIOA,GPIO_Pin_9);
delayms(300000);
GPIO_ResetBits(GPIOA,GPIO_Pin_9);
delayms(300000);
}


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

Re: Python на STM32

Сообщение svp » 08 ноя 2011, 14:14

Это чисто гипотетичесий код. Я не знаю какова будет обёртка, но всё что написано вполне правдоподобно. Например пины могут называться как-то иначе, но сами по себе в обёртке они могут являться объектами, знающими своё состояние, статус, назначение.
Очевидно, что со временем повится масса абстрактных объектов, вроде моторов, светодиодов, сервомоторов и шаговиков, которым в конструктор (инициализирующую функцию) будут передаваться все данные для их полноценной работы.
Во втоором примере мы сервомотору указали pin8 -- ножку на которую он подключен ибудет получать с неё ШИМ сигнал. Когда мы создали экземпляр серво-привода и указали ему пин, этот экземпляр, создаваясь, сам зарегистрировал таймер, сконфигорировал ногу на ШИМ, и организовал нужную скважность и всё такое. Естественно под всем этим зарыто много кода в модулях. Но этот код уже не придётся писать по многу раз.

Не знаю насколько это всё будет эффективно и управляемо. Наверно всё зависит от того, насколько будет продумана внутренняя инфраструктура, на которую навешивается весь этот сахар.

Добавлено спустя 38 секунд:
dccharacter писал(а):А это на си :-)

Круто=) А второй пример?=)

Добавлено спустя 4 минуты 33 секунды:
Вообще я не буду сейчас убеждать, что питон в контроллерах -- это хорошая идея. Я, честно сказать, не знаю. Кода от этого меньше не станет. Вернее его можно красиво и читабельно разделить на слои и абстракции, но насколько мощным окажется контроллер, чтобы прощать нам более высокоуровневый подход к управлению собой. Если в C мы использовали миллисекунды и моглиспуститься вплоть до указателей и тактов, то питон, при очень жестких ограничениях в памяти и скорости может оказаться слоном в посудной лавке на этом крохотном процессоре.
Аватара пользователя
svp
 
Сообщения: 42
Зарегистрирован: 13 дек 2005, 16:01
Откуда: Белгород
прог. языки: object pascal, c++, Lisp, Prolog

Re: Python на STM32

Сообщение Strijar » 08 ноя 2011, 14:15

Python очень медленный. Из скриптовых быстрей чем Lua нет. Он и проще намного и мощней. Есть даже порт на ARM7 - eLua
Аватара пользователя
Strijar
 
Сообщения: 664
Зарегистрирован: 28 авг 2006, 17:09
Откуда: Всеволожск (СПб)
прог. языки: С, C++, Python, Lua, VHDL, Verilog, Forth
ФИО: Олег Белоусов

Re: Python на STM32

Сообщение svp » 08 ноя 2011, 14:22

Strijar писал(а):Он и проще намного и мощней.

Что вы подразумеваете под этой забавной фразой (насчет мощнее)?
Аватара пользователя
svp
 
Сообщения: 42
Зарегистрирован: 13 дек 2005, 16:01
Откуда: Белгород
прог. языки: object pascal, c++, Lisp, Prolog

Re: Python на STM32

Сообщение dccharacter » 08 ноя 2011, 14:25

Ну на си же можно все то же самое сделать
Пока не понимаю прикола. Может быть от того, что в принципе не знаю и не понимаю разные парадигмы программирования (о как сказал).
Но имхо _меньше_ изучить - не получится
_проще_ не выйдет

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

Re: Python на STM32

Сообщение svp » 08 ноя 2011, 15:19

dccharacter писал(а):Ну на си же можно все то же самое сделать

Конечно! На любом Полном по Тюрингу языке можно сделать что угодно. Слышали про такой язык, как Brainfuck?

dccharacter писал(а):Пока не понимаю прикола. Может быть от того, что в принципе не знаю и не понимаю разные парадигмы программирования (о как сказал).

Точно. Дело в том, что со времён Си постепенно происходила своего рода эволюция языков программирования, концепций и подходов. Благодаря ей в современных языках программирования гораздо ниже порог входимости. Появились концепции, позволяющие работать со структурами данных, как с объектами реального мира.

dccharacter писал(а):Но имхо _меньше_ изучить - не получится
_проще_ не выйдет

В том-то и дело, что если с нуля, то выйдет и проще и меньше. А если ломать старые догматы... Питон -- это язык с очень высокой интроспекцией.
Даже если программист не знает, что за объект он получил и что с ним можно сделать, у него есть в распоряжении система автодокументации, встроенная на уровне языка. Достаточно написать help(любой_объект) и напечатается подробное описание класса и всех методов с указанием какие нужны оргументы и для чего.

dccharacter писал(а):Ты вот там объектики всякие и т.д. делаешь. Но что мешает на си в функцию передать указатель на структуру? Все то же самое получится...

Ну и какой код получается более читабельным м понимабельным? Да, в сущности указатель на структуру и отдельная функция -- это тот же объект, но "по отдельности".
До процедурного стиля был ассемблер, а ещё раньше первокарты с машинными кодами. И на них тоже можно было программировать. И суть та же. Просто не так читабельно. Это вопрос низкого/высокого уровня. На ассемблере тоже писали очень крутые программы. А на современных ассемблерах можно вполне себе полноценное десктопное приложение с окнами и графикой написать. Тем не менее народ переезжает на уровни повыше.

Добавлено спустя 25 минут 37 секунд:
Тут же ещё вон какое дело. Перейдя с ассемблера на Си в контроллерах мы повысили уровень (читабельность, писабельность, разбирабельность), а вместе с тем немного понизили наш контроль ситуации в коде (теперь мы не сами решаем, где и как в памяти хранятся константы, в какие регистры попадают значения). Так и с переходом на питон.
Если питон на какой-нибудь атмеловской восьмибитке с клочком памяти -- это форменный слон в посудном киоске (ни пошевелиться, ни встать, но в принципе дышать можно). Си в этом случае -- это толстая продавщица. А ассемблер м-м-м... тощий таджык? Грациозная фея?=). Что-то я увлёкся аналогиями. Но теперь уж отступать поздно.
На контроллере рангом поввыше (магазин!) толстая продавщица (Си) чувствует себя отлично, а слон по-прежнему громит всё. В торговом центре, в принципе, слон особых разрушений уже не принесёт.
Эти примеры ничего не говорят о полезных качествах слона или продавщицы. Разве что если провести аналогию с грузоподъёмностью? Чем больше строк кода, тем тяжелее его держать на языке низкого уровня. При п риближении некоторого порогового значения программист просто теряет контроль над своим кодом. Не может запомнить как и что устроено из-за малого уровня абстрации. Конечно качество кода тут тоже сказывается. Качественного кода можно уложить до порога немного больше. Языки высокого кровня поднимают этот самый порог на порядки.
Аватара пользователя
svp
 
Сообщения: 42
Зарегистрирован: 13 дек 2005, 16:01
Откуда: Белгород
прог. языки: object pascal, c++, Lisp, Prolog

Re: Python на STM32

Сообщение EdGull » 08 ноя 2011, 15:23

а тем более, если написанное SVP наложить на большое количество программеров участвующих в разработке, то в нашем случае Си это хорошо, а Питон лучше...
Аватара пользователя
EdGull
 
Сообщения: 10211
Зарегистрирован: 28 дек 2004, 20:33
Откуда: Тольятти
Skype: Ed_Gull
прог. языки: Bascom AVR Basic
ФИО: Гуль Эдуард Викторович

Re: Python на STM32

Сообщение dccharacter » 08 ноя 2011, 15:30

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

Re: Python на STM32

Сообщение Grem » 08 ноя 2011, 15:31

dccharacter писал(а):Пока не понимаю прикола.
Но имхо _меньше_ изучить - не получится
_проще_ не выйдет

Cам не вижу смысла, поэтому запасся попкорном :)
Благодаря ей в современных языках программирования гораздо ниже порог входимости

Это и не есть хорошо.
Товарищ svp не просто теоретик, он идеалист-теоретик и я не удивлюсь если он свой ИИ пишет :)
"There is nothing better than sliding down snow and flying through the air" (с) Shane McConkey.
Lieber ein Brett am Fuß als eins vorm Kopf, aber lieber ein Brett vorm Kopf als zwei am Fuß.
Аватара пользователя
Grem
 
Сообщения: 1530
Зарегистрирован: 16 май 2009, 12:50
Откуда: Россия
прог. языки: Java, C

Пред.След.

Вернуться в ARM

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

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