5277 (5277) wrote,
5277
5277

Category:

core5277

Еще раз, что такое #core5277:

Это моя разработка на ассемблере #AVRA для микроконтроллеров компании #Atmel.
В процессе разработки я использую микроконтроллер ATmega328, он часто используется в #Arduino.
Соответственно поддерживаются микроконтроллеры ATMega48/88/168 так как отличаются от ATmega328 только объемами памяти. Кроме этого, на данный момент, я поддерживаю (хоть и не всегда актуализирую их файлы) ATMega16,ATmeag8,ATtiny45/85. Также планирую ввести поддержку линейки микроконтроллеров AT90CAN32

А разрабатываю я ядро, по сути операционную систему, для данных МК.
Вот часть реализованного функционала:
- параллельное выполнение нескольких задач (вытесняющий режим),
- простой режим переключения задач (задача вызывает SUSPEND для передачи управления следующей),
- драйвера (1wire, i2c, uart, ds18b20, am2301, beeper и прочее),
- логирование в порт,
- динамическое выделение памяти,
- контрольные суммы, некоторая математика, преобразование данных,
- программные таймеры,
- смена обработчиков прерываний налету,
- унифицированная логика работы с портами ввода/вывода

Для применения проекта я рекомендую использовать Linux+Geany+AVRA+avrdude, хотя теперь можно использовать и Windows+Atmel Studio7.

Этот проект, как и проект 5277, по большему счету, является моим хобби.
Тем не менее я вижу в нем ценность для других разработчиков.

Сейчас практически все современные разработчики ПО под микроконтроллеры пишут на #Си. Существует также ряд операционных систем для микроконтроллеров, также написанных на Си. Но я не нашел ни одной ОС на ассемблере.
При этом, разработка проекта на ассемблере дает неоспоримое преимущество в вопросах требований к ресурсам МК.
Да, это не особо актуально, в виду цен на STM чипы. Тем не менее, для поклонников AVR это будет интересно.

При написании ядра я уделяю особое внимание некоторой унификации.
Например работа с портами(независимо от типа МК) выглядит следующим образом:
LDI ACCUM,PD4
  MCALL CORE5277_PORT_MODE_OUT
  MCALL CORE5277_PORT_SET_LO


Введены программные таймеры, можно налету менять таблицу прерываний.
Вызов процедур(драйверов) тоже унифицирован, вот например коммуникация с устройством через шину i2c:
LDD TEMP,Z+_DRV_MLX90614_I2C_DRV
  LDI YH,high(_DRV_MLX90614_DATAPCKET)|0x80
  LDI YL,low(_DRV_MLX90614_DATAPCKET)
  MOV XH,ZH
  MOV XL,ZL
  LDI TEMP_H,_DRV_MLX90614_SEND_LEN
  LDI TEMP_L,_DRV_MLX90614_RECV_LEN
  LDI ACCUM,_DRV_MLX90614_I2C_ADDR
  MCALL CORE5277_EXEC


Или вызов процедуры проигрывания мелодии:
LDI TEMP,PID_BEEPER_DRV
  LDI YH,high(TSK_BEEPER_DATA)|0x80
  LDI YL,low(TSK_BEEPER_DATA)
  MCALL CORE5277_EXEC


Т.е. разработка сильно упрощается благодаря многопоточности, управлению памятью, драйверам, наработанным процедурам и унификации. По большему счету, этот проект позволяет значительно экономить трудозатраты на разработку прошивки, сделать этот процесс близким по трудозатратам к разработке на Arduino.
Если, по какой-то причине, разработчик вынужден вести проект для вышеописанных микроконтроллеров и его заботит ресурсоемкость, то ему однозначно стоит обратить на этот проект внимание.
Ну и не забываем про обучение, думаю для начинающего это будет не плохое подспорье.


И да, я выложил новую версию:

19.09.2020 v0.2.6
1. Скорректирован драйвер аппаратного UART
2. Идентификация программных таймеров начинается с 0x00
3. Добавлен пример работы с UART

http://5277.ru/distr/core5277/core5277.tar.gz
Tags: assembler, atmega, avr, core5277, Ардуино, операционная система
Subscribe
  • Post a new comment

    Error

    default userpic

    Your IP address will be recorded 

    When you submit the form an invisible reCAPTCHA check will be performed.
    You must follow the Privacy Policy and Google Terms of use.
  • 0 comments