1. Исправления в библиотеке EEPROM:
- исправлена работа EEPROM.put() при записи объектов по невыравненным адресам;
- исправлено чтение EEPROM.get() для объектов, занимающих несколько страниц;
- добавлены проверки выхода адреса и объекта за пределы EEPROM, убран переход записи/чтения в начало памяти при достижении конца EEPROM;
- EEPROM.put() теперь стирает и записывает страницу, только если данные изменились.
2. Исправления в библиотеке HardwareSerial:
- в обработчике прерываний по приему данных вычисление индекса для следующего принятого байта перенесено в цикл обработки принятых данных;
- размер буфера для приема теперь задается, только если не был задан ранее.
3. Использование драйвера при загрузке скетчей или загрузчика через программатор теперь задается отдельно для каждой платы - драйвер используется только при работе с платой START-MIK32.
Co-authored-by: KLASSENTS <klassen@elron.tech>
Co-committed-by: KLASSENTS <klassen@elron.tech>
This commit was merged in pull request #32.
This commit is contained in:
klassents authored and klassents committed 2026-05-13 07:59:59 +03:00
1 parent 48f0786566
commit 41867b00a2
7 files changed
+96 -59

No files matched your search

+4 -6
View File
@@ -121,18 +121,16 @@ int HardwareSerial::availableForWrite(void)
void HardwareSerial::rx_complete_irq(void)
{
// which UART to use
UART_TypeDef* uart = UART_0;
if (uartNum == 1)
uart = UART_1;
// find next index in buffer with upper limit
uint8_t i = (uint8_t)(_rx_buffer_head + 1)%SERIAL_RX_BUFFER_SIZE;
UART_TypeDef* uart = (uartNum == 1) ? UART_1 : UART_0;
rx_buffer_index_t i;
unsigned char c;
// while there is something to receive, put the data into the buffer
// and edit the buffer index
while(!UART_IS_RX_FIFO_EMPTY(uart))
{
c = UART_READ_BYTE(uart);
// find next index in buffer with upper limit
i = (unsigned int)(_rx_buffer_head + 1)%SERIAL_RX_BUFFER_SIZE;
if (i != _rx_buffer_tail)
{
// write if there is space in the buffer
+10 -2
View File
@@ -41,7 +41,15 @@
// often work, but occasionally a race condition can occur that makes
// Serial behave erratically. See https://github.com/arduino/Arduino/issues/2405
#if !defined(SERIAL_RX_BUFFER_SIZE)
#define SERIAL_RX_BUFFER_SIZE 64
#endif
#if (SERIAL_RX_BUFFER_SIZE>256)
typedef uint16_t rx_buffer_index_t;
#else
typedef uint8_t rx_buffer_index_t;
#endif
// Define config for Serial.begin(baud, config);
// parity: 7...4 bits = 0 (no), 2 (even), 3 (odd)
@@ -68,8 +76,8 @@
class HardwareSerial : public Stream
{
protected:
volatile uint8_t _rx_buffer_head;
volatile uint8_t _rx_buffer_tail;
volatile rx_buffer_index_t _rx_buffer_head;
volatile rx_buffer_index_t _rx_buffer_tail;
unsigned char _rx_buffer[SERIAL_RX_BUFFER_SIZE];
private: