|
работа со строками avr gcc |
|
|
|
Oct 1 2017, 14:28
|
Местный
  
Группа: Участник
Сообщений: 280
Регистрация: 18-03-17
Пользователь №: 95 877

|
Привет. Скажите пожалуйста. Если написать: Код const uchar Fill_lye_ENG[] PROGMEM = "step1"; окончиться ли строка нулем '\0' ? Просто не понятно если строка записанная во флешь не окончиться нулем '\0' то как понять где конец строки?
|
|
|
|
|
 |
Ответов
|
Oct 1 2017, 15:23
|
Гуру
     
Группа: Участник
Сообщений: 2 219
Регистрация: 16-08-12
Из: Киров
Пользователь №: 73 143

|
Цитата(Alex_Golubev @ Oct 1 2017, 17:28)  Привет. Скажите пожалуйста. Если написать: Код const uchar Fill_lye_ENG[] PROGMEM = "step1"; окончиться ли строка нулем '\0' ? Просто не понятно если строка записанная во флешь не окончиться нулем '\0' то как понять где конец строки? В Си строки заканчиваются 0, не важно, какой компилятор, будет выделено 6 байт, последний =0.
|
|
|
|
|
Oct 2 2017, 16:31
|
Знающий
   
Группа: Участник
Сообщений: 750
Регистрация: 1-11-11
Пользователь №: 68 088

|
Цитата(mantech @ Oct 2 2017, 18:44)  В общем случае - да, но в контексте 8бит МК - байт и char - одно и тоже. А в контексте Intel Pentium Pro ?
--------------------
"... часами я мог наблюдать, как люди работают." (М. Горький)
|
|
|
|
|
Oct 6 2017, 12:13
|
Знающий
   
Группа: Участник
Сообщений: 750
Регистрация: 1-11-11
Пользователь №: 68 088

|
Цитата(jcxz @ Oct 4 2017, 19:22)  Или Вы хотите сказать, что любой компилятор для этих архитектур всегда выделяет по 4 байта для любой переменной?? Конечно это неправда. Зависит от заданного уровня оптимизации кода.
--------------------
"... часами я мог наблюдать, как люди работают." (М. Горький)
|
|
|
|
|
Oct 7 2017, 14:18
|

Гуру
     
Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095

|
QUOTE (jcxz @ Oct 7 2017, 10:52)  К тому же - лишено всякого смысла для оптимизации, поэтому - не верю. Насколько помню, ARM7TDMI не имеет специальных арифметических команд работы с байтами, потому все байтовые операции выполняются в 32 битах и в конце на результат принудительно накладывается маска. Поэтому тип uint_fast8_t имеет разрядность 32 бита, что позволяет избежать этих накладываний маски. Таким образом, для оптимизации смысл есть, но возможность работать с "честными" байтами остается.
--------------------
На любой вопрос даю любой ответ"Write code that is guaranteed to work, not code that doesn’t seem to break" ( C++ FAQ)
|
|
|
|
|
Oct 7 2017, 18:20
|
Гуру
     
Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713

|
Цитата(Сергей Борщ @ Oct 7 2017, 17:18)  Насколько помню, ARM7TDMI не имеет специальных арифметических команд работы с байтами, потому все байтовые операции выполняются в 32 битах и в конце на результат принудительно накладывается маска. Не важно какие арифметические команды имеет этот CPU. Так как это ядро не имеет арифметических (или логических) команд с операндами в памяти. Любой операнд должен быть предварительно загружен в регистр, а результат операции - выгружен в ОЗУ соответствующими командами LDR/STR. Команды LDR/STR имеют варианты для 8-,16- и 32-битных данных. И выполняются за одинаковое время. Никаких масок на 8-битный результат накладывать не надо - можно сразу выполнить STRB.
|
|
|
|
Сообщений в этой теме
Alex_Golubev работа со строками avr gcc Oct 1 2017, 14:28     gerber Цитата(jcxz @ Oct 2 2017, 20:34) Это в пе... Oct 2 2017, 20:48      jcxz Цитата(gerber @ Oct 3 2017, 03:48) Ого... Oct 3 2017, 08:14      aaarrr Цитата(mantech @ Oct 3 2017, 22:29) Не фа... Oct 3 2017, 20:19           aaarrr Цитата(jcxz @ Oct 7 2017, 21:20) Никаких ... Oct 7 2017, 18:27 SSerge Цитата(Alex_Golubev @ Oct 1 2017, 21:28) ... Oct 4 2017, 10:10
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|