mirror of
https://github.com/AlexGyver/GyverCore.git
synced 2025-07-29 19:01:12 +03:00
upd
This commit is contained in:
@ -1,6 +1,6 @@
|
||||
/* Главный цикл программы */
|
||||
#pragma message "Нас тут заперли, вызовите 911!"
|
||||
#pragma message "GyverCore v1.8.2 inside. Enjoy"
|
||||
#pragma message "GyverCore v1.8.3 inside. Enjoy"
|
||||
|
||||
#include <Arduino.h>
|
||||
|
||||
|
@ -5,15 +5,21 @@ static volatile uint8_t _UART_RX_BUFFER_HEAD;
|
||||
static volatile uint8_t _UART_RX_BUFFER_TAIL;
|
||||
uint32_t _UART_TIMEOUT = 100;
|
||||
|
||||
#define UART_TX_BUFFER_SIZE 32
|
||||
static volatile char _UART_TX_BUFFER[UART_TX_BUFFER_SIZE];
|
||||
static volatile uint8_t _UART_TX_BUFFER_HEAD;
|
||||
static volatile uint8_t _UART_TX_BUFFER_TAIL;
|
||||
|
||||
// =========================== INIT ========================
|
||||
void GyverUart::begin(uint32_t baudrate){
|
||||
uint16_t speed = (F_CPU / (8L * baudrate)) - 1;
|
||||
UBRR0H = highByte(speed);
|
||||
UBRR0L = lowByte(speed);
|
||||
UCSR0A = (1 << U2X0);
|
||||
UCSR0B = ((1<<TXEN0) | (1<<RXEN0) | (1<<RXCIE0));
|
||||
UCSR0B = ((1<<TXEN0) | (1<<RXEN0) | (1<<RXCIE0) | (1<<TXCIE0));
|
||||
UCSR0C = ((1<<UCSZ01) | (1<<UCSZ00));
|
||||
_UART_RX_BUFFER_HEAD = _UART_RX_BUFFER_TAIL = 0;
|
||||
_UART_TX_BUFFER_HEAD = _UART_TX_BUFFER_TAIL = 0;
|
||||
}
|
||||
|
||||
void GyverUart::end(){
|
||||
@ -42,8 +48,11 @@ char GyverUart::read() {
|
||||
}
|
||||
|
||||
char GyverUart::peek() {
|
||||
//return _UART_RX_BUFFER[0];
|
||||
return _UART_RX_BUFFER_HEAD != _UART_RX_BUFFER_TAIL? _UART_RX_BUFFER[_UART_RX_BUFFER_TAIL]: -1;
|
||||
return _UART_RX_BUFFER_HEAD != _UART_RX_BUFFER_TAIL ? _UART_RX_BUFFER[_UART_RX_BUFFER_TAIL]: -1;
|
||||
}
|
||||
|
||||
void GyverUart::flush() {
|
||||
while (_UART_RX_BUFFER_HEAD != _UART_RX_BUFFER_TAIL);
|
||||
}
|
||||
|
||||
uint8_t GyverUart::available() {
|
||||
@ -183,19 +192,54 @@ String GyverUart::readStringUntil(char terminator) {
|
||||
}
|
||||
|
||||
// ====================== WRITE ===========================
|
||||
|
||||
/*
|
||||
// прямая запись без буфера
|
||||
void GyverUart::write(byte data){
|
||||
while (!(UCSR0A & (1<<UDRE0)));
|
||||
UDR0 = data;
|
||||
}
|
||||
*/
|
||||
|
||||
void GyverUart::write(byte data) {
|
||||
uint8_t i = (unsigned int)(_UART_TX_BUFFER_HEAD + 1) % UART_TX_BUFFER_SIZE;
|
||||
// ждать освобождения места в буфере
|
||||
while ( (i + 1) == _UART_TX_BUFFER_TAIL);
|
||||
|
||||
// Не сохранять новые данные если нет места
|
||||
if (i != _UART_TX_BUFFER_TAIL) {
|
||||
_UART_TX_BUFFER[_UART_TX_BUFFER_HEAD] = data;
|
||||
_UART_TX_BUFFER_HEAD = i;
|
||||
}
|
||||
}
|
||||
|
||||
void GyverUart::startTransmission() {
|
||||
while (!(UCSR0A & (1<<UDRE0)));
|
||||
if (_UART_TX_BUFFER_HEAD != _UART_TX_BUFFER_TAIL) {
|
||||
unsigned char c = _UART_TX_BUFFER[_UART_TX_BUFFER_TAIL];
|
||||
_UART_TX_BUFFER_TAIL = (_UART_TX_BUFFER_TAIL + 1) % UART_TX_BUFFER_SIZE;
|
||||
UDR0 = c;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
ISR(USART_TX_vect) {
|
||||
if (_UART_TX_BUFFER_HEAD != _UART_TX_BUFFER_TAIL) {
|
||||
unsigned char c = _UART_TX_BUFFER[_UART_TX_BUFFER_TAIL];
|
||||
_UART_TX_BUFFER_TAIL = (_UART_TX_BUFFER_TAIL + 1) % UART_TX_BUFFER_SIZE;
|
||||
UDR0 = c;
|
||||
}
|
||||
}
|
||||
|
||||
void GyverUart::println(void) {
|
||||
write('\r');
|
||||
startTransmission();
|
||||
write('\n');
|
||||
startTransmission();
|
||||
}
|
||||
|
||||
void GyverUart::print(char data) {
|
||||
write(data);
|
||||
startTransmission();
|
||||
}
|
||||
void GyverUart::println(char data) {
|
||||
print(data);
|
||||
@ -283,7 +327,7 @@ void GyverUart::println(double data, byte decimals) {
|
||||
void GyverUart::print(String data) {
|
||||
byte stringSize = data.length();
|
||||
for (byte i = 0; i < stringSize; i++) {
|
||||
write(data[i]);
|
||||
print(data[i]);
|
||||
}
|
||||
}
|
||||
void GyverUart::println(String data) {
|
||||
@ -294,7 +338,7 @@ void GyverUart::println(String data) {
|
||||
void GyverUart::print(char data[]) {
|
||||
byte i = 0;
|
||||
while (data[i] != '\0') {
|
||||
write(data[i]);
|
||||
print(data[i]);
|
||||
i++;
|
||||
}
|
||||
}
|
||||
|
@ -2,6 +2,7 @@
|
||||
// Версия 1.2 - добавлен циклический буфер
|
||||
// версия 1.3 - пофикшен вывод float, добавлен вывод с базисом
|
||||
// Версия 1.4 - либа собрана в класс
|
||||
// Версия 1.5 - добавлен буфер на отправку и flush
|
||||
|
||||
#ifndef GyverUART_h
|
||||
#define GyverUART_h
|
||||
@ -24,6 +25,7 @@ public:
|
||||
char read();
|
||||
char peek();
|
||||
void clear();
|
||||
void flush();
|
||||
|
||||
void setTimeout(int timeout);
|
||||
int32_t parseInt();
|
||||
@ -61,6 +63,7 @@ private:
|
||||
void printHelper(int32_t data, byte base);
|
||||
void printHelper(uint32_t data, byte base);
|
||||
void printBytes(uint32_t data);
|
||||
void startTransmission();
|
||||
};
|
||||
|
||||
extern GyverUart uart;
|
||||
|
@ -19,21 +19,21 @@ sbi KEYWORD2
|
||||
analogStartConvert KEYWORD2
|
||||
analogGet KEYWORD2
|
||||
|
||||
uartBegin KEYWORD2
|
||||
uartEnd KEYWORD2
|
||||
uartPeek KEYWORD2
|
||||
uartClear KEYWORD2
|
||||
uartRead KEYWORD2
|
||||
uartWrite KEYWORD2
|
||||
uartPrint KEYWORD2
|
||||
uartPrintln KEYWORD2
|
||||
uartAvailable KEYWORD2
|
||||
uartSetTimeout KEYWORD2
|
||||
uartParseInt KEYWORD2
|
||||
uartReadString KEYWORD2
|
||||
uartParseFloat KEYWORD2
|
||||
uartParsePacket KEYWORD2
|
||||
lightInit KEYWORD2
|
||||
begin KEYWORD2
|
||||
end KEYWORD2
|
||||
peek KEYWORD2
|
||||
flush KEYWORD2
|
||||
clear KEYWORD2
|
||||
read KEYWORD2
|
||||
write KEYWORD2
|
||||
print KEYWORD2
|
||||
println KEYWORD2
|
||||
available KEYWORD2
|
||||
setTimeout KEYWORD2
|
||||
parseInt KEYWORD2
|
||||
readString KEYWORD2
|
||||
parseFloat KEYWORD2
|
||||
parsePacket KEYWORD2
|
||||
|
||||
ISR KEYWORD2
|
||||
|
||||
|
@ -1,6 +1,6 @@
|
||||

|
||||
# GyverCore for ATmega328
|
||||
**Версия 1.8.2 от 11.09.2019**
|
||||
**Версия 1.8.3 от 11.09.2019**
|
||||
Быстрое и лёгкое ядро для Arduino IDE с расширенной конфигурацией.
|
||||
Основано на оригинальном ядре Arduino версии 1.8.9, большинство функций заменены на более быстрые и лёгкие аналоги, убрано всё лишнее и не относящееся к микроконтроллеру ATmega328p, убран почти весь Wiring-мусор, код упрощён и причёсан. Добавлено несколько функций и интересных вариантов компиляции.
|
||||
Разработано by Александр **AlexGyver** и Egor 'Nich1con' Zaharov
|
||||
@ -20,10 +20,10 @@
|
||||
- Закрой окно
|
||||
- Выбери плату в **Инструменты > Плата > GyverCore > ATmega328/168 based**
|
||||
- Готово!
|
||||
- *Примечание*: файлы ядра находятся по пути C:\Users\Username\AppData\Local\Arduino15\packages\GyverCore\hardware\avr\1.8.2\
|
||||
- *Примечание*: файлы ядра находятся по пути C:\Users\Username\AppData\Local\Arduino15\packages\GyverCore\hardware\avr\1.8.3\
|
||||
|
||||
### Ручная
|
||||
- Файлы из папки GyverCore в этом репозитории положить по пути C:\Users\Username\AppData\Local\Arduino15\packages\GyverCore\hardware\avr\1.8.2\
|
||||
- Файлы из папки GyverCore в этом репозитории положить по пути C:\Users\Username\AppData\Local\Arduino15\packages\GyverCore\hardware\avr\1.8.3\
|
||||
|
||||
## Изменения
|
||||
### Облегчено и ускорено
|
||||
@ -236,3 +236,5 @@ parseFloat | 1070 | 246 | 824
|
||||
- 1.8.2
|
||||
- uart обёрнут в класс
|
||||
- Добавлена возможность заменить вызовы Serial на uart (через меню выбора платы)
|
||||
- 1.8.3
|
||||
- uart улучшен, добавлен буфер на отправку данных
|
@ -19,7 +19,7 @@ byte data11 = 0b11101011;
|
||||
uint32_t data12 = 0xFAB666;
|
||||
|
||||
void setup() {
|
||||
uart.begin();
|
||||
uart.begin(9600);
|
||||
uart.println(data0);
|
||||
uart.println(data1);
|
||||
uart.println(data2);
|
||||
|
@ -218,6 +218,20 @@
|
||||
{"name": "ATmega328 based boards"}
|
||||
],
|
||||
"toolsDependencies": []
|
||||
},
|
||||
{
|
||||
"name": "GyverCore",
|
||||
"architecture": "avr",
|
||||
"version": "1.8.3",
|
||||
"category": "Contributed",
|
||||
"url": "https://github.com/AlexGyver/GyverCore/releases/download/GyverCore-1.8.3/GyverCore.zip",
|
||||
"archiveFileName": "GyverCore.zip",
|
||||
"checksum": "MD5:a8c1027f1e91b24bcc93396081f4de6d",
|
||||
"size": "116149",
|
||||
"boards": [
|
||||
{"name": "ATmega328 based boards"}
|
||||
],
|
||||
"toolsDependencies": []
|
||||
}
|
||||
],
|
||||
"tools": []
|
||||
|
Reference in New Issue
Block a user