Ви не увійшли.
Точно Дякую.
Колись учили ассемблер x86, там все якось більш зрозуміло було
Цікаві досліди
sts 0x0000, r1 ; 0x<__SREG__+0x7fffc1> R_AVR_16 i14+0x1
Записуємо 0 після i14? наче в С коді не було. Чи це вже щось наступне?
А можна трохи пояснень?
А то відкрив систему команд AVR і ні%%я не пойняв
lds r24, 0x0000 ; завантажили в r24 те що лежало в RAM за адресою 0х0000? serialBuf? старший байт?
bst r24, 2 ; поклали в Т біт 2, 2^2=0х4; ок
eor r24, r24 ; обнулили r24; ок
bld r24, 0 ; встановили молодший біт в значення, збережене в Т; 0 або 1; ок
sts 0x0000, r24 ; зберігаємо 0/1 в 0х0000? назад в serialBuf?
sts 0x0000, r1 ; а що в r1??
Трюк з bst-eor-bld зовсім неочевидний, я б не додумався. Компілятор оптимізує однозначно краще. А що робить lds-sts - незрозуміло.
А можна якийсь приклад, зрозумілий колгоспникам? А то те що гуглиться - в стилі "ну.. можна робити всяке.. програму там написати".. Як на мене, програму під ардуїну написати ще простіше, приклади є прямо в IDE, і вона сама собі програматор.
Трохи не зрозуміло навіщо резистор між gnd і gnd.
https://nicuflorica.blogspot.com/2013/10/afisaj-de-nokia-3410-comandat-de-arduino.html - наче успішний експеримент.
Тільки не кажіть, що ви виграли тендер на реконструкцію ліфта!! (мотори, кінцевики..) бо я подивився відео і мені стало зле.
и хочется попробовать Ардуино.
Будь яка девборда. Абсолютно будь яка. Головне щоб вистачило ніг для gpio - порахуйте. Я б рекомендував RPI2040 - заливка прошивки без програматора і можливість debug - це капєц зручно. Або blue pill - але до нього треба програматор st-link v2. А так, arduino - кросплатформний фреймворк, працює майже на будь якому процесорі.
https://arduino.ua/prod1328-plata-razrabotchika-stm32f103c8t6-arm-stm32-minimalnaya-konfigyraciya
https://arduino.ua/prod6050-plata-rozrobnika-rp2040-zero-dual-core-2mb
могли бы вы привести ссылку, плиз?
https://docs.arduino.cc/built-in-examples/basics/Blink/
мені не жалко, але як на мене без вміння гуглити зараз складно
концевики - обычные механические, с механическим триггером. есть смысл их через опторазвязку?
це ж ваші кінцевики, не мої. якщо в ліфт, там де 100 метрів кабелю і кілька кіловат мотор - мабуть є смисл. Якщо в робота-аніматроніка - мабуть немає.
І чому ця форма запису ніде не задокументована?!
Задокументована ж. Просто це компіляторо-залежне розширення, наприклад sdcc так не вміє.
Не знаю що таке SBC (Session Border Controller? Subband Coding? Sensotronic Brake Control?). Але щоб клацати релюшками, годиться абсолютно будь-який мікроконтроллер. Хоч і Intel 4004 Головне щоб вистачило ніг на GPIO. А якщо не вистачить - можна взяти розширювач GPIO, або ще один контроллер.
Що воно повинно робити крім клацання реле?
Прикольно avr-gcc так вміє.
І воно дійсно працює як діапазон
rIndex = 0;
switch (rIndex) {
case 1 ... 31:
rIndex = 100;
break;
default:
rIndex = 101;
};
цей код транслюється в таке
lds r24,rIndex
mov __tmp_reg__,r24
lsl r0
sbc r25,r25
sbiw r24,1
sbiw r24,31
brsh .L2
ldi r24,lo8(100)
sts rIndex,r24
rjmp .L4
.L2:
ldi r24,lo8(101)
sts rIndex,r24
.L4:
Константи 1 і 31 видно очима
Так, ARDUINO_AVR_UNO більш підходить під задачу.
Тоді можна використати
Взагалі щоб задати правильне питання, треба знати половину відповіді. А якщо знаєш половину відповіді - іншу половину, скоріше за все, теж знаєш
void digitalWrite(uint8_t pin, uint8_t val)
{
uint8_t timer = digitalPinToTimer(pin);
uint8_t bit = digitalPinToBitMask(pin);
uint8_t port = digitalPinToPort(pin);
volatile uint8_t *out;
if (port == NOT_A_PIN) return;
Можна так
Або почитати як влаштовано pins_arduino.h
щоб не множити окремі скетчі до різних плат
#idef __AVR_ATmega8__
#else
#endif
Для кожної вашої каменюки - свій ifdef. І зробити, щоб під неправильний камінь не зібралось. І буде вам щастя.
Бо не домовились що робити з пустими полями.
Взагалі без розуміння задумки автора - складно.
sizeof(data)/sizeof(data[0]) часто зустрічаю. Теж не люблю. А так.. Неочевидно трохи. Я здогадуюсь що в С масив і вказівник майже синоніми, і так теж можна. Але в такому записі легко допустити помилку, і компілятор її нормально пропустить. І фіг потім знайдете що не так
sizeof(data)/sizeof(*data)
Не люблю. І щось мені здається що там помилка
#define DATA_SIZE 10
int data[DATA_SIZE];
Просто і зрозуміло.
розділення на масив має буте швидше, ниж займатися розділом після отримання...
Число операцій приблизно однакове. Розпихувати операції з розбором окремих полів має смисл, якщо одна велика операція в ваші обмеження не влізе. Ну, зробите це окремою функцією, будете викликати після кожного розділювача. Головне - не робити суперфункцій з суперциклами і глобальними суперзмінними. Робіть функції прості і зрозумілі.
Ви намагаєтесь робити складно. Робіть просто.
1. просто приймайте символи в буфер. Коли приймете n - обробіть весь буфер зразу. Якщо буфер переповниться - ну, придумайте щось. Це помилка в даних.
2. обробка буфера. знаходите розділювачі полів, викусюєте частини з цифрами, перетворюєте в int. int кидаєте в масив.
Весь алгоритм.
Не треба придумувати байто@0bства на рівному місці. Не треба економити рядки коду. Не треба придумувати саморобні парсери. atoi нормально працює.
В тому й річ що ніяк. На то воно й undefined. Стежте за попередженнями компілятора, хоча це 100% гарантії не дасть, на цей код він не дає попереджень. Є статичні аналізатори, хттпс://cppcheck.sourceforge.io/demo/ наприклад. Цей ловить.
Cppcheck 2.10
[test.cpp:10]: (error) Array 'rArr[10]' accessed at index 10, which is out of bounds.
Done!
jokeR пише:Ось наприклад я взяв такий код ....
ось тут я не розумію, як цей код пов'язон читанням повідоилень і як він реагує на закінчення повідомлення?
Це відноситься до експлуатації undefined behavior. Вам просто повезло що байти удачно розмістились.
Ну, а delay() у вас там навіщо?
void loop() {
String textcom = ""; // переменная для сбора текста из сом-порта
while (Serial.available() >
Пояснюю ще раз.
Як тільки ця умова перестане виконуватись - ви вивалитесь з функції loop(). Це відбудеться, коли ви читаєте з порту швидше ніж туди пишуть. При наступному запуску (це відбувається дуже швидко) String textcom знову очиститься.
Не треба робити ініціалізацію таким чином. Робіть її в setup. І очищайте буфер коли вам потрібно.
А нестабільність тому, що вам треба підібрати точно таку затримку, щоб читати з точно такою швидкістю, з якою туди пишуть. Очевидно, це неможливо.
Ну так ви зробили щось не те що вам пропонували.
Ось наприклад я взяв такий код
#include <stdio.h>
int rArr[10]; // = {0};
int rIndex; // = 0;
int main()
{
rArr[10] = {0};
rArr[1] = 1;
rIndex = 0;
return rIndex+rArr[0];
}
і прогнав його через godbolt.org
__SP_H__ = 0x3e
__SP_L__ = 0x3d
__SREG__ = 0x3f
__tmp_reg__ = 0
__zero_reg__ = 1
rArr:
.zero 20
rIndex:
.zero 2
main:
push r28
push r29
in r28,__SP_L__
in r29,__SP_H__
.L__stack_usage = 2
sts rArr+20+1,__zero_reg__ ; тут видно, що rArr[10] = {0}; попадає мимо масиву. насправді обнуляється rIndex
sts rArr+20,__zero_reg__
ldi r24,lo8(1)
ldi r25,0
sts rArr+2+1,r25
sts rArr+2,r24
sts rIndex+1,__zero_reg__ ; rIndex = 0; - обнуляється ще раз
sts rIndex,__zero_reg__
lds r18,rArr
lds r19,rArr+1
lds r24,rIndex ж
lds r25,rIndex+1
add r24,r18
adc r25,r19
pop r29
pop r28
ret
Вам просто повезло.
Упсь. Без резистора 3.48В. Походу підтяжка 5.1к на 3.3в.
Упсь №2. Якщо підключити тільки 1 резистор, а другу лінію залишити вільною - запускається.
Не розпарсив hmm
Сорян, радіоринок на Караваєвих дачах Думаю що постачальники ті ж самі.
А тепер саме цікаве. вношу в лінію CC свою ємність (лізу міряти напругу) - і зарядка запускається. І продовжує працювати далі. Неочікуваний спецефект.
З"явилась необхідність отримати 5В від зарядки з виходом type-c. Судячи з манів, просто так вона їх не віддасть. Треба щоб із сторони пристрою на лініях CC1 і CC2 були pull down резистори 5.1к. В роз"ємі що я купив - pull-up на 56к, тобто це роз"єм для зарядки. Ок, читаю хттпс://electronics.stackexchange.com/questions/688168/usb-c-c2c-xn005-56-as-5v-power-supply, киваю, перепаюю резистори. Все одно не працює. На резисторах падає 1.6В, зарядка напругу не віддає
Що я пропустив?
Ви ж, сподіваюсь, платформу та фреймворк lgt8fx використовуєте для LGT8F, а не atmelavr та arduino-avr?
Обіжаєте
[env:LGT8F328P]
platform = lgt8f
board = LGT8F328P
framework = arduino
Можете зарепортити issue у FastLED.
Ну, так.
Походу, для LED стрічок це не найкращий контроллер