|
Cortex M3, M4 - разрядность переменных. |
|
|
|
Jul 11 2014, 11:47
|
Профессионал
    
Группа: Свой
Сообщений: 1 047
Регистрация: 28-06-07
Из: Israel
Пользователь №: 28 763

|
Какую разрядность переменных, лучше выбирать в случае когда "а пофиг" ? Например флаг, который может быть 0 или1, максимум -1, или считающий до 10 счетчик, и тому подобное, когда можно и u8, и s8, и u32б и s32. Памяти-то в Кортексах обычно более чем достаточно, и экономить нужно не всегда, но влияет-ли это на быстродействие программы? Есть ли разница для локальных и глобальных переменных, и для volatile?
Спасибо.
|
|
|
|
3 страниц
1 2 3 >
|
 |
Ответов
(1 - 14)
|
Jul 11 2014, 16:10
|
Гуру
     
Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713

|
Цитата(Allregia @ Jul 11 2014, 17:47)  Есть ли разница для локальных и глобальных переменных, и для volatile? Для локальных переменных, аргументов/результатов функций, используйте всегда нативные типы данных - int/uint. Даже в случае экономии ОЗУ. По занимаемому ОЗУ не будет никакой разницы, но кол-во команд однозначно будет меньше. Для хранения в static памяти, нет большой разницы, но всё-же нативные типы тоже в некоторых случаях требуют меньше команд (или команды короче), так что для одиночных переменных - лучше они. Для массивов лучше элементы меньшей разрядности (и в целях быстродействия операций с ними - тоже лучше). Но это моё имхо, не уверен, но надеюсь на повсеместное наличие write-back caching в M3/M4. Так что здесь предпочтение: u8/s8/u16/s16.
|
|
|
|
|
Jul 12 2014, 08:41
|

неотягощённый злом
     
Группа: Свой
Сообщений: 2 746
Регистрация: 31-01-08
Из: Санкт-Петербург
Пользователь №: 34 643

|
Цитата(ViKo @ Jul 12 2014, 11:06)  И еще stdbool.h, и использовать bool тип. Ну это как раз спорно. Т.к. sizeof(bool) are implementation-defined и зачастую sizeof(bool)==sizeof(int), что для 8-ми битных контроллеров весьма печально. Поэтому у меня наложено табу на stdbool.h в ембедед разработках. А про uint_fast8_t Сергей дело говорит.
--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
|
|
|
|
|
Jul 12 2014, 09:56
|

неотягощённый злом
     
Группа: Свой
Сообщений: 2 746
Регистрация: 31-01-08
Из: Санкт-Петербург
Пользователь №: 34 643

|
Цитата(ViKo @ Jul 12 2014, 13:03)  Тогда - битовые поля. И потом для обеспечения атомарного доступа обрамлять к ним доступ критическими секциями. Увольте. Единственный костыль для кортексов - это битбанд доступ к этим битам в поле. Но эти извращения должны быть сильно оправданы. Цитата(skripach @ Jul 12 2014, 13:42)  Разница конечно есть, но она ничтожна, нужно использовать тот тип данных который нужен. uint_fast8_t - наше всё
--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
|
|
|
|
|
Jul 12 2014, 10:42
|
Профессионал
    
Группа: Свой
Сообщений: 1 047
Регистрация: 28-06-07
Из: Israel
Пользователь №: 28 763

|
Цитата(demiurg_spb @ Jul 12 2014, 11:56) 1268117[/url]'] И потом для обеспечения атомарного доступа обрамлять к ним доступ критическими секциями. Увольте. Единственный костыль для кортексов - это битбанд доступ к этим битам в поле. Но эти извращения должны быть сильно оправданы. uint_fast8_t - наше всё  Спасибо всем.Чем отличается uint_fast8_t от просто u8 ? Насколько я понимаю, и то и то - байт? Хотя нет - фаст это инт, т.е. 32 бита. Тогда непонятно - зачем фаст8, фаст16, фаст32, если все это инт?
|
|
|
|
|
Jul 12 2014, 22:03
|
Профессионал
    
Группа: Свой
Сообщений: 1 047
Регистрация: 28-06-07
Из: Israel
Пользователь №: 28 763

|
Еще пара вопросов про плавающую точку: 1) как я понял, чтобы М4 использовал FPU, надо чтобы все переменные были только float, а если double - то FPU не задействуется? 2) На такую строчку: Код static float b0, b1; ...
b0 = b0* 0.99765 + b1*0.0990460; Keil дает ворнинг: #1035-D: single-precision operand implicitly converted to double-precision Откуда тут double берется, и будет ли это считаться через FPU или мимо?
|
|
|
|
|
Jul 12 2014, 22:22
|
Частый гость
 
Группа: Свой
Сообщений: 150
Регистрация: 13-10-05
Пользователь №: 9 614

|
Цитата(Allregia @ Jul 13 2014, 01:03)  Откуда тут double берется, и будет ли это считаться через FPU или мимо? У Вас константы типа double, соответственно переменные также приводятся к double и вычисления будут двойной точности и "FPU мимо". Добавьте к константам суффикс F
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|