Реклама на сайте English version  DatasheetsDatasheets

KAZUS.RU - Электронный портал. Принципиальные схемы, Datasheets, Форум по электронике

Новости электроники Новости Литература, электронные книги Литература Документация, даташиты Документация Поиск даташитов (datasheets)Поиск PDF
  От производителей
Новости поставщиков
В мире электроники

  Сборник статей
Электронные книги
FAQ по электронике

  Datasheets
Поиск SMD
Он-лайн справочник

Принципиальные схемы Схемы Каталоги программ, сайтов Каталоги Общение, форум Общение Ваш аккаунтАккаунт
  Каталог схем
Избранные схемы
FAQ по электронике
  Программы
Каталог сайтов
Производители электроники
  Форумы по электронике
Помощь проекту


Ответ
Опции темы
Непрочитано 01.04.2012, 00:46   #1411
shyub
Прописка
 
Регистрация: 20.08.2008
Сообщений: 260
Сказал спасибо: 305
Сказали Спасибо 76 раз(а) в 42 сообщении(ях)
shyub на пути к лучшему
По умолчанию Re: Изучаем STM32 Cortex M3

Для uk8amk.
Сергей, "volatile" - это предписание компилятору "не оптимизировать последовательность выполнения операций" данного код.
Однажды для запуска системы я должен был отправить в LPT последовательность типа 0х78, 0х22, 0х74 и т.д. Допустим, 0х78 - включить датчики положения, 0х22 - выставить в исходное положение дозаторы, 0х74 - включить тяговый двигатель и т.д. При нарушении порядка включения вся система выходит из строя, т.е если включается тяговый двигатель раньше, чем выставлены дозаторы, то они просто обламываются и т.д. как в загадке с козлом, волком и капустой. Так вот смысл "volatile" - это при оптимизации кода не нарушать последовательность выполнения операций.
Реклама:
shyub вне форума   Ответить с цитированием
Непрочитано 01.04.2012, 02:03   #1412
Easyrider83
Гуру портала
 
Аватар для Easyrider83
 
Регистрация: 27.10.2008
Адрес: ЕС
Сообщений: 10,835
Сказал спасибо: 919
Сказали Спасибо 4,308 раз(а) в 2,573 сообщении(ях)
Easyrider83 на пути к лучшему
По умолчанию Re: Изучаем STM32 Cortex M3

Все проще. Переменные, изменяемые внутри прерывания и в коде, должны быть помечены как volatile.
Easyrider83 вне форума   Ответить с цитированием
Непрочитано 01.04.2012, 02:19   #1413
shyub
Прописка
 
Регистрация: 20.08.2008
Сообщений: 260
Сказал спасибо: 305
Сказали Спасибо 76 раз(а) в 42 сообщении(ях)
shyub на пути к лучшему
По умолчанию Re: Изучаем STM32 Cortex M3

Хотел бы поделиться некоторыми мыслями с "согражданами KAZUS.RU".
1. Не в моих правилах кого-нибудь обижать, но наш форум начинает превращаться в "Дом-2", где на конкретно заданные вопросы отвечают те, кому просто хочется "поболтать". Давайте решим так: если я могу опомочь, то отвечаю, если нет, то просто молчу.
2. Прошу отвечать конкретно на заданный вопрос. Не будьте Архангельским (автор книг по Delphi и C++Builder, умудряющемся описать 1+2 на 200 страницах).
3. Хотелось бы на форуме видеть не только ответы на вопросы, но и какие-то предложения, например, "вот у меня была такая задача, я сталкнулся с проблемами и так их решил".
4. К большому сожалению, на русском языке пока ещё нет литературы по STM32 (лично я кое-какие наработки отправил П.П.Редькину - автору очень хороших книг по ARM-контроллерам в надежде, что он напишет книгу по STM32), поэтому давайте будем опублиуовывать, хотя-бы на нашем форуме, всё, что может кому-нибудб потребоваться.
Пожалуй я покажу пример первым.
Программа расчитывает данные в формате float, их необходимо вывести на WH1602A.. Вот примерно так я решил эту задачу:
---------------------------------------------------------------------------------------------------------------------------
void SprintfFloat(float x, char n, char k) // Перевод float в строку char.
{
// n - кол-во знаков (в т.ч. десятичная точка и минус для
// отрицательного числа), k - разряд массива, куда выво-
// дится первая цифра (счёт начинается с "0"). Следует
// иметь ввиду, что разряды массива ниже k и выше k+n-1
// не затрагиваются, а так же целая часть числа float не
// не может быть длиннее 8 разрядов. Результат записывается в LCD2[].
unsigned char firstplace = false;
unsigned char negative;
unsigned char i, digit;
float place = 1.0;
double f0,f1;
negative = (x‹0); // Сохранить знак числа.
if(negative) // Запись знака числа.
{
LCD2[(int)k]='-';
n--;
k=k+1;
}
x = (x›0)?(x)-x); // Преобразовать к абсолютному значению.
for(i=0; i‹15; i++) // Порядок числа.
{
if((x/place) ‹ 10.0) break;
else place *= 10.0;
}
for(i=0; i‹n; i++) // Записать число.
{
modf(x/place, &f0);
f1=f0;
for(digit=0; digit‹10; digit++)
{
if(f1==0) break;
else f1=f1-1;
}
if(digit | firstplace | (place == 1.0))
{
firstplace = TRUE;
LCD2[k+i]=(digit+0x30);
}
else LCD2[k+i]=' ';
if(place == 1.0)
{
k=k+1;
n--;
if(i‹n) LCD2[k+i]=',';
}
x -= (f0*place);
place /= 10.0;
}
if(LCD2[k+i-1]==',') LCD2[k+i-1]=32; // Чтобы число не оканчивалось точкой.
}
---------------------------------------------------------------------------------------------------------------------------
Переменные, которые не объявлены в данной ф-ции являются глобальными.
LCDx[x] - это массивы char, которые заполняются , а затем переносятся в индикатор.
Смысл данной ф-ции - это преобразовать машинное представление "float" в "человеческую" строку.
И ущё, я использую среду KeiluVision-4, но эта ф-ция будет работать во всех средах.
shyub вне форума   Ответить с цитированием
Непрочитано 01.04.2012, 02:33   #1414
shyub
Прописка
 
Регистрация: 20.08.2008
Сообщений: 260
Сказал спасибо: 305
Сказали Спасибо 76 раз(а) в 42 сообщении(ях)
shyub на пути к лучшему
По умолчанию Re: Изучаем STM32 Cortex M3

А вот так про "volatile" в справочнике по C++Builder пишет "мой любимый" А.Я.Архангельский:

"...
Обсуждая способность компилятора по своему разумению помещать перемен-
ные в регистры, надо сказать, что могут быть ситуации, когда это недопустимо.
Например, если переменная может асинхронно изменяться в процессе выполнения
каким-то фоновым процессом. Такие переменные надо помечать модификатором
volatile. Например:
volatile int tik;
Модификатор volatile указывает компилятору, что переменная может изме-
няться каким-то другим процессом. Например, это может быть связано с отлавли-
ванием каких-то прерываний, с сообщениями, поступающими от портов ввода,
с параллельно выполняемой нитью многопоточного процесса. Компилятор не дол-
жен помещать такую процедуру в регистры и не должен осуществлять проверку ее
значений, так как они могут изменяться.
C++ расширил действие модификатора volatile на классы (см. разд. 2.14) и на
их функции-элементы. Чтобы не возвращаться к этому модификатору, отмечу, что
если объект объявлен volatile, то он может использовать только функции-элемен-
ты, также объявленные volatile.
..."
shyub вне форума   Ответить с цитированием
Непрочитано 01.04.2012, 02:54   #1415
st__1
Заблокирован
 
Регистрация: 31.12.2011
Сообщений: 726
Сказал спасибо: 32
Сказали Спасибо 223 раз(а) в 162 сообщении(ях)
st__1 на пути к лучшему
По умолчанию Re: Изучаем STM32 Cortex M3

Народ в цари попёрло... на почве гиповитаминоза...
st__1 вне форума   Ответить с цитированием
Непрочитано 01.04.2012, 02:56   #1416
st__1
Заблокирован
 
Регистрация: 31.12.2011
Сообщений: 726
Сказал спасибо: 32
Сказали Спасибо 223 раз(а) в 162 сообщении(ях)
st__1 на пути к лучшему
По умолчанию Re: Изучаем STM32 Cortex M3

Сообщение от shyub Посмотреть сообщение
"volatile" - это предписание компилятору "не оптимизировать последовательность выполнения операций" данного код.
?????????????
Расшифровать сможете?
st__1 вне форума   Ответить с цитированием
Непрочитано 01.04.2012, 02:59   #1417
st__1
Заблокирован
 
Регистрация: 31.12.2011
Сообщений: 726
Сказал спасибо: 32
Сказали Спасибо 223 раз(а) в 162 сообщении(ях)
st__1 на пути к лучшему
По умолчанию Re: Изучаем STM32 Cortex M3

Сообщение от shyub Посмотреть сообщение
А вот так про "volatile" в справочнике по C++Builder пишет "мой любимый" А.Я.Архангельский:
А вот так гласит Кейл...
Цитата:
In practice, you must declare a variable as volatile whenever you are:

■accessing memory mapped peripherals

■sharing global variables between multiple threads

■accessing global variables in an interrupt routine or signal handler.

The compiler does not optimize the variables you have declared as volatile.
st__1 вне форума   Ответить с цитированием
Непрочитано 03.04.2012, 12:44   #1418
vvkka
Прописка
 
Регистрация: 24.08.2005
Сообщений: 139
Сказал спасибо: 18
Сказали Спасибо 16 раз(а) в 15 сообщении(ях)
vvkka на пути к лучшему
По умолчанию Re: Изучаем STM32 Cortex M3

народ подкиньте библиотеку под STM32F1... для 4 срочника LSD4478
если есть !!!!!!!!!
vvkka вне форума   Ответить с цитированием
Непрочитано 03.04.2012, 14:12   #1419
Easyrider83
Гуру портала
 
Аватар для Easyrider83
 
Регистрация: 27.10.2008
Адрес: ЕС
Сообщений: 10,835
Сказал спасибо: 919
Сказали Спасибо 4,308 раз(а) в 2,573 сообщении(ях)
Easyrider83 на пути к лучшему
По умолчанию Re: Изучаем STM32 Cortex M3

Решил проблему малого объема флеша на моей демоплате. Установил туда SPI Flash. 80 МГц SPI, 16Mbit объема. Теперь даже коротенький видео ролик могу проиграть. Можно было все это на SD карте хранить, но мне она для других целей пригодится. На след. неделе проведу тест производительности.
Кстати, кто-нибудь знает, как лучше и красивее реализовать эффект вращения изображения? Через синусы-косинусы из библиотеки math как-то долго выходит и изображение поганое. Как-то надо другим путем идти.
Easyrider83 вне форума   Ответить с цитированием
Непрочитано 03.04.2012, 14:20   #1420
L_0_R
Вид на жительство
 
Регистрация: 30.07.2009
Адрес: SPb, RU
Сообщений: 382
Сказал спасибо: 81
Сказали Спасибо 119 раз(а) в 92 сообщении(ях)
L_0_R на пути к лучшему
По умолчанию Re: Изучаем STM32 Cortex M3

Сообщение от Easyrider83 Посмотреть сообщение
Через синусы-косинусы из библиотеки math как-то долго выходит
Можно через таблицы попробовать, тем более если флеш большой Всяко быстрее будет.
L_0_R вне форума   Ответить с цитированием
Ответ

Закладки


Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Школа АRMрестлинга Uragan90 Микроконтроллеры, АЦП, память и т.д 54 22.08.2011 16:13
ARM Cortex M3 + Linux SiMiLya Микроконтроллеры, АЦП, память и т.д 10 17.06.2011 17:20
Помогите с STM32 - очень нужно... yakuzaa Микроконтроллеры, АЦП, память и т.д 60 04.08.2010 11:04
Как добавить поддержку для STM32 SFHK Микроконтроллеры, АЦП, память и т.д 11 18.12.2009 18:09


Часовой пояс GMT +4, время: 03:30.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot