stringtranslate.com

Кролик Полупроводник

Rabbit Semiconductor — американская компания, которая разрабатывает и продает семейство микроконтроллеров и модулей микроконтроллеров Rabbit . Для разработки она предоставляет Dynamic C — нестандартный диалект C с фирменными структурами для многозадачности.

В 2006 году компания Rabbit Semiconductor была приобретена компанией Digi International за 49 миллионов долларов. [1] [2] До покупки Rabbit Semiconductor была подразделением Z-World, Inc. Z-World разрабатывала и производила встраиваемые контроллеры, а также среды разработки встроенного программного обеспечения.

Архитектура микроконтроллера

Семейство процессоров Rabbit имеет много общих черт с процессорами Zilog Z80/Z180 . Например, регистры процессора Rabbit 2000 /3000 почти такие же, как регистры процессора Z80/Z180. Процессор Rabbit 4000 расширяется, включая использование 32-битных регистров. Набор инструкций процессоров Rabbit также очень похож на набор инструкций семейства Z80/Z180. Хотя коды операций многих инструкций одинаковы для процессоров Rabbit 2000/3000 и процессоров Z80/Z180, эти два семейства процессоров несовместимы на двоичном уровне. Как и в случае с семейством Z80/Z180, процессоры Rabbit являются CISC- процессорами.

Семейство процессоров Rabbit имеет уникальные особенности. Например, семейство Z80/Z180 отключает прерывания , как только прерывание обслуживается процедурой обслуживания прерываний. Однако процессоры Rabbit разрешают прерываниям прерывать процедуры обслуживания в соответствии с приоритетами (всего 4).

Rabbit Semiconductor утверждает, что набор инструкций процессоров Rabbit оптимизирован для кода C. [3]

Динамический С

Возможно, наиболее примечательной особенностью микроконтроллера Rabbit является его среда разработки. Dynamic C, продукт Rabbit Semiconductor, имеет дополнения, удаления и несоответствия по сравнению со стандартом ANSI-C.

Dynamic C IDE поставляется с обширными библиотеками с открытым исходным кодом и примерами кода, выпущенными по лицензии MPL или ISC . [4] [5]

Примечание
(Ссылка: Портирование программы на Dynamic C-Rabbit Semiconductor)

Динамический C следует стандарту ISO/ANSI C, когда это возможно и желательно. Поскольку стандарт не учитывает особые потребности встраиваемых систем, необходимо отступать от стандарта в некоторых областях и желательно в других. Стандарт не учитывает важные вопросы встраиваемых систем, такие как память только для чтения и встроенный язык ассемблера. По этой причине практические компиляторы, предназначенные для встраиваемых систем, не полностью соответствуют стандарту, но используют его в качестве руководства.

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

В качестве примера удаления, начиная с версии 10.23 Dynamic C не поддерживает переменные области действия блока или битовые поля . В набор инструментов разработки не входят отдельный препроцессор и компоновщик, что может усложнить процесс переноса существующих программ в компилятор. Начиная с версии 10.64 поддерживается область действия блока для переменных.

В качестве примера несоответствия можно привести Dynamic C, который неявно обрабатывает все инициализированные глобальные переменные, как если бы они были объявлены с constквалификатором. Кроме того, все constпеременные находятся во флэш-памяти. Более ранние версии Dynamic C не проверяли использование constключевого слова в параметрах — можно было передать constпеременную в качестве параметра функции, которая ее не ожидала, что потенциально приводило к попыткам записи во флэш-память. Начиная с последней версии Dynamic C, компилятор выдаст ошибку, если пользователь попытается изменить переменную constнапрямую, и выдаст предупреждение, если пользователь отбросит constквалификатор при передаче параметра функции.

Конструкции многозадачности

Одной из примечательных особенностей Dynamic C является включение языковых конструкций для упрощения многозадачности. Эти конструкции, costateоператор и sliceоператор, реализуют форму кооперативной и вытесняющей многозадачности соответственно. В качестве примера рассмотрим следующую программу, которая мигает двумя светодиодами с разной частотой:

void main () { while ( 1 ) { // Создаем 2 оператора costate, которые будут переключать наши светодиоды. costate { led1on (); waitfor ( DelayMs ( 100 )); led1off (); waitfor ( DelayMs ( 50 )); } costate { led2on (); waitfor ( DelayMs ( 200 )); led2off (); waitfor ( DelayMs ( 50 )); } } }                    

При запуске этого кода будет выполнен первый costatement, и загорится первый светодиод. Costatement затем уступит второму оператору, ожидая 100 миллисекунд. Второй costatement будет выполнен аналогичным образом. Пока оба costatement ждут истечения своего времени, цикл while будет busy-wait , но это время ожидания потенциально может быть использовано для выполнения других задач. Для получения дополнительной информации см. Руководство пользователя Dynamic C.

Смотрите также

Ссылки

  1. ^ Digi International приобретает Rabbit Semiconductor Архивировано 13 февраля 2009 г. на Wayback Machine
  2. ^ "Control Engineering | Digi приобретает Rabbit Semiconductor за 49 миллионов долларов". Control Engineering . 2005-06-07 . Получено 2022-07-06 .
  3. ^ "Кролик | Digi International". www.digi.com .
  4. ^ Жан Дж. Лабросс. «Встроенное программное обеспечение: Знай все». 2007. С. 246.
  5. ^ «Dynamic C 10: для встраиваемых систем на базе Rabbit».

Внешние ссылки