Не работает код на ATTiny10

Ну мне уже стало интересно ))) Ща…

Оооопачки!!!

uint16_t note[7] = {1911, 1432, 1517, 1432, 956, 956, 1911};
uint8_t i ;
uint32_t ms ;

void setup() {
//  pinMode(PB2, OUTPUT);
  DDRB |= (1 << PB2);
  i = 0;
  ms = millis();
}
void loop() {
  ms = millis();
  do {
    digitalWrite(PB2, HIGH);
    delayMicroseconds(note[i]);
    digitalWrite(PB2, LOW);
    delayMicroseconds(note[i]);
  } while (millis() - ms < 500);
  ms = millis();
  digitalWrite(PB2, LOW);
  delay(10);
  i++;
  if (i == 7) {
    digitalWrite(PB2, LOW);
    delay(500);
    i = 0;
  }
}

Вывод:

Скетч использует 548 байт (54%) памяти устройства. Всего доступно 1024 байт.
Глобальные переменные используют 14 байт (43%) динамической памяти, оставляя 18 байт для локальных переменных. Максимум: 32 байт.

6 байт сэкономил прямом доступом к регистру “на вывод”…

Ну собственно вот и причина - содержимое файла
ATtiny10Core-addon/hardware/avr/2.1.0/cores/tiny/wiring_time.c

Спойлер
#include <Arduino.h>

void delay(uint32_t ms) {
#if defined(_TINY10_MILLIS_IMPLEMENT) && defined(_TINY10_TIMER_INIT)
  uint32_t start = millis();
  while (millis() - start < ms);	// Делей на миллисе если он есть
#else
  while (ms) {						// Или цикл 
    _delay_ms(1);					// С фикс. делеем
    ms--;
  }
#endif
}

void delayMicroseconds(uint32_t us) {
  while (us) {						// Тут всегда цикл					
    _delay_us(1);   
    us--;
  }
}

#ifdef _TINY10_MILLIS_WDT				// Миллис на WDT
volatile uint32_t _wdt_millis_cnt = 0;	// Счетчик

uint32_t millis(void) {    				// Миллис
  return (uint32_t)_wdt_millis_cnt;     // Возвразаем счетчик	     
}

ISR(WDT_vect) {							// Прерывание WDT
  _wdt_millis_cnt += 16;				// Добавляем 16 (шаг 16 мс)
}
#endif

#ifdef _TINY10_MILLIS_IMPLEMENT	        // Полноценный ардуиновский millis/micros
#define MICROSECONDS_PER_TIMER0_OVERFLOW (clockCyclesToMicroseconds(64 * 256))
#define MILLIS_INC (MICROSECONDS_PER_TIMER0_OVERFLOW / 1000)
#define FRACT_INC ((MICROSECONDS_PER_TIMER0_OVERFLOW % 1000) >> 3)
#define FRACT_MAX (1000 >> 3)
#define MICROS_MULT (64 / clockCyclesPerMicrosecond())

volatile uint32_t timer0_overflow_count = 0;
volatile uint32_t timer0_millis = 0;
static uint8_t timer0_fract = 0;

uint32_t millis(void) {    
  return (uint32_t)timer0_millis;          
}

uint32_t micros(void) {
  return (uint32_t)(((timer0_overflow_count << 8) + TCNT0) * MICROS_MULT);
}

ISR(TIM0_OVF_vect) {
  timer0_millis += MILLIS_INC;
  timer0_fract += FRACT_INC;
  if (timer0_fract >= FRACT_MAX) {
    timer0_fract -= FRACT_MAX;
    timer0_millis++;
  }
  timer0_overflow_count++;
}
#endif

Поддержка миллис требует 17 байт оперативки. А у ТС я насчитал 19 байт

Итого 17 +19 = 36 , а в наличии всего 32

так вранье же… как все у гайвера.
В самом аддоне только на поддержку миллис тратится 17 байт, может и что есть, не искал

А почему миллис 17 байт?

Так глобальные ЖЕ )))

Это как это так 534? ))
Я всё свежее ставил (правда на 1.8.19)

Немного обсчитался, 13.
Строчки 23, 41, 42 и 43 по листингу из #24

И плюс еще байт, наверно, 12 - локальных

там если говна то повыкидывать ненужного

Ты мне лучше обьясни, как вот эти три строки

uint16_t note[7] = {1911, 1432, 1517, 1432, 956, 956, 1911};
uint8_t i ;
uint32_t ms ;

сочетаются с сообщением ИДЕ о 14 байтах глобальных переменных???

Я 11 насчитал… Итого 14 + 11 = 25 байт, но даже если 12 - то будет 26 байт, всё в норме…

Тоже не очень понял…

не могу))
сам сижу глаза луплю))
оптимизация :rofl:

и те 5 байт в 31 байт уложились ))

У меня цифры другие… они не укладываются Ж)

Так что ТС гонит, что не работает ))

одну ноту выкинуть и оставить только до ре ми до ре до

Я видел, откуда 12 байт то локальных?
Распиши…