Полупроводник кролика - Rabbit Semiconductor

Rabbit Semiconductor Inc.
Промышленность микроконтроллеры
Основан 1983 г.
Главное управление ,
Владелец Digi International
Веб-сайт www .digi .com / lp / rabbit

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

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

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

Семейство процессоров Rabbit имеет много общих черт с процессорами Zilog Z80 / Z180 . Так , например, регистры кролика 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.

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

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

Запись
(Ссылка: перенос программы на Dynamic C-Rabbit Semiconductor)

Dynamic 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)
    {
        // Create 2 costatements which will toggle our LEDs.
        costate
        {
            led1on();
            waitfor(DelayMs(100));
            led1off();
            waitfor(DelayMs(50));
        }
        costate
        {
            led2on();
            waitfor(DelayMs(200));
            led2off();
            waitfor(DelayMs(50));
        }
    }
}

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

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

Рекомендации

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