Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей... |
11.11.2010, 00:10
|
|
Гражданин KAZUS.RU
Регистрация: 25.02.2008
Сообщений: 997
Сказал спасибо: 223
Сказали Спасибо 72 раз(а) в 58 сообщении(ях)
|
Re: Вопросы от NikMih_1
Ответа не надо ![Внимание!](images/smilies/icon_exclaim.gif) , есть оператор go to и метки. Спасибо всем!
__________________
ДА, НО НЕТ!
|
|
|
|
11.11.2010, 00:14
|
|
Почётный гражданин KAZUS.RU
Регистрация: 10.05.2005
Адрес: Саратов.ru
Сообщений: 1,548
Сказал спасибо: 384
Сказали Спасибо 737 раз(а) в 417 сообщении(ях)
|
Re: Вопросы от NikMih_1
Сообщение от NikMih_1
|
Ответа не надо, есть оператор go to и метки. Спасибо всем!
|
go to и метки - дурной стиль
Сообщение от NikMih_1
|
Как организовать выходы из условных операций в узлы, обозначенные кружочками?
|
Реализация по деревенски
Код:
|
int main(void)
{
Init();
while(1)
{
if (FlagInt0) ReadADC();
if (FlagIntT1) SendToDAC(); ;Чтение из массива и вывод на DAC
}
} |
|
|
|
|
11.11.2010, 00:17
|
|
Гражданин KAZUS.RU
Регистрация: 25.02.2008
Сообщений: 997
Сказал спасибо: 223
Сказали Спасибо 72 раз(а) в 58 сообщении(ях)
|
Re: Вопросы от NikMih_1
Сообщение от AJScorp
|
go to и метки - дурной стиль
|
Наверняка так и есть. Код похож на мой, только квадратики справа на алгоритме не так просты. Во всяком случае нижайший Вам поклон.
__________________
ДА, НО НЕТ!
|
|
|
|
11.11.2010, 00:26
|
|
Почётный гражданин KAZUS.RU
Регистрация: 10.05.2005
Адрес: Саратов.ru
Сообщений: 1,548
Сказал спасибо: 384
Сказали Спасибо 737 раз(а) в 417 сообщении(ях)
|
Re: Вопросы от NikMih_1
Сообщение от NikMih_1
|
од похож на мой, только квадратики справа на алгоритме не так просты.
|
Так поэтому и вызваны как функции. Столь же схематично, как и Ваш алгоритм. )
|
|
|
Сказали "Спасибо" AJScorp
|
|
|
11.11.2010, 00:27
|
|
Супер-модератор
Регистрация: 15.10.2007
Сообщений: 3,530
Сказал спасибо: 172
Сказали Спасибо 1,560 раз(а) в 810 сообщении(ях)
|
Re: Вопросы от NikMih_1
Сообщение от AJScorp
|
go to и метки - дурной стиль
|
Иногда все-таки goto целесообразно применять, если надо быстро выйти из множества вложенных циклов.
|
|
|
|
11.11.2010, 00:32
|
|
Почётный гражданин KAZUS.RU
Регистрация: 10.05.2005
Адрес: Саратов.ru
Сообщений: 1,548
Сказал спасибо: 384
Сказали Спасибо 737 раз(а) в 417 сообщении(ях)
|
Re: Вопросы от NikMih_1
Сообщение от realid
|
Иногда все-таки goto целесообразно применять, если надо быстро выйти из множества вложенных циклов.
|
Согласен, но по-моему это частный случай. По крайней мере мне подобных конструкций использовать не приходилось.
|
|
|
|
11.11.2010, 11:11
|
|
Гражданин KAZUS.RU
Регистрация: 25.02.2008
Сообщений: 997
Сказал спасибо: 223
Сказали Спасибо 72 раз(а) в 58 сообщении(ях)
|
Re: Вопросы от NikMih_1
Сообщение от AJScorp
|
Код:
int main(void)
{
Init();
|
Под INIT я разумею всяческие инициализации. В частности __config1-3(). Эти штуки надо помещать в теле функции main или до того?
Я собирался написать эти конфигушки, потом функции, а потом уж писать МАЙН. Я ошибаюсь?
__________________
ДА, НО НЕТ!
|
|
|
|
11.11.2010, 11:30
|
|
Почётный гражданин KAZUS.RU
Регистрация: 19.08.2006
Адрес: Львов
Сообщений: 1,616
Сказал спасибо: 65
Сказали Спасибо 315 раз(а) в 264 сообщении(ях)
|
Re: Вопросы от NikMih_1
Сообщение от NikMih_1
|
Под INIT я разумею всяческие инициализации. В частности __config1-3(). Эти штуки надо помещать в теле функции main или до того?
Я собирался написать эти конфигушки, потом функции, а потом уж писать МАЙН. Я ошибаюсь?
|
Код:
|
void init(void);
char MyFunction_1(void);
int MyFunction_2(void);
void init(void){
// Place your init code here
}
char MyFunction_1(void){
// Place your code for this function here
return something;
}
int main(void){
char MyVar_1;
int MyVar_2;
init();
MyVar_1 = MyFunction_1();
MyVar_2 = MyFunction_2();
for(;;); // Main loop...
}
int MyFunction_2(void){
// Place your code for this function here
return something;
} |
Вам надо почитать про модульность программ и разобраться с видимостью переменных и функций, а также о правилах их определений.
Мне кажется, лучше всего будет перечитать ранее Вам предлагавшийся материал, тогда многие вопросы отпадут по умолчанию.
Последний раз редактировалось ut1wpr; 11.11.2010 в 12:42.
|
|
|
|
11.11.2010, 11:31
|
|
Гражданин KAZUS.RU
Регистрация: 25.02.2008
Сообщений: 997
Сказал спасибо: 223
Сказали Спасибо 72 раз(а) в 58 сообщении(ях)
|
Re: Вопросы от NikMih_1
И ещё проблема? Внешние прерывания идут с частотой 9-12кГц, а прерывания по таймеру с частотой 8кГц. Это означает, что достаточно часто они совпадают во времени. Мне не хотелось бы использовать приоритеты, поскольку процессы ввода вывода одинаково важны. Облегчает задачу то, что процессы ввода и вывода скоротечны по сравнению с периодом того и другого. Таким образом остаётся только вопрос - может ли прерывание с высоким приоритетом остановить идущий процесс или АЦП или Вывода. Может быть они не останавливаются посредине? Конечно можно программно решить эту проблему: у контроллера есть бит занятости АЦП, наверняка есть такой и у последовательного интерфейса, я ещё не лез в эту тему.
__________________
ДА, НО НЕТ!
|
|
|
|
11.11.2010, 11:33
|
|
Почётный гражданин KAZUS.RU
Регистрация: 10.05.2005
Адрес: Саратов.ru
Сообщений: 1,548
Сказал спасибо: 384
Сказали Спасибо 737 раз(а) в 417 сообщении(ях)
|
Re: Вопросы от NikMih_1
__config1-3 - это макросы компилятора для формирования слов конфигурации контроллера, а не исполняемый код. Поэтому размещать их нужно отдельно, вне тел функций.
Инициализация и настройка периферии (ADC, таймеров и тд) Init() выполняется программно и вызывается из main или из других функций в зависимости от конкретной задачи.
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 10:26.
|
|