Easyelectronics.ru

Электроника для всех
Текущее время: 19 окт 2019, 04:57

Часовой пояс: UTC + 5 часов



JLCPCB – Прототипы печатных плат за $2/10pcs (Любой цвет!)
Крупнейший производитель печатных плат и прототипов. Более 600000 клиентов и свыше 10000 заказов в день!
Получите скидку на почтовую отправку при первом заказе в JLCPCB!

Начать новую тему Ответить на тему  [ Сообщений: 47 ]  На страницу Пред.  1, 2
Автор Сообщение
 Заголовок сообщения: Re: нелогичное начало
СообщениеДобавлено: 12 авг 2013, 17:28 
Старожил
Аватара пользователя

Зарегистрирован: 27 янв 2012, 17:24
Сообщения: 525
mitrofanzzz писал(а):
что опять же странно, воздействие на DIR зажигает леды...
а
Код:
LED_ON (LED1_OUT);
нет...

Потому что надо сначала "воздействовать на DIR" (установить направление вывода), а потом уже зажигать/гасить через OUT


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: нелогичное начало
СообщениеДобавлено: 12 авг 2013, 17:33 
Старожил

Зарегистрирован: 15 янв 2013, 13:24
Сообщения: 5665
mitrofanzzz писал(а):
что опять же странно, воздействие на DIR зажигает леды...
а
Код:
LED_ON (LED1_OUT);
нет...

Простите, а Вы даташит на процессор смотрели? Как устроена ячейка GPIO... достаточно только картинку рассмотреть.

DIR надо установить один раз в единицу. Без этого светодиодный пин не будет выходом. При включениее DIR=1 на светодиод впервые попадает конкретный уровень напряжения. В Вашем варианте настройки GPIO и в Вашей схеме включения LED (активный низкий или активный высокий - не знаю) этот уровень означает зажигание. Но это не DIR сделал! DIR - лишь условие для того, чтобы можно было через OUT управлять светодиодом.

Если так трудно разобраться, то почему не возьмёте рабочий проект и не "откусите" от него медленно, по строчке ненужное? Сами и увидите, когда на мину наступите ;-)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: нелогичное начало
СообщениеДобавлено: 12 авг 2013, 17:44 
Заглядывает иногда

Зарегистрирован: 31 июл 2013, 18:59
Сообщения: 52
AlexPM писал(а):
mitrofanzzz писал(а):
что опять же странно, воздействие на DIR зажигает леды...
а
Код:
LED_ON (LED1_OUT);
нет...

Простите, а Вы даташит на процессор смотрели? Как устроена ячейка GPIO... достаточно только картинку рассмотреть.

DIR надо установить один раз в единицу. Без этого светодиодный пин не будет выходом. При включениее DIR=1 на светодиод впервые попадает конкретный уровень напряжения. В Вашем варианте настройки GPIO и в Вашей схеме включения LED (активный низкий или активный высокий - не знаю) этот уровень означает зажигание. Но это не DIR сделал! DIR - лишь условие для того, чтобы можно было через OUT управлять светодиодом.

Если так трудно разобраться, то почему не возьмёте рабочий проект и не "откусите" от него медленно, по строчке ненужное? Сами и увидите, когда на мину наступите ;-)


Мой хитрый план состоял в том чтобы утащить из демо-кода все зависимости и потом написать минимально возможный кусок кода мигающий ледиком... а уже потом попытаться понять как оно сконфигурировано. В даташит смотрел но в силу моего общения с железкой менее месяца в голове ничего не усвоилось, а до этого я вообще про микроконтроллеры ничего не знал.
Не хочу привязываться к демо-коду потому как не смогу потом с нуля свой проект сделать, тупо не буду знать как...
Вот такой я человек...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: нелогичное начало
СообщениеДобавлено: 12 авг 2013, 17:51 
Старожил

Зарегистрирован: 15 янв 2013, 13:24
Сообщения: 5665
mitrofanzzz писал(а):
Мой хитрый план состоял в том чтобы утащить из демо-кода все зависимости и потом написать минимально возможный кусок кода мигающий ледиком... а уже потом попытаться понять как оно сконфигурировано. В даташит смотрел но в силу моего общения с железкой менее месяца в голове ничего не усвоилось, а до этого я вообще про микроконтроллеры ничего не знал.
Не хочу привязываться к демо-коду потому как не смогу потом с нуля свой проект сделать, тупо не буду знать как...
Вот такой я человек...
"Откусыванием" по кусочкам Вы бы достигли двух целей: 1) ответ на вопрос в теме, почему косяк; 2) получили бы тот самый "минимально возможный кусок кода мигающий ледиком". Потом бы росли над собой, кто ж мешает...

Вот специальная статья в помощь на этом же сайте: ARM. Учебный Курс. Порты GPIO.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: нелогичное начало
СообщениеДобавлено: 12 авг 2013, 18:16 
Заглядывает иногда

Зарегистрирован: 31 июл 2013, 18:59
Сообщения: 52
Спасибо, буду разбираться далее...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: нелогичное начало
СообщениеДобавлено: 12 авг 2013, 18:41 
Заглядывает иногда

Зарегистрирован: 31 июл 2013, 18:59
Сообщения: 52
Итак к чему я пришел:

Во первых я понял, что бесконечный цикл
Код:
while (1) {}

не отрабатывает, скорее всего в этом виноват оптимизирующий компилятор, хотя в проекте опция оптимизации выставлена в позицию "без оптимизации".
Во вторых местные старожилы прояснили мне неверное направление движения, что в свою очередь подтолкнуло к следующим выводам и попыткам.
Код:
Код:
int main(void)
{
  LED1_DIR |= LED1_MASK;
  int cnt = 0;
  LED_ON (LED1_OUT);
  for (cnt = 2500;cnt;cnt--);
  LED_OFF (LED1_OUT);
}


ледик горит ярко аж глаза болят, но
код:
Код:
int main(void)
{
  LED1_DIR |= LED1_MASK;
  int cnt = 0;
  LED_ON (LED1_OUT);
  for (cnt = 500;cnt;cnt--);
  LED_OFF (LED1_OUT);
}

и ледик уже очень тускло "тлеет"...
Делаю вывод, он просто не успевает включаться и выключаться...
Продолжаю думать и истязать камешек...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: нелогичное начало
СообщениеДобавлено: 12 авг 2013, 19:41 
Старожил

Зарегистрирован: 15 янв 2013, 13:24
Сообщения: 5665
Верните бесконечный цикл в конец функции main(). Это закон для всех программ для МК.
Нет, конечно, этот закон можно нарушать, он не уголовный :-) Но тогда вменяемых результатов от программы не ждите.

"Революционные" выводы насчёт "выоптимизирования" while(1){} лучше подкреплять ассемблерным листингом. Зайдите в отладчик и посмотрите, чтО в ASM-коде на месте цикла. Думаю, там команда перехода на саму себя.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: нелогичное начало
СообщениеДобавлено: 12 авг 2013, 19:55 
Старожил

Зарегистрирован: 19 мар 2013, 19:37
Сообщения: 2622
Откуда: Санкт-Петербург
А ещё лучше в цикл положите разумные действия, например
Код:
int main(void)
{
  LED1_DIR |= LED1_MASK;
  int cnt = 0;
  while(1) {
    LED_ON (LED1_OUT);
    for (cnt = 5000000;cnt;cnt--); // считать до 500 - "маловато будет"... какая там у вас тактовая частота?
    LED_OFF (LED1_OUT);
    for (cnt = 5000000;cnt;cnt--); // после выключения диода - тоже подождать надо, а то он на следующем цикле сразу включится
  }
}


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: нелогичное начало
СообщениеДобавлено: 13 авг 2013, 10:50 
Заглядывает иногда

Зарегистрирован: 31 июл 2013, 18:59
Сообщения: 52
товарищи! я обнаружил страшное и это может быть большой большой отгадкой всей моей беды...
Вчера вечером ковырялся как многие рекомендовали в дебагере и увидел следующую странность (ну или я опять что-то пропустил)
все присваемые мною переменные остаются равными нолю... в доказательство картинка во вложении...
на данный момент пробую проделать аналогичные действия в другой среде...
LPCXpresso не подходит у него нет симулятора,
пробую Keil,
CoIDE я так понимаю тоже симулятора не имеет... еще было бы замечательно все-же заставить работать отладку через CoLinkEx на железке но я так и не смог все эти железки вместе с какой-либо средой объединить...думаю это немного упростило бы дальнейшее изучение.


Вложения:
iar-debug.png
iar-debug.png [ 83.32 Кб | Просмотров: 7618 ]
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: нелогичное начало
СообщениеДобавлено: 13 авг 2013, 11:31 
Заглядывает иногда

Зарегистрирован: 31 июл 2013, 18:59
Сообщения: 52
Дополнительная информация... насколько я понял побродив по сайту coocox.org CoLinkEx не умеет отлаживать в LPC1227, код заливать умеет а отлаживать не умеет... так что CoIDE пока откладываю в сторону.
В Keil симуляторе код приведенный на картинке замечательно заработал, попробую довести проект до состояния мигания светодиода.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: нелогичное начало
СообщениеДобавлено: 13 авг 2013, 12:32 
Старожил

Зарегистрирован: 15 янв 2013, 13:24
Сообщения: 5665
mitrofanzzz писал(а):
В Keil симуляторе код приведенный на картинке замечательно заработал, попробую довести проект до состояния мигания светодиода.
Так он до сих пор не мигает? Оооооо!!!


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: нелогичное начало
СообщениеДобавлено: 13 авг 2013, 12:40 
Заглядывает иногда

Зарегистрирован: 31 июл 2013, 18:59
Сообщения: 52
AlexPM писал(а):
mitrofanzzz писал(а):
В Keil симуляторе код приведенный на картинке замечательно заработал, попробую довести проект до состояния мигания светодиода.
Так он до сих пор не мигает? Оооооо!!!

нет ну при желании выдранное из демки мигает... а вот чтоб сам от начала и до конца так не мигает да хе-хе-хе


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: нелогичное начало
СообщениеДобавлено: 13 авг 2013, 12:41 
Старожил

Зарегистрирован: 15 янв 2013, 13:24
Сообщения: 5665
mitrofanzzz писал(а):
Дополнительная информация... насколько я понял побродив по сайту coocox.org CoLinkEx не умеет отлаживать в LPC1227, код заливать умеет а отлаживать не умеет... так что CoIDE пока откладываю в сторону.
В Keil симуляторе код приведенный на картинке замечательно заработал, попробую довести проект до состояния мигания светодиода.
Зачем симулятор (он не поддерживает совсем либо большую часть периферии МК), когда реальный LPC1227 можно дебажить в Keil'е через Ваш CoLinkEx.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: нелогичное начало
СообщениеДобавлено: 13 авг 2013, 12:50 
Заглядывает иногда

Зарегистрирован: 31 июл 2013, 18:59
Сообщения: 52
AlexPM писал(а):
mitrofanzzz писал(а):
Дополнительная информация... насколько я понял побродив по сайту coocox.org CoLinkEx не умеет отлаживать в LPC1227, код заливать умеет а отлаживать не умеет... так что CoIDE пока откладываю в сторону.
В Keil симуляторе код приведенный на картинке замечательно заработал, попробую довести проект до состояния мигания светодиода.
Зачем симулятор (он не поддерживает совсем либо большую часть периферии МК), когда реальный LPC1227 можно дебажить в Keil'е через Ваш CoLinkEx.

Вот тут вы мне и попались! Я как раз пытаюсь заставить все это работать... Встал на сложном для меня моменте... Прошивка через CoLinkEx проходит только с третьего-четвертого раза... Подозреваю, что это из-за моих "программ" которые работают естественно криво... Но если я заливаю прошивку и потом стартую отладку в Кейле то загружается отладочный интерфейс но отладка не начинается сколько не жми на кнопки пошагового выполнения. Выглядит это вот так:


Вложения:
keil-debug.png
keil-debug.png [ 122.06 Кб | Просмотров: 7601 ]
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: нелогичное начало
СообщениеДобавлено: 13 авг 2013, 13:25 
Старожил

Зарегистрирован: 15 янв 2013, 13:24
Сообщения: 5665
mitrofanzzz писал(а):
Прошивка через CoLinkEx проходит только с третьего-четвертого раза... Подозреваю, что это из-за моих "программ" которые работают естественно криво...
  • В составе Keil-проекта есть startup-файл?
  • Частота CPU в свойствах проекта/Target правильно указана?
  • Частоты Core и SWD в свойствах проекта/Debugger правильно выбраны?

mitrofanzzz писал(а):
Но если я заливаю прошивку и потом стартую отладку в Кейле то загружается отладочный интерфейс но отладка не начинается сколько не жми на кнопки пошагового выполнения.
  • Прошивка скомпилирована этим же Keil?
  • Компиляция была в режиме Debug?
Дело в том, что отладчику нужен .elf-файл (или .axf-файл) с отладочной информацией. И прошивка в отлаживаемом МК должна 100% соответствовать этому ELF'у.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: нелогичное начало
СообщениеДобавлено: 13 авг 2013, 13:46 
Заглядывает иногда

Зарегистрирован: 31 июл 2013, 18:59
Сообщения: 52
AlexPM писал(а):
  • В составе Keil-проекта есть startup-файл?
  • Частота CPU в свойствах проекта/Target правильно указана?
  • Частоты Core и SWD в свойствах проекта/Debugger правильно выбраны?

  • Прошивка скомпилирована этим же Keil?
  • Компиляция была в режиме Debug?

Дело в том, что отладчику нужен .elf-файл (или .axf-файл) с отладочной информацией. И прошивка в отлаживаемом МК должна 100% соответствовать этому ELF'у.


В составе Keil-проекта есть startup-файл? Да.
Частота CPU в свойствах проекта/Target правильно указана? Этот момент я уточню.
Частоты Core и SWD в свойствах проекта/Debugger правильно выбраны? Ни разу не имел с этим дела, буду уточнять.
Прошивка скомпилирована этим же Keil? Да.
Компиляция была в режиме Debug? Да.

Процесс вроде-бы как идёт... Но непонятны многие моменты... не везде можно брейк поставить, не на каждой строке исходника останавливается пошаговое исполнение...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: нелогичное начало
СообщениеДобавлено: 13 авг 2013, 14:15 
Старожил

Зарегистрирован: 15 янв 2013, 13:24
Сообщения: 5665
mitrofanzzz писал(а):
Процесс вроде-бы как идёт... Но непонятны многие моменты... не везде можно брейк поставить, не на каждой строке исходника останавливается пошаговое исполнение...
Это эффект оптимизации: не каждой Си-строчке исходника соответствует отдельный кусочек кода. Ставьте курсор на нужную Си-строчку, смотрите в ассемблерное окно (там соответствующий код), ставьте курсор туда. После этого шаги отладки будут происходить в ассемблерном окне. Брейкпойнты тоже можно там ставить, в ассемблерном окне они всегда работоспособны.

Не забывайте также, что количество хардварных breakpoint'ов ограничено. Удаляйте ненужные.

Если временно отключите оптимизацию в свойствах проекта, то код будет компилироваться большего размера, но зато соответствие Си-Асм будет более чёткое (меньше проблем с остановкой в Си и шагами в Си). Когда всё отладите - окончательный вариант кода снова с оптимизацией компильнёте.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: нелогичное начало
СообщениеДобавлено: 13 авг 2013, 14:51 
Заглядывает иногда

Зарегистрирован: 31 июл 2013, 18:59
Сообщения: 52
AlexPM писал(а):
mitrofanzzz писал(а):
Процесс вроде-бы как идёт... Но непонятны многие моменты... не везде можно брейк поставить, не на каждой строке исходника останавливается пошаговое исполнение...
Это эффект оптимизации: не каждой Си-строчке исходника соответствует отдельный кусочек кода. Ставьте курсор на нужную Си-строчку, смотрите в ассемблерное окно (там соответствующий код), ставьте курсор туда. После этого шаги отладки будут происходить в ассемблерном окне. Брейкпойнты тоже можно там ставить, в ассемблерном окне они всегда работоспособны.

Не забывайте также, что количество хардварных breakpoint'ов ограничено. Удаляйте ненужные.

Если временно отключите оптимизацию в свойствах проекта, то код будет компилироваться большего размера, но зато соответствие Си-Асм будет более чёткое (меньше проблем с остановкой в Си и шагами в Си). Когда всё отладите - окончательный вариант кода снова с оптимизацией компильнёте.

Спасибо за советы, сейчас компилирую без Thumb режима, без оптимизации ...
Теперь осталось понять основы построения приложений и зависимости а также разобраться по серьезному с принципами "дрыганья ножками"... имею большое желание глубоко осознать как оно работает в деталях...
Еще раз спасибо за советы...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: нелогичное начало
СообщениеДобавлено: 13 авг 2013, 15:07 
Старожил

Зарегистрирован: 15 янв 2013, 13:24
Сообщения: 5665
mitrofanzzz писал(а):
сейчас компилирую без Thumb режима
В ARM-Cortex'ах вроде только Thumb Режим и есть (у них система команд Thumb2). Не думаю, что код для LPC1227 (ARM Cortex-M0) компилируется у Вас в ARM-режиме вместо Thumb.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: нелогичное начало
СообщениеДобавлено: 13 авг 2013, 15:37 
Заглядывает иногда

Зарегистрирован: 31 июл 2013, 18:59
Сообщения: 52
из даташита:
"The LPC122x extend NXP's 32-bit ARM microcontroller continuum and target a wide
range of industrial applications in the areas of factory and home automation. Benefitting
from the ARM Cortex-M0 Thumb instruction set, the LPC122x have up to 50 % higher
code density compared to common 8/16-bit microcontroller performing typical tasks. The
LPC122x also feature an optimized ROM-based divide library for Cortex-M0, which offers
several times the arithmetic performance of software-based libraries, as well as highly
deterministic cycle time combined with reduced flash code size. The ARM Cortex-M0
efficiency also helps the LPC122x achieve lower average power for similar applications."

2ххх серия 100% поддерживает и thumb и 32 разрядный код это в книжках читал...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: нелогичное начало
СообщениеДобавлено: 13 авг 2013, 15:50 
Старожил

Зарегистрирован: 15 янв 2013, 13:24
Сообщения: 5665
mitrofanzzz писал(а):
из даташита:
"The LPC122x extend NXP's 32-bit ARM microcontroller continuum and target a wide range of industrial applications in the areas of factory and home automation. Benefitting from the ARM Cortex-M0 Thumb instruction set, the LPC122x have up to 50 % higher code density compared to common 8/16-bit microcontroller performing typical tasks. The LPC122x also feature an optimized ROM-based divide library for Cortex-M0, which offers several times the arithmetic performance of software-based libraries, as well as highly deterministic cycle time combined with reduced flash code size. The ARM Cortex-M0 efficiency also helps the LPC122x achieve lower average power for similar applications."

2ххх серия 100% поддерживает и thumb и 32 разрядный код это в книжках читал...
Что и требовалось :-)

LPC122x да и вообще LPC1xxx - это ARM Cortex (команды Thumb2). Не напишете Вы для них код в режиме ARM.
Серия LPC2xxx у Филипса/NXP - это чистый ARM (команды ARM и команды Thumb, переключабельно).


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: нелогичное начало
СообщениеДобавлено: 13 авг 2013, 17:14 
Заглядывает иногда

Зарегистрирован: 31 июл 2013, 18:59
Сообщения: 52
Вас понял... :)


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 47 ]  На страницу Пред.  1, 2

Часовой пояс: UTC + 5 часов


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


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

Найти:
Перейти:  

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB