Какое значение 1 2 вернет выражение в среде idle
Перейти к содержимому

Какое значение 1 2 вернет выражение в среде idle

  • автор:

Как использовать IDLE (для версии 0.5)

IDLE — это новая среда разработки для Python, которая впервые вышла в свет вместе с версией Python 1.5.2. Она разрабатывается Гвидо ван Россумом при поддержке, среди прочих, Тима Петерса, Марка Хэммонда, Моше Задка, а сейчас еще и Джереми Хилтона.

Название представляет собой аббревиатуру выражения » I ntegrated D eve L opment E nvironment» — «интегрированная среда разработки» (хотя, вероятно, оно связано и с фамилией известного британского комика из популярного британского комедийного шоу). В настоящее время IDLE успешно работает на двух платформах: Unix и Windows.

Окно Python Shell (Оболочка Python) обеспечивает интерактивный режим работы Python. File Editor (Редактор файлов) позволяет создавать новый или просматривать и редактировать уже существующий файл с кодом Python. Есть функция Path Browser (Браузер путей) для нахождения адреса имеющихся файлов модулей, а также простой Class Browser (Браузер классов) для поиска методов классов. В диалоге Find in Files (Найти в файлах) имеется гибкая функция поиска, позволяющая находить в ваших и/или системных файлах определенные идентификаторы или любые другие текстовые фрагменты. Наконец (хотя эта функция еще находится в процессе разработки), есть Debug Control Panel (Панель управления отладкой) , выполняющая символьную отладку программ на Python.

Установка и запуск IDLE

IDLE 0.4 был частью дистрибутива Python и устанавливался автоматически во время установки Python 1.5.2. Нужно было только ответить «да» на вопрос об установке Tcl/Tk (поскольку это необходимо для запуска IDLE).

Однако, здесь будет описываться версия IDLE 0.5 (описание версии IDLE 0.4 см. в соответствующей версии этого документа). IDLE 0.5 может быть загружен со следующей страницы:
Загрузочная страница IDLE
Загруженный архив распаковывается в каталог «idle». Он может непосредственно заменить предыдущую версию IDLE 0.4. Например на Windows вы можете переместить папку:
C:\Program Files\Python\Tools\idle
в:
C:\Program Files\Python\Tools\idle4
и переместить/скопировать на ее место новую директорию idle. Именно она будет вызываться из меню Пуск и запускаться в начале работы с версией Python 1.5.2.

Запуск IDLE на Windows

Найдите пункт IDLE (Python GUI) в подменю Python 1.5 из папки Программы вашего меню Пуск и щелкните по нему мышкой. Другой вариант: найти исполняемый файл «idle.pyw» ( то есть в C:\Program Files\Python\Tools\idle ) и дважды щелкнуть по нему мышью. Должно появиться следующее окно:

Если окно не появляется, возможно, что в PATH неправильно задан Tcl/Tk. Чтобы исправить это в Windows 95/98, откройте в Блокноте файл C:\autoexec.bat и найдите строку, определяющую вашу переменную PATH, то есть:

Добавьте » ;C:\PROGRA~1\Tcl\bin » в эту строчку, то есть:

Убедитесь, что между старым содержимым строки и новым добавлением стоит одна точка с запятой. Сохраните файл. Чтобы изменения вступили в силу, придется перезагрузить компьютер.

В Windows NT можно модифицировать PATH через Панель управления системы.

Также IDLE может не запуститься, если в каталоге ‘\windows\system’ находятся не те DLL-библиотеки Tcl/Tk (то есть из более старой версии Tcl, ранее установленной в системе). Попробуйте удалить все файлы, связанные с Tcl и Tk, из этой папки. Если проблемы все еще остаются, смотрите пост Тима Петерса о проблемах установки Tcl/Tk.

Запуск IDLE на UNIX

На Unix просто наберите «idle» в командной строке. Должно появиться окно, похожее на то, что показано выше. (Если оно не появляется, поищите сценарий «idle» в каталоге Tools/idle дистрибутива Python.)

Использование окна оболочки Python Shell

Окно Python Shell обеспечивает доступ к интерактивному режиму Python. Оно откроется при запуске IDLE.

Как и в прямом интерактивном режиме, вы набираете выражение Python после приглашения >>> и затем нажимаете клавишу Enter , направляя команду в интерпретатор Python. В отличие от обычного интерактивного режима в середине многострочного составного выражения не появляется промежуточного приглашения ( . ).

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

Подсветка синтаксиса

По мере набирания кода он подсвечивается в соответствии с синтаксическими типами Python.

Как показано выше, комментарии отображаются красным цветом, строки — зеленым , определения — синим , ключевые слова Python — оранжевым и вывод интерпретатора — синим .

Это в основном все, с чем обычно приходится сталкиваться. Однако, между разными типами вывода существует дополнительная дифференциация.

Как показано выше, вывод в консоль (то есть, трейсбэки [ Traceback — грубо говоря, информация об ошибке.- Прим.пер. ]) коричневого цвета, а вывод стандартной ошибки [ Точнее, вывод стандартным устройством вывода сообщений об ошибках.- Прим.пер. ] — красного [ В современных версиях IDLE оба типа ошибок выводятся красным цветом.- Прим.пер. ].

Отступы

Предусмотрена автоматическая поддержка отступов:

Если набрать приведенный выше пример, вы обнаружите, что при нажатии клавиши Enter после операторов def или while следующая строка автоматически сдвигается (как при вводе нового блока). Внутри блока выравнивание осуществляется автоматически по предыдущему выражению (в примере выше это происходит с выражением num = num — 1 ). Наконец, каждое нажатие клавиши Backspace возвращает каретку к предыдущему уровню отступа (в примере выше это нужно сделать перед вводом выражения return ). После выражений pass , return , break , continue или raise возвращение к прежнему отступу происходит автоматически.

Это все, что, как правило, нужно знать об отступах при работе в окне оболочки . Возможно изменять величину отступа (здесь по умолчанию она равна восьми пробелам), а также сдвигать на величину отступа вправо/влево выделенную область. Эти команды описаны в настоящем документе в подразделе Редактирование файла (потому что их чаще используют в окне File Editor ).

Перемещение по буферу

Вы можете перемещаться по буферу [ Смысл термина «буфер», скажем в редакторе Emacs, поясняется, например, здесь.- Прим. пер. ], используя следующие комбинации клавиш.

Действие Клавиши Unix Клавиши Windows Меню
Сдвинуться на одну позицию влево стрелка влево, Ctrl-b стрелка влево, Ctrl-b
Сдвинуться на одну позицию вправо стрелка вправо стрелка вправо
Переместиться в начало текущей строки клавиша Home, Ctrl-a клавиша Home, Ctrl-a
Переместиться в конец текущей строки клавиша End, Ctrl-e клавиша End, Ctrl-e
Переместиться на одну строчку вверх стрелка вверх, Ctrl-p стрелка вверх, Ctrl-p
Переместиться на одну строчку вниз стрелка вниз стрелка вниз
Переместиться на одну страницу вверх клавиша Page Up клавиша Page Up
Переместиться на одну страницу вниз клавиша Page Down клавиша Page Down
Переместиться в начало буфера клавиша Ctrl-Home клавиша Ctrl-Home
Переместиться в конец буфера клавиша Ctrl-End клавиша Ctrl-End
Переместить выделение в центр окна Ctrl-l Ctrl-l
Найти заданный элемент Ctrl-u Ctrl-u Ctrl-s Ctrl-f Edit:Find.
Снова найти уже заданный элемент Ctrl-u Ctrl-s Ctrl-g, F3 Edit:Find again
Найти выделение Ctrl-s Ctrl-F3 Edit:Find selection
Перейти на заданную строчку Alt-g, Esc-g Alt-g Edit:Go to line

[ В разделе меню Options/Configure IDLE (вкладка Keys) можно переключаться между встроенными наборами клавиатурных комбинаций, настроенных под разные платформы, например под Windows или Unix. Кроме того, можно создать и свой собственный, пользовательский набор.- Прим. пер. ]

Функция Edit:Find более подробно описана в этом документе в разделе Поиск/Замена. Команда Edit:Go to line вызывает диалог, запрашивающий номер строки, к которой нужно совершить переход. Остальные функции понятны без комментариев.

Основы редактирования

В следующей таблице перечисляются сочетания клавиш, используемые при редактировании буфера.

Действие Клавиши Unix Клавиши Windows Меню
Удалить символ слева от курсора клавиша Backspace клавиша Backspace
Удалить символ справа от курсора клавиша Delete, Ctrl-d клавиша Delete, Ctrl-d
Вырезать выделение Ctrl-w Ctrl-x Edit:Cut
Вставить в буфер Ctrl-y Ctrl-v Edit:Paste
Копировать выделение Alt-w, Esc-w Ctrl-c Edit:Copy
Выделить весь буфер Alt-a, Esc-a Ctrl-a Edit:Select All
Заменить выделение Ctrl-r Ctrl-h Edit:Replace.
Дополнение (завершение) слова Alt-/ Alt-/ Edit:Expand word
Предыдущая команда в истории команд Esc-p, Alt-p Alt-p
Следующая команда в истории команд Esc-n, Alt-n Alt-n
Отменить последнее изменение Ctrl-z Ctrl-z Edit:Undo
Вернуть последнее изменение Alt-z, Esc-z Ctrl-y Edit:Redo

Выведите на экран меню Edit в развернутом виде, и перед вами окажется список всех сочетаний клавиш из этого меню.

В нем есть и кое-какие другие операции (т.е. для «закомментирования» и сдвига фрагментов кода, превращения символов табуляции в пробелы). Но поскольку их чаще используют в редакторе файлов , описание этих операций перенесено в соответствующий раздел этого документа.

Любое однострочное выражение Python или многострочное составное выражение (такое как цикл или функция, или определение класса) может быть вставлено во всей своей полноте. Однако, если в вашей вставке содержится больше одного выражения Python, интерпретатор после нажатия Enter обработает только самое первое.

Функция замены (replace) описана далее в разделе Поиск/Замена данного документа.

Поочередное использование функций undo и redo позволяет отменять и возвращать изменения, сделанные в буфере.

Завершение слов

При наборе комбинации Alt-/ вызывается механизм завершения слов.

В приведенном выше примере в последней строке нет необходимости полностью набирать слово divisible . Можно просто напечатать d и Alt-/ , после чего оно будет завершено автоматически.

Завершение базируется на словах, которые уже были введены в буфер. Первым вариантом будет подходящее слово, которое вводилось последним. Последовательно нажимая Alt-/ , можно перебрать и остальные возможности. Так, если в вышеприведенном примере после ввода n три раза нажимать Alt-/ , будет предлагаться сначала num , потом not и, наконец, numList . Если начинать с nu , число вариантов сократится до num и numList .

История команд

Другим приятным свойством, которое стоит использовать (учитывая, сколько сил он экономит при наборе кода), является механизм истории команд.

Выбрав одну из предшествовавших команд и поместив ее вниз либо перебором (с помощью Alt-p и Alt-n ), либо непосредственным выделением, вы сможете отредактировать ее по своему усмотрению перед нажатием клавиши Enter , которое отправит команду на выполнение в интерпретатор.

Подсказки к функциям/методам

При наборе вызова функции или метода после открытой скобки под текущей строкой появляется маленькое окошко, «подсказывающее», какие ожидаются аргументы.

Окошко остается до тех пор, пока не будет закрыта скобка. Это работает для встроенных функций, любых функций или методов (конструкторов классов) из модулей библиотеки Python, а также для любых пользовательских функций или методов. Однако, это не работает для методов списка, кортежа или словаря.

Для функций или методов, определенных пользователем, подсказка выведет названия параметров, которые были вами заданы. Как показано выше, выводится также и первая (итоговая) строка документации функции или метода. Таким образом можно получить информацию о типах аргументов и возвращаемого значения.

Особые вопросы

Поведение окна оболочки IDLE иногда отличается от обычного интерактивного режима Python. Прежде всего, как уже отмечалось, за один раз можно вставить только одно выражение Python. Перенаправление стандартного ввода и вывода также не всегда происходит как ожидается. Наконец, как следствие реализованной модели событий Tkinter, использование Ctrl-c не всегда приводит к прерыванию исполнения сегмента кода. В ситуациях, когда эти различия становятся принципиальными, всегда можно вернуться к обычному интерактивному режиму Python.

Поскольку IDLE сравнительно новая программа и находится еще в процессе становления, в некоторых случаях использование добавочных окон в IDLE может привести к появлению ошибки стандартного вывода в окне оболочки. Обычно это никак не влияет на работу программы, за исключением того, что нужно лишний раз нажимать клавишу Enter , чтобы появилось новое приглашение командной строки.

Если вы набираете пример кода Tkinter, не делайте последней строкой «mainloop()», которая, в общем-то, необходима при работе из командной строки. Но в оболочке IDLE эта команда приведет к немедленному зависанию, поскольку сам IDLE уже находится в цикле событий Tk.

Наконец, если закрыть окно оболочки, не выходя из IDLE (т.е. еще остаются другие открытые окна), а затем открыть новое окно оболочки, придется заново импортировать и перезагружать каждый модуль, который уже был импортирован, чтобы сделанные в нем и сохраненные изменения вступили в силу. Начать все с чистого листа можно, полностью выйдя из IDLE (с помощью команды Exit ( Выход ) в меню File ).

Использование редактора файлов

Редактор файлов IDLE дает возможность создавать новые, просматривать и/или редактировать существующие файлы с кодом Python.

Открытие файла

Есть несколько способов, как вызвать редактор файлов.

Действие Клавиши Unix Клавиши Windows Меню
Открыть новое окно Ctrl-x Ctrl-n Ctrl-n File:New Window
Открыть существующий файл Ctrl-x Ctrl-f Ctrl-o File:Open.
Открыть модуль Ctrl-x Ctrl-m Alt-m File:Open Module.

Команда New Window (новое окно) откроет пустое окно (т.е., когда вы хотите писать код Python с нуля). Команда Open (открыть) позволяет найти и открыть любой файл на жестком диске, в то время как при использовании команды Open Module (открыть модуль) достаточно ввести название файла модуля (т.е. shelve или shelve.py ), находящегося по адресу, указанному в списке каталогов, в которых ведется поиск модуля во время его импорта ( sys.path ), и нужный файл будет автоматически найден и открыт.

Редактор файлов также может быть вызван из браузера путей (Path Browser) или при использовании отладчика (Debugger), как это описывается ниже в этом документе в соответствующих разделах.

Во всех случаях в заголовке нового окна редактора файлов будут название файла и его путь (заголовок может быть и Untitled (без имени) , если речь идет о новом, ни разу не сохранявшемся файле).

Редактирование файла

Набираемый в этом окне код будет подсвечиваться так же, как и в окне оболочки . Точно так же автоматически будут делаться отступы. Однако здесь отступ будет представлять собой четыре пробела (поскольку это стандарт для файлов с кодом Python), в то время как в окне оболочки отступ — это tab . Все операции и клавиатурные сокращения для перемещения и редактирования буфера, описанные в разделе Shell Window этого документа, здесь также могут использоваться (включая вырезание, копирование, вставку и завершение слов) .

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

Действие Клавиша Меню
Сдвинуть область Ctrl-] Format:Indent Region
Отменить сдвиг области Ctrl-[ Format:Dedent region
Сделать область комментарием Alt-3 Format:Comment out region
«Раскомментировать» область Alt-4 Format:Uncomment region
Заменить пробелы в области символами табуляции Alt-5 Format:Tabify region
Заменить символы табуляции в области пробелами Alt-6 Format:Untabify region
Форматировать выделение как абзац Alt-q Format:Format Paragraph

Функции отступа очевидно полезны при добавлении или удалении из кода вложенных конструкций. Функция Tabify region превращает пробелы, стоящие в начале строки, в символы табуляции (из 8 пробелов получается 1 символ табуляции). Функция Untabify region конвертирует все символы табуляции в заданной области в соответствующее число пробелов. Наряду с функциями отступа они полезны для преобразования к стандартному формату кода, копируемого из различных источников, таких как документы или веб-страницы. Функция Format Paragraph (форматировать абзац) очень похожа на команду редактора Emacs fill-region (заполнить область); она полезна при работе со строками документации.

Также возможно изменять тип и ширину автоматических отступов.

Действие Клавиши Unix Клавиши Windows Меню
Переключить режим использования символов табуляции Alt-t Alt-t Format:Toggle Tabs
Изменить величину отступа Alt-u Alt-u Format:New indent width

Если включен переключатель Tabs , отступ заданной ширины создается в виде совокупности символов табуляции и пробелов. Если он отключен, применяются только пробелы. В окне редактора файлов по умолчанию переключатель Tabs отключен, а ширина отступа равна четырем пробелам. В окне оболочки Tabs включен, а ширина отступа составляет восемь пробелов (таким образом отступ создается одним восьмисимвольным символом табуляции).

Сохранение файла

Если заголовок буфера заключен в звездочки * , это значит, что текст буфера был изменен с момента его последнего сохранения на диск. Есть три команды для сохранения файла.

Действие Клавиши Unix Клавиши Windows Меню
Сохранить Ctrl-x Ctrl-s Ctrl-s File:Save
Сохранить как Ctrl-x Ctrl-w Ctrl-Shift-s File:Save As.
Сохранить копию как Ctrl-x Ctrl-y Alt-Shift-s File:Save Copy As.

Первые две суть стандартные «сохранить под существующим именем» и «сохранить (возможно) под новым именем». Третья — то же самое, что и вторая, только при этом буфер не переименовывается и привязывается к новому имени файла.

Запуск файла

Модуль можно создавать постепенно, сначала импортировав, а затем последовательно перезагружая его в окне оболочки и проверяя по мере внесения изменений. Этого можно добиться, выполняя импортирование или перезагрузку из окна оболочки или используя команду импортирования модуля Import module из самого редактора файлов .

Действие Клавиша Меню
Импортировать/перезагрузить модуль F5 Edit:Import module
Запустить как сценарий Ctrl-F5 Edit:Run script

Функция Import module импортирует или перезагружает модуль, перенаправляя вас в окно оболочки (открывая его, если нужно).

Еще одна возможность для разработчиков — добавить в код функцию для тестирования, которое нужно провести, и воспользоваться командой Run script (запуск сценария). Вывод снова будет перенаправлен в окно оболочки . Однако, код будет запущен как сценарий (т.е. со значением __name__ , равным __main__ , а не через имя модуля).

Команда Run script выведет в окно оболочки следующее.

Это дает возможность работать в сокращенном цикле «внесения изменений в код»: «нажмите Ctrl-s » (чтобы сохранить внесенные изменения), а затем «нажмите Ctrl-F5 » (чтобы посмотреть результаты).

Конечно, таким образом можно тестировать и файлы, которые фактически являются сценариями. В настоящее время при запуске команды Run script нельзя задавать опции и параметры командной строки. Тем не менее, всегда можно вставить в свой код простую функцию для тестирования, в которой переменной sys.argv присваивается любое требуемое значение (симулируя вызов командной строки) перед вызовом обычной функции сценария верхнего уровня.

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

Также, разрабатывая приложение Tkinter, не забывайте «закомментировать» вызов «mainloop()» при запуске его из IDLE.

Использование диалогов поиска/замены

Эти диалоги в общем-то интуитивно понятны, но все-таки коротко их опишем.

Поиск

Опция Find. из меню Edit выводит на экран показанное выше диалоговое окно. Установки по умолчанию — это down (следующее) и Wrap around (продолжить с начала) , означающие, что поиск в буфере идет по направлению к концу от текущего положения курсора и что, если конец буфера будет достигнут раньше, чем будут найдены искомые символы, поиск продолжится с начала этого файла. Если выбрана опция regular expression (регулярное выражение) , введенные вами символы будут расцениваться программой как регулярное выражение. Опции Match case (учитывать регистр) и Whole word (только слово целиком) действуют так, как вы и предполагаете.

Замена

Опция Replace. из меню Edit выводит на экран приведенное выше диалоговое окно. Оно похоже на диалоговое окно поиска Search Dialog за исключением поля ввода Replace with (заменить на) и четырех кнопок в правом верхнем углу. Все это не должно вызывать вопросов.

Поиск в файлах (Find in Files)

Опция Find in Files. из меню Edit выводит на экран приведенное выше диалоговое окно. Если оно запускается из окна оболочки (как это было в случае, показанном на рисунке), по умолчанию будет проведен поиск во всех файлах с расширением *.py во всех каталогах, записанных в переменной поиска Python sys.path . При запуске из редактора файлов поиск по умолчанию будет проводиться в каталоге, где расположен редактируемый файл, и во всех его подкаталогах. Каталог для поиска можно задать вручную, а, чтобы ограничить поиск единственной директорией, достаточно удалить галочку в окошечке Recurse down subdirectories .

С помощью этой функции можно найти, где определен тот или иной класс либо метод, и/или подыскать примеры его использования в системной библиотеке или коде пользователя. В приведенном выше примере ищется определение визуального элемента управления Tkinter Text , а также, где он используется. Найденное показано в виде списка в окне вывода Output Window .

Открыть в окне редактора файл с определением элемента управления или любой файл, где он использовался, можно, дважды щелкнув мышкой по соответствующей строке из данного списка.

Использование браузера путей

Браузер путей ( Path Browser ) дает возможность искать модули в каталогах, перечисленных в переменной sys.path интерпретатора Python.

Двойной щелчок мышкой по каталогу выводит на экран список модулей. Двойной щелчок по одному из них (т.е. swallow.py на картинке выше) загружает этот файл в окно редактора файлов File Editor , а также отображает список классов в этом файле. Двойной щелчок по одному из классов (т.е. Swallow на картинке выше) выводит список методов, определенных для этого класса (а также перемещает вас к началу определения этого класса в окне File Editor ). Если дважды щелкнуть по методу, откроется редактор файлов, в том месте, где приводится описание этого метода. Также возможно один раз щелкнуть по нужному знаку «+» слева, чтобы перейти к следующему уровню в браузере путей без открытия окна редактора файлов .

Обратите внимание, что на платформе Windows в этой версии IDLE (из-за проблемы с нормализацией регистра символов), некоторые каталоги появляются в списке дважды.

Использование браузера классов

В этой версии применяется довольно простой браузер классов ( Class Browser ).

Он запускается из окна редактора файлов (используя либо опцию Class browser из меню File , либо комбинацию клавиш Alt-c ). Вначале показываются классы, определенные в этом файле (т.е. Swallow , African and European в примере выше). Если у какого-то класса есть классы-предки, они перечисляются в скобках после имени этого класса. Выбрав класс, можно узнать методы, «локально» определенные для этого класса (но не те методы, которые он наследует).

Использование механизма отладки

Механизм отладки в IDLE все еще находится в стадии разработки. Например, в настоящей версии для платформы Windows невозможно задать точки прерывания, что ограничивает его использование. В данной версии этого документа я лишь проиллюстрирую использование отладчика на коротком примере.

Простой пример

Начните с создания и сохранения простого модуля, приведенного выше.

  • Запустите окно оболочки , импортируйте модуль примера и задайте переменную numbers , как показано выше.
  • Затем включите опцию Debugger (отладчик) в меню Debug . Это должно привести к выводу панели управления отладкой Debug Control Panel и появлению надписи [DEBUG ON] в вашем окне оболочки (как показано выше)
  • Убедитесь, что в области конфигурации панели управления отладкой отмечены все четыре опции ( Stack (стек) , Source (код) , Locals (локальные переменные) и Globals (глобальные переменные) ).
  • Теперь наберите в окне оболочки вызов функции divisible (снова как показано выше).
  • Начните пошагово проводить вычисления (последовательно нажимая кнопку step (шаг) на панели управления отладкой ). По достижении модуля dvtest запустится редактор файлов с файлом dvtest.py , и строка, которая будет выполняться следующей, будет подсвечиваться голубым цветом. Также эта строчка будет показана в стековой области панели управления отладкой .
  • Когда вы в первый раз дойдете до строки » if not num % d » (т.е. она подсвечена голубым цветом в редакторе файлов и показана в области стека панели управления отладкой ), ваша панель управления отладкой должна выглядеть так, как показано ниже:

Панель управления отладкой (Debug Control)

Клавиши управления

В верхней левой части панели расположены пять кнопок управления.

  • Кнопка Go (запуск) запускает вычисления с текущей точки; остановятся они либо в самом конце, либо по достижении выражения, на котором была установлена точка прерывания.
  • Кнопка Step (который мы до сих пор пользовались) либо запускает на выполнение следующее выражение, либо осуществляет вход во вложенную функцию.
  • Нажатие кнопки Over приводит к выполнению текущего выражения полностью без остановки во вложенных функциях.
  • Кнопка Out запускает вычисления от текущей точки до конца текущей функции и выхода из нее.
  • Кнопка Quit (выход) прекращает выполнение текущего вычисления. При этом система все еще остается в режиме отладки (при следующем вычислении отладчик запустится снова). Чтобы выйти из режима отладки, выключьте опцию Debugger в меню Debug окна оболочки или нажмите кнопку закрытия («x» в правом верхнем углу) панели управления отладкой . Однако, если вы все еще находитесь в процессе отладки вычислений (а это так, если доступны кнопки панели управления отладкой), для выхода из режима отладки сначала придется прервать вычисления (т.е. нажать на кнопку Quit этой панели).

Установки конфигурации

Справа от кнопок находятся четыре опции установок конфигурации. В приведенном выше примере мы отметили их все четыре.

Включение установки Stack выводит на экран стек вызовов. В настоящем примере у нас два уровня. Первый — это вызов из консоли функции divisible , а второй демонстрирует тот факт, что мы находимся на строке » if not num % d » функции divisible .

Включение установки Source вызывает показ строки, которая выполняется в данный момент (подсвеченной голубым цветом), в окне редактора файлов . Если будут встречаться функции из новых файлов, будут запускаться новые окна редактора файлов . В этом примере у нас только одно окно редактора файлов, открытое для dvtest.py с подсвеченной текущей строкой.

Включение установки Local выводит на экран секцию локальных переменных на панели управления отладкой . В ней приводится алфавитный список имен и текущих значений этих переменных в данной точке вычислений. В приведенном выше примере у нас два таких параметра — numList и d наряду с локальной переменной num .

Наконец, включение установки Global выводит на экран секцию глобальных переменных на панели управления отладкой . В ней снова находится алфавитный список. В приведенном выше примере у нас есть четыре внутренних переменных: __builtins__ (словарь, содержащий такие штуки, как встроенные функции и исключения), __doc__ (значение которой — строка документации этого модуля), __file__ (текущий файл) и __name__ (имя текущего модуля) наряду с divisible (имя единственной функции этого модуля). Если бы были другие функции или в этой функции были заданы другие переменные модуля, они также присутствовали бы здесь. Переменная numbers , определенная в окне оболочки , не показывается, поскольку в Python используется статическая область видимости (statically scoped).

Любая из этих четырех установок может быть включена или отключена в любое время. Это приведет к появлению или исчезновению определенных разделов на панели управления отладкой . В показанном выше примере список глобальных переменных несет мало полезной информации, и, возможно, его лучше отключить, чтобы убрать с экрана лишнее.

Информация о состоянии

Под кнопками, но над областью стека располагается область состояния, которая отображается, даже если все остальные установки отключены. В приведенном выше примере она показывает: dvtest.py:4: divisible() , что означает: мы находимся на четвертой строке файла dvtest.py в функции divisible . Если встречается исключение, оно показывается под этой строкой и подсвечивается желтым цветом. Такой случай показан ниже, где мы пытаемся, набрав в окне оболочки 2/0 , провести это вычисление под контролем отладчика.

В этой точке, если продолжать пошаговое исполнение, мы пройдем через процесс создания сообщения об ошибке, которое в итоге будет выведено опять-таки в окно оболочки .

Задание точек прерывания

Задать точку прерывания очень просто: в режиме отладки достаточно щелкнуть правой кнопкой мыши по любой строке в окне редактора файлов и выбрать опцию » Set breakpoint » (» Задать точку прерывания «). Эта строка будет подсвечена желтым цветом. При достижении отмеченной строки выполнение программы будет остановлено. Обратите внимание, однако, что в данной версии IDLE на платформе Windows эта функция не работает, и отладчик на точках прерывания останавливаться не будет.

Улучшения и будущее развитие IDLE

Гвидо ван Россум и Джереми Хилтон в настоящее время активно работают над IDLE. Они приветствуют предложения и дополнения. Обсуждение направлений дальнейшего развития может быть найдено в почтовой рассылке «IDLE-dev» ( IDLE-dev Mail List).

Для IDLE можно писать пользовательские расширения. Инструкции Гвидо как это сделать см. в файле: extend.txt.

Если хотите, всегда можно получить самую последнюю (нестабильную) версию IDLE. Есть два способа сделать это. Первый — получить ее (вместе с последней версией остального кода Python) через дерево CVS. Необходимые инструкции можно найти здесь: Python CVS Info.

Второй путь — это воспользоваться действительно хорошим сервисом, поддерживаемым Дэвидом Ашером (David Ascher). Он выкладывает самую последнюю версию IDLE на: IDLE snapshot. На Windows бывают сюрпризы при распаковке. На моей машине файл:
idle_23_11_99.tar.gz
превращается в:
idle_23_11_99_tar.tar
и мне приходится переименовывать его обратно после загрузки (конечно, в вашем случае дата будет другой). Кроме того, потребуются инструменты для первой распаковки (т.е. Aladdin Expander на Windows) и для второй (т.е. Winzip на Windows).

Что нового в версии 0.5

  • В окне Shell появилась новая функциональность — подсказки (call tips) .
  • В браузерах Path Browser и Class Browser теперь используется модель с древовидной структурой.
  • Сейчас стало возможным задавать величину отступа и переключаться между режимами использования символов табуляции в отступах.
  • Теперь файлы могут импортироваться как модули или запускаться как сценарии командой из редактора файлов .
  • Стало возможным вызывать IDLE с аргументами командной строки, как и основной интерпретатор Python (см. описание в файле помощи Help и применяйте idle.bat, если работаете на Windows).

Обратная связь

Возможно, в этот документ будут внесены изменения при его адаптации к новым версиям IDLE. Любая обратная связь, касающаяся содержания или формы документа, определенно приветствуется. Меня можно найти по адресу: ddharms@yahoo.com.

Daryl Harms

Автор: Дэрил Хармс
Web-адрес: http://folk.uio.no/hpl/scripting/doc/python/IDLE-doc/idle2.html
[ Сама ссылка не работает. Осталась ее копия в архиве Интернета.- Прим. пер. ]
Лицензия: CNRI License

Перевод на русский язык: Филипп Занько
Лицензия перевода: CNRI License

О замеченных ошибках, неточностях, опечатках просьба сообщать по электронному адресу:
russianlutheran@gmail.com

Знакомство с Python: ввод/вывод, целочисленная арифметика

Возможности языка Python
Язык программирования Python 3 —
это мощный инструмент для создания
программ самого разнообразного назначения,
доступный даже для новичков.
Python — интерпретируемый язык
программирования
Кроссплатформенность и бесплатность
Понятный и лаконичный синтаксис
Динамическая типизация
Хорошая поддержка модульности
Поддержка объектно-ориентированного
программирования
И др.

5.

Установка языка Python и среды разработки
Скачать дистрибутив с официального
сайта http://www.python.org
Рекомендуется использование версии 3…,
как более современные
Прямая ссылка на дистрибутив 3.6.0
для Windows: 32 бита, 64 бита. При установке
рекомендуется выбирать вариант «Install for all
users»
Можно использовать IDLE – стандартную среду
разработки для Python
Также есть среда JetBrains PyCharm, более
богатая возможностями, но и более сложная
в использовании для начинающих
Простая кроссплатформенная бесплатная среда
для обучения – Wing IDE 101
( http://wingware.com/downloads/wingide-101)

6.

2017г. Популярность Python

7.

2018г. Популярность Python

8.

2019г. Популярность Python

9.

Оболочка IDLE для Python
Главное
меню
Пункт меню
«Настройки»
Встроенный
калькулятор
Окно
настроек
Ввод/вывод
данных

10.

Типы данных в Python
Числовые (целые – int (43), вещественные –
float (3.1415))
Строковые – str (‘Строка’, “Текст”)
Булевские – bool (True, False)

11.

Основные операции в Python
Для чисел:
A + B — сумма;
A — B — разность;
A * B — произведение;
A / B — частное;
A // B — деление нацело;
A % B — остаток от деления;
A ** B — возведение в степень.
Для строк:
A + B — конкатенация;
A * n — повторение n раз,
значение n должно быть целого
типа.

12.

Приоритеты операций в Python
1. Выполняются операции возведения в
степень справа налево.
2. Выполняются унарные минусы (отрицания).
3. Выполняются умножения и деления слева
направо. Операции умножения и деления имеют
одинаковый приоритет.
4. Выполняются сложения и вычитания слева
направо. Операции сложения и вычитания
имеют одинаковый приоритет.
Пример 1: чему будет равно 1 + 2 * 3 ** 1 + 1?
Пример 2: чему будет равно 3 ** 3 ** 3 ?
8
7625597484987

13.

Преобразование типов в Python
Для этого используются функции, одноименные с
именем типа, то есть int, float, str.
Например, int (‘123’) вернет целое число 123, а
str (123)вернет строку ‘123’.
Пример:
Что будет в результате str(2 + 2) * int (‘2’ + ‘2’)?
‘4444444444444444444444’

14.

Работа со встроенным калькулятором
Упражнения (для самостоятельного выполнения):
Вычислить выражение
(16386 — 396) : 78 + 402 x 306
Вычислить факториал
числа 17!
Какой цифрой оканчивается
сумма 292019 + 5
Найти частное и остаток от
деления числа 2313 на целую
часть от числа [2019:67]
123217
355687428096000
4
16801212064548912
23

15.

Окно написания программы на Python
Главное
меню
Запуск
программы
Код
программы

16.

Оператор вывода на Python
Конец строки
Разделитель
Результат работы программы

17.

Закрепление пройденного
Упражнения (для самостоятельного выполнения):
Напечатать текст «лесенкой»
Нарисовать «Елочку»

18.

Операторы ввода и присваивания в Pythonе
Подсказка
Вводятся понятия переменных и констант
Написать программу «Диалог с компьютером»
Пользователь
Компьютер
Результат работы программы

19.

Задачи на линейные алгоритмы
Вводится целое число.
Вывести предыдущее и
последующее числа.
Пример
Входные данные:
8
Выходные данные:
Перед 8 число 7
За 8 число 9
Вводятся длины двух сторон
прямоугольника (в метрах).
Вывести его площадь и периметр.
Пример
Входные данные:
1-я сторона 8
2-я сторона 5
Выходные данные:
Площадь 40 кв.м
Периметр 26 м

20.

Задачи на линейные алгоритмы
(для самостоятельного выполнения)
Вводится трехзначное число.
Вывести сумму его цифр.
Пример
Входные данные:
876
Выходные данные:
21
Вводится целое число. Вывести
следующее за ним четное число.
Пример
Входные данные:
7
8
Выходные данные:
8
10
Дано число n. С начала суток прошло n минут. Определите, сколько
часов и минут будут показывать электронные часы в этот момент.
Программа должна вывести два числа: количество часов (от 0 до 23) и
количество минут (от 0 до 59). Учтите, что число n может быть больше,
чем количество минут в сутках.
Пример
Входные данные:
150
1441
Выходные данные:
2:30
0:1

Срочно пожалуйста b)Запишите полную форму условного оператора на языке программирования Python. какое значение 2**3 вернёт выражение в среде IDLE Какое значение 26%10 вернёт выражение в среде IDLE Какое значение 11//2 вернёт выражение в среде IDLE Какая функция отвечает за вывод на экран​

nukea

Выбери, какие основные угрозы существуют в Интернете Общение с незнакомыми людьми в чатах или по электронной почте Поиск развлечений (например, игр) в … Интернете Угроза заражения вредоносным программным обеспечением (ПО) Установка нелицензионного программного обеспечения​

які об‘єкти табличного процесора Excel ви знаєте? які їх властивості

Введи оценку (0 — остановить ввод): >>> 5 Введи балл (0 — остановить ввод): >>> 4 Введи балл (0 — остановить ввод): >>> 2 В … веди балл (0 — остановить ввод): >>> 3 Введи балл (0 — остановить ввод): >>> 0 Список оценок: [5, 4, 2, 3] Успеваемость: 75.0

Коллоквиум по программированию микроконтроллеров

Это список вопросов для тех кто числится программистом микроконтроллеров и занимается разработкой электроники. Вопросы в частности взяты из технических собеседований при устройстве на работу в разные реальные компании. Постарался отобрать только самые приближенные к практике вопросы, которые можно выделить после 10 лет InSider(ского) опыта. Тут не будет моветонных вопросов из серии «как инвертировать связанный список». Тут представлен обогащенный концентрат. Всё исключительно и только по делу.

По коду

1—Зачем static?

2—Зачем ключевое слово volatile C

3—Всё ли в порядке с кодом?

int square(volatile int *ptr)

4—Может ли быть const volatile?

5—Зачем ключевое слово register?

6—Зачем ключевое слово restrict?

7—Зачем ключевое слово weak?

8—Зачем в С(ях) нужны битовые поля?

9—Зачем в С(ях) нужны объединения?

10—Как проверить, что в числе установлен/сброшен бит?

11—Как проверить, что два float числа равны между собой?

12—В какую память попадет глобальная переменная с ключевым словом const?

13—Какие есть способы передачи переменных в С функцию?

14—Есть ли способ запустить С-код до запуска main?

15—Что произойдет при компиляции этого участка кода?

const int MAX=100; #if 100==MAX #error "MAX:100" #endif int main()

16—Зачем нужен препроцессорный #error?

17—Какое значение в локальной static переменной при первом вызове?

18—В чем недостаток inline функций?

19—Зачем нужен оператор препроцессора ##?

20—Как делать примитивы инкапсуляции в C?

21—Какие знаешь адекватные правила MISRA 2004 или MISRA 2012?

22—Как делать примитивы полиморфизма в С?

23—Напишите функцию, которая при передаче по аргументу значения 1 печатает «One». При передаче 2 печатает «Two». Запрещено использовать оператор if и оператор switch.

24—Может ли С функция во время исполнения определить, что ее вызвали рекурсивно?

25—Может ли C функция с переменным числом аргументов узнать сколько у нее аргументов?

26—Назови три способа вернуть массив из функции.

27—Зачем используют do <. >while(0); если это всего лишь 1 итерация?

28—Зачем нужен extern «C» ?

29—Напишете одной строчкой установку значения 0x11223344 по абсолютному адресу 0x20000016.

30—Что напечатается на экран?

 int main() < char str5[]=; printf("\n5 %s size: %d len:%d",str5, sizeof(str5), strlen(str5)); char *str1="string"; printf("\n1 %s size: %d len:%d",str1, sizeof(str1), strlen(str1)); const char *str2="string"; printf("\n2 %s size: %d len:%d",str2, sizeof(str2), strlen(str2)); char str3[]="string"; printf("\n3 %s size: %d len:%d",str3, sizeof(str3), strlen(str3)); char str4[10]="string"; printf("\n4 %s size: %d len:%d",str4, sizeof(str4), strlen(str4)); char *str6=strdup("string"); printf("\n6 %s size: %d len:%d",str6, sizeof(str6), strlen(str6)); char *str7=(char[]); printf("\n7 %s size: %d len:%d",str7, sizeof(str7), strlen(str7)); return 0; >

31—В чём разница между этими двумя прототипами?

uint16_t calc_crc16(uint8_t *inData, uint16_t const len); uint16_t calc_crc16(uint8_t inData[], uint16_t const len); 

32—Чему равен размер структур?

struct Foo < int iiii; char c; >; struct record < char tag; unsigned index; char has_extra_data; char has_value; int value; >;

33—Как упаковать структуру в компиляторе GCC?

34—Зачем нужны упакованный структуры кроме экономии RAM памяти?

35—Что напечатается в консоли при отработке функции

typedef struct< int a:1; int b; >ab_t; int main(void)

36—Чему равен val? Значение необходимо указать исходя из типа памяти little endian и проще выразить в hex формате

 uint16_t arr[4] = ; uint32_t val; val = *((uint32_t*) (&arr[1])); printf("val=%08x \n", val);

37—Что вернет код?

static char *val_2_str(int i) < static char buff[10]; snprintf(buff,sizeof(buff)," %d ",i); return buff; >printf("\n%s %s",val_2_str(3),val_2_str(4));

38—Какой код выполняется быстрее: первый или второй?

void inc_matrix_ji(void) < int i=0,j=0; for(j=0; j> > void inc_matrix_ij(void) < int i=0,j=0; for(i=0;i> > 

39— Есть константный Си-массив структур, который формируется препроцессором (cpp.еxe) до компиляции gcc из разных файлов проекта. Как проверить во время компиляции (до исполнения кода), что в финальном массиве структур нет повторяющихся элементов?

Структуры данных

1—Чем циклический буфер отличается от FIFO?

2—Как удалить элемент из связанного списка не зная указателя не предыдущий элемент?

Про DevOps

1—Зачем собирать из скриптов, если всегда можно мышкой щелкнуть на зеленый треугольник в GUI-IDE?

2—Зачем нужны все эти сервера сборки типа Jenkins(а)?

3—Какие файлы следует подвергать версионному контролю в GIT?

4—Что для тебя значит рефакторинг? Что ты подразумеваешь под словом рефакторинг?

Про прерывания

1—Что такое прерывание?

2—Зачем нужны программные прерывания? Можно ведь просто функцию вызвать.

3—Что такое реентерабельная функция?

4—Сколько тактов процессора нужно для запуска возникшего прерывания на Cortex-M4?

5—Сколько тактов процессора нужно для вызова функции?

6—что такое таблица прерываний?

7—Каков алгоритм обработки прерываний? Что происходит во время срабатывания прерывания?

8—что такое вектор прерываний?

9—Какие есть внутренние прерывания?

10—Как регистр программного счетчика PC узнает куда возвращаться после обработки прерывания?

Про ToolChain

—Как проверить что конкретный *.c или *.h файл вообще собирается?

—Какой путь проходит код с момента написания до попадания в flash память?

—Компоновщик пишет, что прошивка не собирается из-за нехватки On-Chip NorFlash памяти. Какие меры ты предпримешь, чтобы утрамбовать прошивку?

—Что такое ABI (application binary interface)?

—На какие сегменты разбита память прошивки?

—Какие доки(спеки) нужны для того, чтобы разрабатывать встраиваемый софт? Назовите минимум 4 дока.

—Компилятору подали 5 *.с файликов и 20 *.h файликов. Сколько будет *.o файликов?

—Тебе предоставили файл *.с чрезвычайно запутанный препроцессором. Как ты поймешь, что там происходит и в какой последовательности?

—Что такое binutils? Какие знаете? Что можно с ними сделать?

—Какие файлы являются результатом работы разработчика MCU (артефакты)?

—В каких случаях артефакты в *.hex файликах предпочтительнее артефактов в *.bin файликах?

Вопросы про RTOS(ы)

1—Что такое Bare-Bone сборка прошивки?

2—Что такое поток?

3—что такое гонки в программах?

4—Что такое bit-banding и зачем нужен bit-banding?

5—Что такое контекст потока?

6—Что такое spinlock?

7—Что такое deadlock?

8—Что такое preemptive многозадачность?

9—Что такое критическая секция?

10—Что такое мьютекс?

11—Что такое семафор?

12—Пример атомарной операции?

13—Все ли в порядке в этом многопоточном коде?

DataA a; DataB b; DataC c; mutex ma, mb, mc; void TaskA() < lock(ma); lock(mb); // use a, b unlock(mb); unlock(ma); >void TaskB() < lock(mb); lock(mc); lock(ma); // use a, b, c unlock(ma); unlock(mb); unlock(mc); >void TaskC() < lock(mc); // use c unlock(mc); >

14—Что такое инверсия приоритетов?

15—Как бороться с инверсией приоритетов?

16—В стеке какого потока работают прерывания?

17—Что значит thread-safe код?

18—В чем разница между мьютекксом и семафором?

19—Что такое Reentrancy?

20—В чем разница между Joined и Detached потоками?

21—Написать функцию атомарного обмена содержимого переменных.

22—Что такое атомарные операции?

23—Как измерить процент загрузки MCU в прошивке без ОС?

Про цифровые фильтры:

1—В чём достоинство цифровых фильтров в отличие от аналоговых?

2—В чём недостаток FIR фильтра в сравнении с IIR фильтром?

3—Дан цифровой FIR фильтр. Иcходников нет, реализован в виде статической библиотеки *.a файла. Как узнать массив его коэффициентов B[0. N]?

Про железо (аппаратное обеспечение)

1—Чем резистор, конденсатор и катушки индуктивности отличаются друг от друга? В чём их сходство?

24—Зачем микроконтроллерам функция Pull-Up/Pull-Down, если всегда можно включить LED просто установив логический уровень на GPIO?

2—Что такое PUSH-PULL а что OPEN-DRAIN?

3—Как на 10MHz(цовом) микроконтроллере можно измерить частоту примерно 100MHz прямоугольного сигнала с GPIO?

4—Как проверить, что 2 PWM сигнала на 2х GPIO синфазные?

5—На одной SPI шине 2 Slave чипа. На оба подали одновременно Chip Select 0V и начали вычитывать регистры в которых разные данные. Что будет? Сгорит/не сгорит?

6—Какие есть регистры у Cortex M3 и для чего они нужны?

7—Что значит суперскалярный микропроцессор?

8—Почему частота часового кварца именно 32768 Hz?

10—Что нужно сделать программе с микроконтроллером, чтобы моргать светодиодом? Напишите словами каждый шаг.

11—Как сделать проверку-защиту, что firmware в самом деле предназначено именно для этой платы?

12—По какому интерфейсу код взаимодействует с железом (ядром микроконтроллера)?

13—Что такое scatter/gather IO?

14—В чем отличия между архитектурами 8051, AVR, ARM, Xtensa, PowerPC, MIPS, RICS-V, x86, SPARC?

15—Что происходит с микроконтроллером между подачей питания и запуском функции main()?

16—Какие виды памяти есть в микроконтроллере.

17—На какие части обычно делится Flash память?

18—На какие части делится RAM память?

20—Как обрабатывать кнопку? Как преодолевать дребезг контактов?

21—Какой способ подключения LED предпочтительнее: a или b?

22—Дорисуйте блок-схему процессора ARM Cortex-M4 настолько, насколько вы в нем разбираетесь.

дорисовать ARM Cortex-M4

23— Как при помощи микроконтроллера измерить сопротивление выводного резистора?

По интерфейсам

1—Какое напряжение на UART TX в режиме idle?

2—Зачем UART опция 2 стоповых бита, если это уменьшает data rate?

3—На шине SPI 2 разных чипа. На оба подали CS-0v и начали читать. Что произойдет: Сгорит/не сгорит/другое?

4—Как измерить процент загрузки CAN шины?

5—Какая разность потенциалов в CAN когда ничего не передается?

6—Есть два Lin интерфейса. У одного подтяжка data провода к 24V у другого подтяжка data провода к 12V. Data провода соединили. Что будет? Сгорит /не сгорит?

7—может ли i2c работать в режиме нескольких мастеров?

8—Чем CAN принципиально отличается от Ethernet?

9—У тебя на шине RS485 N устройств. Как мастер устройству узнать количество ведомых устройств на RS485 шине и их 32 битные адреса за минимальное время?

По протоколам

1—В каких протоколах у переменных big endian, а в каких протоколах у переменных little endian?

2—Зачем в TCP пакете контрольная сумма, если контрольная сумма есть в Ethernet пакете?

3—Зачем нужен IP-адрес, если уже есть MAC-адрес?

4—Как передавать пакеты по 1024 байт, если в PayLoad транспортного протокола помещается всего только 256 байт?

5—Почему CRC часто в конце пакета, а не в заголовке пакета?

6—Зачем нужно кодирование Base64 в Embedded?

7—Насколько процентов кодировка Base64 расширяет размер оригинального бинаря в самом худшем случае?

Вопросы про стек

1—Что происходит когда мы вызываем функцию?

2—Что хранится в стековой памяти?

3—Что такое стековый кадр? И что в нем хранится?

4—Какой код копирует в стек адрес возврата?

5—Можно ли на стеке выделить массив длинна которого задается аргументом функции?

6—Какой код копирует из стека адрес возврата из функции для регистра программного счетчика?

7—Кто инициализирует локальные переменные если их не проинициализирован явно ?

8—В какую сторону растет стек?

9—Сколько указателей стека в ARM Cortex-M4?

10—Что определяет в каком направлении будет расти стековая RAM память?

12—Какое значение в локальной переменной если ничего не присвоено при создании?

13—Что произойдет при переполнении стека?

14—Как определить на какую максимальную глубину заполнялась стековая память с момента запуска программы?

15—Все ли в порядке с функцией?

int8_t* foo(void)

Беспроводные интерфейсы

—Как определить что передатчик в самом деле передает что-то?

—Нет радио Link(а) (например в LoRa). Как выявить в чем дело? Передатчик не передает или приемник не принимает?

Про heap память

—Как определить размер блока выделенного malloc?

—Как бороться с фрагментацией памяти?

—Как проверить сколько памяти выделено в куче в случайном месте программы?

Про загрузчики

1—Зачем нужен загрузчик во встраиваемых системах? Назовите минимум 3 его функции.

2—Как загрузчик может обмениваться данными с приложением?

3—В чем опасность вызова функций загрузчика из приложения?

4—Как защитить микроконтроллер от загрузки чужеродного кода через загрузчик?

5—Как загрузчику понять, что загрузчик принял в самом деле прошивку, а не набор случайных циферок с правильной CRC?

6—Как сделать обновление прошивки по TCP/IP, если в загрузчике хватает NorFlash памяти только для драйвера UART?

7—Можно ли сделать так, чтобы загрузчик стартовал не с адреса начала Main Flash 0x0800_0000, а например с адреса 0x0806_0000?

8—Почему в микроконтроллерах STM32 секторы NOR Flash(а) разных размеров?

*9—Вам прислали прошивки в *.bin файле. Как загрузить и запустить эту прошивку по произвольному отступу в on-chip Nor Flash памяти?

Решение проблем (TroubleShooting)

1—Тебе дали дорогую плату запрограммировать прямо с производства. Плату ещё ни разу не включали в питание. Крайне вероятно, что плата сгорит при первом же включении из-за брака монтажа. Как ты проверишь плату не испортив ценный полуфабрикат?

2—Прошивка зависла, ваши действия?

3—Какие утечки вы знаете кроме утечки памяти?

4—Прошивка после подачи питания постоянно и непрерывно перезагружается. Как вы станете это ремонтировать?

5—Ты пишешь код, собираешь, запускаешь и вдруг прошивка перезагружается. Твои действия?

6—Как отладить большой кусок кода, если нет возможности пройти JTAG/SWD отладчиком?

7—Какие меры увеличения надежности софта предлагает стандарт ISO-26262?

8—По ходу добавления функционала вы столкнулись с нехваткой RAM памяти для своих глобальных переменных. Как отобразить всё глобальные переменные одной командой в консоли?

9—По ходу добавления функционала вы столкнулись с нехваткой ROM памяти. Как отобразить все функции одной командой в консоли?

10—Зачем мультиметру функция True RMS?

11—Что такое полоса пропускания в осциллографе?

Вопросы для развернутого устного ответа (System Design)

1—Как можно реализовать энергонезависимую KeyVal Map(ку) на микроконтроллере?

2—Как померить процент загрузки микроконтроллера в конкретное время (прошивка NoRTOS)?

3—Как можно реализовать надежную доставку пакетов поверх протокола UDP?

4—Как бы ты реализовал механизм FOTA? Т.е. обновления прошивки по беспроводному интерфейсу (Bluetooth, WiFi, LoRa, RFID и т.п.)?

5—У тебя на шине RS485 N устройств. Как мастер устройству узнать количество ведомых устройств на RS485 шине и их 32 битные адреса за минимальное время?

6—Чем конечный автомат Мура отличается от конечного автомата Мили?

Вопросы для проверки навыков пользования компьютером

1—Есть текстовый файл-лог размером 50Mbyte. Строки с ошибками обозначены как [E]. Как узнать есть ли в логе ошибки и сколько их?

2—Диск переполнился. Комп тормозит. Как быстро выяснить размер каждой папки?

3—Как из консоли рекурсивно открыть в Notepad++ все файлы с расширение *.mk?

4—Как рекурсивно удалить все файлы расширения *.bak?

5—Что такое регулярные выражения?

6—Как отобразить все 3-буквенные слова в текстовом файле?

7—Напиши bash команду, которая ищет во всех файлах папки проекта макрос с под именем «LED» только в файлах board.h

8—Как в папке открытой в консоли рекурсивно заменить слово old_word на new_word во всех фалах внутри папки

Вопросы со звездочкой *

1—Как измерить покрытие микроконтроллерного кода после отработки модульных тестов?

2—Опиши как работает JTAG под капотом (установка точки останова).

3—Почему на некоторых MCU RAM память не является непрерывной, а разделена на несколько отдельный непрерывных диапазонов адресов?

4—Как узнать время сборки каждого *.с файла?

5—Как рассчитать CRC на стадии компиляции, чтобы положить результат в константный массив?

6—Как добавить еще одну отладочную кнопку, если уже все пины заняты.

Вопросы на способность тестирования и отладки

1—Какие существуют способы отлаживать прошивки? Назовите как минимум 10 способов.

2—Какой самый сложный программный или аппаратный баг приходилось искать и починить?

3—Как перезагрузить прошивку? Перечислите как можно больше способов. Минимум 3 способа.

4—Для чего нужны модульные тесты (скрепы)? Назовите 2+ причины.

5—Как отобразить UART лог в коде, который отрабатывает до инициализации отладочного UART?

6—Сколько способов подключить 4 провода к 8 ми клеммникам? Речь идет про конец каждого провода. В один клеммник устанавливается только 1 конец провода.

7—Как избежать чрезмерного, избыточного количества модульных тестов?

8—Как проверить, что инфракрасный передатчик IR в самом деле излучает хоть что-то?

9—Как проверить, что два массива это перестановка одних и тех же чисел?

10—Как протестировать драйвер графического I2C дисплея c SSD1306 в режиме write only?

Варианты для тестового задания дома

1—Напишите функцию для вычисления угла между 2D векторами с учетом знака (правая тройка).

2—Напишите функцию, которая вычисляет PWM sample.

double pwm_sample_calc(uint64_t time_us, double freq, double cur_phase_ms, double des_amplitude, double duty_cycle, double offset);

3—Напишите прошивку под STM32F4, которая генерирует на GPIO два аппаратных PWM с возможностью менять фазу, частоту, скважность через UART в run-time.

*4—Напишите энергонезависимую FlashFS(NVRAM) для, например, STM32 микроконтроллера. Предусмотрите endurance optimization и защиту данных от пропадания питания.

5—Напишите heap allocator или попросту реализуйте malloc() free().

6—Даны две GNSS координаты. Вычислить азимут в градусах. Покрыть тестами.

7—Напишите минималистичную прошивку STM32 загрузчика (MBR), которая только прыгает в определенный адрес (например 0x08016000), чтобы запустить приложение. Постарайтесь уместить *.bin файл в 1kByte. У кого меньше бинарь, тот и победил.

8—В микроконтроллерной системе аналого-цифровой преобразователь измеряет напряжение на канале. Это напряжение надо конвертировать в дискретный уровень, в зависимости от значения. Сигнал зашумлен. Надо реализовать программный гистерезис. Напишите функцию, которая выполнит эту работу. Используйте в вычислениях только целочисленные типы.

int hysteresis(unsigned int input_percent);

9—Напишите диагностическую утилиту интерпретатор 19ти 8ми битных регистров RTC чипа DS3231. Регистровый dump считывать из текстового файла.

10*—Напишите Си функцию-переходник, которая преобразует PDM сигнал с MEMS микрофона в PCM сэмплы для загрузки в интерфейс I2S.

11—Напишите Cи-функцию csv_parse_text, которая выделяет из Comma-separated values строки текст по индексу. Вот модульный тест для csv_parse_text.

bool test_csv_parse_text(void)

12—Написать Си-функцию, которая распознает вещественное число из строчки. То есть универсальный парсер типа данных double. Вот несколько тест кейсов: «.» -> 0.0; «.5» -> 0.5; «5.» -> 5.0; » 6″ -> 6.0; «+1e2″ -> 100; » 1/3″ -> 0.33;

Если вы знаете адекватные, сложные и интересные вопросы по теме разработки на MCU, то пишите их в комментариях.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *