Полупроводник кролика - Rabbit Semiconductor
Промышленность | микроконтроллеры |
---|---|
Основан | 1983 г. |
Главное управление | , |
Владелец | Digi International |
Веб-сайт | www |
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 Руководство пользователя .
Смотрите также
Рекомендации
внешние ссылки
- Rabbit Semiconductor в веб-архиве Библиотеки Конгресса (заархивировано 14 сентября 2002 г.)
- Dynamic C 9 Руководство пользователя
- Digi International
- Перенос программы на динамический C
- Ссылка на семейную инструкцию Rabbit 4000 на Wayback Machine (архивировано 26 декабря 2011 г.)
- Кролик 4000
- Digi Systems на чипе
- Стек BACnet с открытым исходным кодом для семейства Rabbit