реклама на сайте
подробности

 
 
> работа со строками avr gcc
Alex_Golubev
сообщение Oct 1 2017, 14:28
Сообщение #1


Местный
***

Группа: Участник
Сообщений: 280
Регистрация: 18-03-17
Пользователь №: 95 877



Привет.
Скажите пожалуйста. Если написать:
Код
const uchar Fill_lye_ENG[] PROGMEM = "step1";

окончиться ли строка нулем '\0' ? Просто не понятно если строка записанная во флешь не окончиться нулем '\0' то как понять где конец строки?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
mantech
сообщение Oct 1 2017, 15:23
Сообщение #2


Гуру
******

Группа: Участник
Сообщений: 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.
Go to the top of the page
 
+Quote Post
jcxz
сообщение Oct 1 2017, 15:52
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713



Цитата(mantech @ Oct 1 2017, 22:23) *
В Си строки заканчиваются 0, не важно, какой компилятор, будет выделено 6 байт, последний =0.

Только не 6 байт, а 6 элементов типа char.
Go to the top of the page
 
+Quote Post
mantech
сообщение Oct 2 2017, 15:44
Сообщение #4


Гуру
******

Группа: Участник
Сообщений: 2 219
Регистрация: 16-08-12
Из: Киров
Пользователь №: 73 143



Цитата(jcxz @ Oct 1 2017, 18:52) *
Только не 6 байт, а 6 элементов типа char.

В общем случае - да, но в контексте 8бит МК - байт и char - одно и тоже.
Go to the top of the page
 
+Quote Post
gerber
сообщение Oct 2 2017, 16:31
Сообщение #5


Знающий
****

Группа: Участник
Сообщений: 750
Регистрация: 1-11-11
Пользователь №: 68 088



Цитата(mantech @ Oct 2 2017, 18:44) *
В общем случае - да, но в контексте 8бит МК - байт и char - одно и тоже.

А в контексте Intel Pentium Pro ?


--------------------
"... часами я мог наблюдать, как люди работают." (М. Горький)
Go to the top of the page
 
+Quote Post
jcxz
сообщение Oct 2 2017, 17:34
Сообщение #6


Гуру
******

Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713



Цитата(gerber @ Oct 2 2017, 23:31) *
А в контексте Intel Pentium Pro ?

Это в первую очередь определяется не архитектурой, а компилятором.
Go to the top of the page
 
+Quote Post
mantech
сообщение Oct 3 2017, 19:29
Сообщение #7


Гуру
******

Группа: Участник
Сообщений: 2 219
Регистрация: 16-08-12
Из: Киров
Пользователь №: 73 143



Цитата(jcxz @ Oct 2 2017, 20:34) *
Это в первую очередь определяется не архитектурой, а компилятором.

Не факт, например, в архитектуре АРМ7 или 9 под любой элемент выделится 4 байта(32бита)
Go to the top of the page
 
+Quote Post
jcxz
сообщение Oct 4 2017, 16:22
Сообщение #8


Гуру
******

Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713



Цитата(mantech @ Oct 4 2017, 02:29) *
Не факт, например, в архитектуре АРМ7 или 9 под любой элемент выделится 4 байта(32бита)

Архитектура не выделяет байты. Байты выделяет компилятор.
Или Вы хотите сказать, что любой компилятор для этих архитектур всегда выделяет по 4 байта для любой переменной?? Конечно это неправда.
Go to the top of the page
 
+Quote Post
gerber
сообщение Oct 6 2017, 12:13
Сообщение #9


Знающий
****

Группа: Участник
Сообщений: 750
Регистрация: 1-11-11
Пользователь №: 68 088



Цитата(jcxz @ Oct 4 2017, 19:22) *
Или Вы хотите сказать, что любой компилятор для этих архитектур всегда выделяет по 4 байта для любой переменной?? Конечно это неправда.

Зависит от заданного уровня оптимизации кода.


--------------------
"... часами я мог наблюдать, как люди работают." (М. Горький)
Go to the top of the page
 
+Quote Post
jcxz
сообщение Oct 7 2017, 07:52
Сообщение #10


Гуру
******

Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713



Цитата(gerber @ Oct 6 2017, 19:13) *
Зависит от заданного уровня оптимизации кода.

Никогда не встречал такого. Приведите пример.
К тому же - лишено всякого смысла для оптимизации, поэтому - не верю.
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Oct 7 2017, 14:18
Сообщение #11


Гуру
******

Группа: Модераторы
Сообщений: 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)
Go to the top of the page
 
+Quote Post
jcxz
сообщение Oct 7 2017, 18:20
Сообщение #12


Гуру
******

Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713



Цитата(Сергей Борщ @ Oct 7 2017, 17:18) *
Насколько помню, ARM7TDMI не имеет специальных арифметических команд работы с байтами, потому все байтовые операции выполняются в 32 битах и в конце на результат принудительно накладывается маска.

Не важно какие арифметические команды имеет этот CPU. Так как это ядро не имеет арифметических (или логических) команд с операндами в памяти.
Любой операнд должен быть предварительно загружен в регистр, а результат операции - выгружен в ОЗУ соответствующими командами LDR/STR.
Команды LDR/STR имеют варианты для 8-,16- и 32-битных данных. И выполняются за одинаковое время.
Никаких масок на 8-битный результат накладывать не надо - можно сразу выполнить STRB.
Go to the top of the page
 
+Quote Post

Сообщений в этой теме


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 5th August 2025 - 21:28
Рейтинг@Mail.ru


Страница сгенерированна за 0.01493 секунд с 7
ELECTRONIX ©2004-2016