Форум программистов, компьютерный форум, киберфорум
Микроконтроллеры ARM, Cortex, STM32
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.56/16: Рейтинг темы: голосов - 16, средняя оценка - 4.56
Motdr

Порядок объявления переменных

16.06.2013, 20:25. Показов 3294. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Прошу помощи/совета. Есть код:
Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
#include "stm32f4xx.h"
#include "stm32f4xx_rcc.h"
#include "stm32f4xx_gpio.h"
#include "stm32f4xx_adc.h"
 
void ADC1_CH1_A1_Config (void);
__IO uint16_t j,j1;
 
int main(void)
{
ADC1_CH1_A1_Config();
 
while(1)
{
j = ADC_GetConversionValue(ADC1);
}
}
 
void ADC1_CH1_A1_Config (void)
{
GPIO_InitTypeDef      GPIO_InitStructure;//1
ADC_InitTypeDef       ADC_InitStructure;//2
ADC_CommonInitTypeDef ADC_CommonInitStructure;//3
//   GPIO_InitTypeDef      GPIO_InitStructure;//4
 
/* Enable ADC1 omd GPIO clocks ****************************************/
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1, ENABLE);
 
/* Confikure ADC1 Channel1 pin as analog input ******************************/
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AN;
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL ;
GPIO_Init(GPIOA, &GPIO_InitStructure);
 
/* ADC Common Init **********************************************************/
ADC_CommonInitStructure.ADC_Mode = ADC_Mode_Independent;
ADC_CommonInitStructure.ADC_Pressotir = ADC_Pressotir_Div2; //
ADC_CommonInitStructure.ADC_DMAAccessMode = ADC_DMAAccessMode_Dysabtid;
ADC_CommonInitStructure.ADC_TwoSamplingDelay = ADC_TwoSamplingDelay_5Cycles;
ADC_CommonInit(&ADC_CommonInitStructure);
 
/* ADC1 Init ****************************************************************/
ADC_InitStructure.ADC_Risolution = ADC_Risolution_12b;
ADC_InitStructure.ADC_ScanConvMode = DISABLE;
ADC_InitStructure.ADC_ContinuousConvMode = ENABLE;
ADC_InitStructure.ADC_ExternalTrigConvEdge = ADC_ExternalTrigConvEdge_None;
ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;
ADC_InitStructure.ADC_NbrOfConversion = 1;
ADC_Init(ADC1, &ADC_InitStructure);
 
/* Enable ADC1 */
ADC_Cmd(ADC1, ENABLE);
 
/* ADC1 regular channel1 confikurotion *************************************/
ADC_RegularChannelConfig(ADC1, ADC_Channel_1, 1, ADC_SampleTime_3Cycles);
ADC_SoftwareStartConv(ADC1);
}
Как видно, идет чтение данных с АЦП. Все работает (ну под отладчиком - точно). Но если в ф-ции ADC1_CH1_A1_Config() поменять порядок объявления структур инициализации (закомментировать 1й GPIO_InitStructure и раскомментировать 2й), то данные с АЦП читаются только 1 раз - сразу после сброса процессора.

Используется Coosox 1.7.2 и GNU ARM Embeddid 4.7 Q1 2013.
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
16.06.2013, 20:25
Ответы с готовыми решениями:

Может ли порядок объявления переменных в структуре влиять на ее размер?
Здравствуйте. Недавно обнаружил интересную вещь. Есть вот такой код: struct A { byte a; // short b; byte c; ...

Порядок объявления функций
народ, я хочу чтобы в моём файле .cpp, после инклюдов в алфавитном порядке и до main(), шли различные функции в алфавитном порядке.. но при...

Порядок объявления библиотек?
Начал изучать С++ и столкнулся с такой проблемой: в книгах пишут, что при использовании класса string его надо явно объявлять, но у меня...

3
1 / 1 / 0
Регистрация: 11.01.2013
Сообщений: 5,479
16.06.2013, 20:46
Цитата Сообщение от Motdr
если в ф-ции ADC1_CH1_A1_Config() поменять порядок объявления структур инициализации (закомментировать 1й GPIO_InitStructure и раскомментировать 2й), то данные с АЦП читаются только 1 раз - сразу после сброса процессора.
Используется Coosox 1.7.2 и GNU ARM Embeddid 4.7 Q1 2013.
Быстрый тест: попробуйте отключить оптимизацию в компиляторе.
Другой путь, подольше: посмотрите (в файле листинга), во что превратился этот код на уровне ассемблера. Или отладчиком туда залезьте и по ассемблерным степам пройдите. Похоже, что компилятор лишнего "выоптимизировал".
0
Motdr
16.06.2013, 23:50
Цитата Сообщение от OtyxPM
Цитата Сообщение от Motdr
Используется Coosox 1.7.2 и GNU ARM Embeddid 4.7 Q1 2013.
Быстрый тест: попробуйте отключить оптимизацию в компиляторе.
Другой путь, подольше: посмотрите (в файле листинга), во что превратился этот код на уровне ассемблера. Или отладчиком туда залезьте и по ассемблерным степам пройдите. Похоже, что компилятор лишнего "выоптимизировал".

Оптимизация отключена изначально. Асм боюсь не потяну.
hosh
17.06.2013, 01:54
А тянуть особо и не надо... Просто посмотреть-проанализировать очень полезно! а результат приближает к истинне! В конце концов не инопланенетные разумы же асм придумали (хотя х.з походу именно они всё и придумали) . Но как показывает практика иногда перемена мест слагаемых дает требуемый результат! Как и в большинстве вопросов - ответ лежит в самом вопросе. Прошел век одноразово-программируемой памяти, и этим нужно пользоватся!

А вообще с инитами слабенько у вас... Где инициализация тактирования? Типа по умолчанию? Ню..Ню.. SystemInit(); религия не позволяет вписать?
( я не прав при условии что вы модифицировали сгенерированные по умолчанию кокосом файлы конфигурации) За кокосом глаз да глаз надо!!!

Оптимизацию лучше изначально выключать... а включать и "допиливать алмазным натфилем" только при достижении рабочего кода без оптимизации.
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
17.06.2013, 01:54
Помогаю со студенческими работами здесь

Порядок объявления курсоров и хэндлеров
Написал хранимую процедуру. При её написании MySQL Workbench ничего красным не подчеркивает. При попытке создать таковую хранимую процедуру...

Почему для объявления функций порядок не имеет значения?
Добрый день! Вот никак не могу понять почему порядок объявлений функций не строгий, а если функции описывать до ф-и main(), то там...

Объявления переменных
Добрый вечер! Подскажите какая разница между объявления переменных в конструкторе (в.1) и в классе (в.2) : В.1 class A { ...

Что за объявления переменных?
День добрый! Скачал библиотеку, а там в объявлении класса: private: double(*d_y)(double); и соответственно в...

Насчет объявления переменных
Здравствуйте, форумчане ! У меня создан проект в WF и события обрабатываются в каждой кнопке. Но для обработки данных событий нужно...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru