Чт май 14, 2020 09:30:01
Чт май 14, 2020 09:54:51
a = (a | ((1<<2) | (1<<0))) & ~((1<<4) | (1<<1));
a |= ((1<<2) | (1<<0));
a &= ~((1<<4) | (1<<1));
Чт май 14, 2020 09:55:52
Чт май 14, 2020 13:06:42
const __flash char lcd_data[] = "строка";
Чт май 14, 2020 13:18:41
#define MY_STRING "строка"
#define MY_STRING_LEN sizeof(MY_STRING)
const __flash char lcd_data[] = MY_STRING;
Чт май 14, 2020 13:26:54
volatile uint8_t a = 1;
const __flash char lcd_data[] = "stroka";
int main() {
a = sizeof(lcd_data);
56: 87 e0 ldi r24, 0x07 ; 7
58: 80 93 60 00 sts 0x0060, r24 ; 0x800060 <__data_start>
Чт май 14, 2020 13:32:29
я сказал "напрямую", т.е. невозможно заранее предсказать, какой именно код получится от 1, 2 или 3 строчной записи одного и того же действия. например, в случае не-volatile может и 100500 строк превратиться в одну командуПростоНуб писал(а):связана
не поленился, поднял документы... ошибаетесь вы:NStorm писал(а):Нет там никаких 3х этапов, путаете что-то.
в конкретно вашем примере, как вам посоветовали, через sizeof. но вообще-то для этого есть в модуле avr/pgmspace.h специальная функция strlen_P, которая вычислит длину любой строки в памяти программ.Shuspano писал(а):Как узнать длину строки в такой конструкции, не считая это вручную:
Чт май 14, 2020 13:39:53
Чт май 14, 2020 14:08:33
Чт май 14, 2020 15:14:58
как не о том?! написано же: берет все биты и записывает обратно установенные в 1 - чистое RMW
кстати, даже стало любопытно, что будет, если послать в USART байт 0xFF, а в обработчике прерываний сделать CBI UDR, 1 ? хотя, конечно, это не совсем то, о чем мы тут говорим, но зато убедительно докажет RMW или не-RMW команда CBI/SBI
Цитата из ДШ мега48
Some of the Status Flags are cleared by writing a logical one to them. Note that, unlike most other AVRs, the CBI and SBI instructions will only operate on the specified bit, and can therefore be used on registers containing such Status Flags. The CBI and SBI instructions work with registers 0x00 to 0x1F only.
И такое поведение команд CBI и SBI свойственно для всех АВРок, начиная с тини13, то есть, все выпущенные за последние 3 года модели. Неужели некоторые уже 3 года не читали даташитов? А вера здесь не при чём.
I believe that these are actually incorrect. In older AVRs the sbi/cbi opcodes did indeed affect other bits in the register and therefore one had to be careful not to use them in registers that contained interrupt flags. However, as the line I quoted above says, in newer AVRs these opcodes only affect the desired bit. Likely these are just copy-paste errors from older datasheets.
Чт май 14, 2020 15:36:27
Чт май 14, 2020 18:36:34
Чт май 14, 2020 19:15:06
......
#define TICK_PER_CURRENT_PERIOD (200)
......
const uint8_t VALUE_TICK_PER_CURRENT_PERIOD = TICK_PER_CURRENT_PERIOD;
......
const uint8_t SCHEDULE1 = (VALUE_TICK_PER_CURRENT_PERIOD + 1);
Чт май 14, 2020 20:15:33
Чт май 14, 2020 22:36:56
а вот так умеет?VladislavS писал(а):А тем временем GCC 10 теперь вот так умеет
#define правда true
#define брехня false
typedef bool логическое;
логическое значение = брехня;
Чт май 14, 2020 22:42:50
Чт май 14, 2020 23:05:28
Чт май 14, 2020 23:18:49
Потом будут думать откуда погрешности в расчетах...VladislavS писал(а):Они ведь серьёзно считают, что Пи это знаковая целая константа, равная 3.
Чт май 14, 2020 23:41:51
,ПростоНуб писал(а):Ну и кодировку учитывайте при кириллице. Если вдруг в utf-8 запишите, будет 13 байт соотв, по 2 байта на символ.
ПростоНуб писал(а):
Shuspano,
- Код:
#define MY_STRING "строка"
#define MY_STRING_LEN sizeof(MY_STRING)
const __flash char lcd_data[] = MY_STRING;
Чт май 14, 2020 23:50:56
int strlegnt = MY_STRING_LEN