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

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

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

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

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

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


 
Опции темы
Непрочитано 09.11.2015, 16:19  
stm8
Частый гость
 
Регистрация: 12.06.2015
Сообщений: 10
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
stm8 на пути к лучшему
По умолчанию IAR код виснет на M4

Всем доброго дня

Извинясь перед модераторами, за перепост,
задавал вопрос в песочнице но ответа нет.

Поставил IAR EWARM 7.4 для ARM, (STM32F407VG)
Тип процессора стоит Cortex-M4 или STM32F407VG.

Код:
int main()
{
uint32_t PD12;
PD12 = 0x42020C48;
}
вызывает зависание (возможно прерывание, но векторы пока не настроены)
причем если target Cимулятор все нормально.

ARM ассемблер пока не очень знаю, но код генирируемый для симуляторе и ST-LINK для этой инструкции разный!
Я понял что есть ограничения на immediate для LDR,
ну тогда хорошо, думаю раз процессор поддерживет ARMv7
используем mov


Код:
__asm("mov  r0,#0x0C48\n"
        "movt r0,#0x4202");
и второй вариант (прямо из EWARM Dev Guide)

Код:
int Mov32()
{
unsigned int a;
asm("movw %0,%L1 \n"
"movt %0,%H1 \n" : "=r"(a) : "i"(0x12345678UL));
return a;
}
Для обоих вариант компилятор генерирует все равно код с использованием LDR
которые все равно дает хрень на выходе(загружает не ту константу в регистры). M4 не поддерживает команду MOV ?


Когда ставлю дебаггер target Simulator
он генерирует код с использованием MOV
который дает нормальный результат.

Кто нибудь понимает в чем дело?

В Keil все нормально работает, единственная претензия к нему, при запуске debug (Ctrl-F5), при изменении кода он автоматически не перекомпилирует и код перед загрузкой во флэш.
Хотя галочка "Update target before debugging" стоит.

Кстати кто нибудь знает как настроить самому дебаггер в uVision чтобы
он загружал код в RAM?
В примерах с Keil есть 3 конфигурации, одна из них RAM
В новом проекте я поставил те же опции
и init file Dbg_RAM.ini
Для linker поставил тот же scatter файл (из примера)



Код:
LR_IROM1 0x20000000 0x00010000  {    ; load region size_region
ER_IROM1 0x20000000 0x00010000  {  ; load address = execution address
При запуске дебаггер все равно появляется сообщение
Error: Flash download Failed.
Реклама:
stm8 вне форума  
Непрочитано 09.11.2015, 16:45  
Easyrider83
Гуру портала
 
Аватар для Easyrider83
 
Регистрация: 27.10.2008
Адрес: ЕС
Сообщений: 10,835
Сказал спасибо: 919
Сказали Спасибо 4,308 раз(а) в 2,573 сообщении(ях)
Easyrider83 на пути к лучшему
По умолчанию Re: IAR код виснет на M4

Выходит из main и зависает. А чего вы ожидали в этом случае?
Easyrider83 вне форума  
Непрочитано 09.11.2015, 21:19  
stm8
Частый гость
 
Регистрация: 12.06.2015
Сообщений: 10
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
stm8 на пути к лучшему
По умолчанию Re: IAR код виснет на M4

Сообщение от Easyrider83 Посмотреть сообщение
Выходит из main и зависает. А чего вы ожидали в этом случае?
Зависает в дебаггере при выполнении операции
PD12 = const;

main() я написал чтобы показать где находится адрес переменной
(думаю на стеке)
stm8 вне форума  
Непрочитано 10.11.2015, 01:15  
Hives
Гражданин KAZUS.RU
 
Регистрация: 25.11.2010
Сообщений: 516
Сказал спасибо: 1
Сказали Спасибо 126 раз(а) в 109 сообщении(ях)
Hives на пути к лучшему
По умолчанию Re: IAR код виснет на M4

ты явно не туда копаешь, не может оно там виснуть, весь код давай.
чисто на всякий случай - вачдог отключен?
Hives вне форума  
Непрочитано 10.11.2015, 10:18  
SasaVitebsk
Гражданин KAZUS.RU
 
Регистрация: 04.08.2006
Сообщений: 911
Сказал спасибо: 28
Сказали Спасибо 180 раз(а) в 139 сообщении(ях)
SasaVitebsk на пути к лучшему
По умолчанию Re: IAR код виснет на M4

Мне нравится название поста ...
IAR, оказывается виснет ...

Есть такое понятие ТКП "технический кодекс установившейся практики". Так вот, Переменные, при написании проги, рекомендуется писать маленькими буквами, или смешанными. А большими - макросы. Возможно, в будущем, это избавит вас от ненужных, трууднодиагностируемых ошибок.
Так, например, я бы сказал, что PD12 это выглядит как объявление 12 ножки порта D.
Далее...
Если уж
Код:
int main()
{
uint32_t PD12;
PD12 = 0x42020C48;
}
То скорее, так ...
Код:
int main()
{
uint32_t PD12;
PD12 = 0x42020C48;
for(;;);
}
так как у вас main без завершения, и я даже не знаю куда передаст управление IAR. скорее всего он честно скомпилит функцию и по return она вылетит в какой-нибудь Hard fault.
Ну и в третьих... Вы же по сути ничего не написали. Компилятор вообще не обязан это компилировать ... Ну присвоили вы значение переменной, но она не используется и с точки зрения компилятора она не нужна. Да и с моей тоже ...
Так что пока - анализировать нечего. Пишите реальный текст, тогда и будете анализировать ...
SasaVitebsk вне форума  
Непрочитано 10.11.2015, 10:29  
niXto
Почётный гражданин KAZUS.RU
 
Аватар для niXto
 
Регистрация: 13.10.2007
Адрес: Беларусь
Сообщений: 8,048
Сказал спасибо: 60
Сказали Спасибо 3,954 раз(а) в 2,309 сообщении(ях)
niXto на пути к лучшему
По умолчанию Re: IAR код виснет на M4

Заверни main во while (1)
niXto вне форума  
Сказали "Спасибо" niXto
majorka65 (10.11.2015)
Непрочитано 12.11.2015, 02:47  
stm8
Частый гость
 
Регистрация: 12.06.2015
Сообщений: 10
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
stm8 на пути к лучшему
По умолчанию Re: IAR код виснет на M4

Сделал новый проект с нуля всё работает,
что то меняется.
дебаггер не отвчает, нажимаеш бреак, PC стоит на
DMA2_Stream5_IRQHandler

Пока ничего не могу понять,
единственное что добавляю в проект
startup_stm32f40_41xxx.s ( из CMSIS от ST)
system_stm32f4xx.c


но с ними вроде вначало все работает.

Хотя конечно то что inline ассемблер вставляет не те инструкции, что написаны, не очень нравиться. MOV инструкцию вообще не признает

IAR линкер для STM32А407VG все адреса и размеры правильно знает по умолчанию?

Кому то удалось научить IAR загружать и отлаживать код из RAM, как это можно в проектах которые идут вместе с Keil?
stm8 вне форума  
Непрочитано 12.11.2015, 11:46  
SasaVitebsk
Гражданин KAZUS.RU
 
Регистрация: 04.08.2006
Сообщений: 911
Сказал спасибо: 28
Сказали Спасибо 180 раз(а) в 139 сообщении(ях)
SasaVitebsk на пути к лучшему
По умолчанию Re: IAR код виснет на M4

У вас формируется проект. По умолчанию в нём 2 режима "Release" и "Debug". Если щёлкнуть по нему правой кнопкой мыши (либо через меню), то можно вызвать свойства проекта.
В Опции "general" выберите свой процессор. ну и покопайтесь там ещё. Там много чего надо установить.
Например тип выходного файла. В link - ере порой я некоторые опции меняю. Там где отладка тоже.

Ну и если честно, не понимаю 2 момента.
1) Зачем вам inline процессор? Это не тот процессор, чтобы туда что-то инлайнить. Ну если хотите побаловаться подключите файл на асме и творите. Не понимаю, зачем люди себе и другим проблемы создают.
2) Зачем вам в ram прогу размещать? Боитесь флэш убить? Так можете не бояться. Здоровья не хватит. Хотите ускорить? тогда несколько подходы другие. Хотите оверлеи сделать?
Освойте сначала простые методы работы, тогда, вы сами увидите, запросы совсем изменятся.
Миниатюры:
Нажмите на изображение для увеличения
Название: 2015-11-12_103307.gif
Просмотров: 32
Размер:	28.6 Кб
ID:	84718   Нажмите на изображение для увеличения
Название: 2015-11-12_103640.gif
Просмотров: 39
Размер:	28.3 Кб
ID:	84719  
SasaVitebsk вне форума  
Непрочитано 12.11.2015, 23:26  
stm8
Частый гость
 
Регистрация: 12.06.2015
Сообщений: 10
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
stm8 на пути к лучшему
По умолчанию Re: IAR код виснет на M4

Цитата:
Ну и если честно, не понимаю 2 момента.
1) Зачем вам inline процессор? Это не тот процессор, чтобы туда что-то инлайнить. Ну если хотите побаловаться подключите файл на асме и творите. Не понимаю, зачем люди себе и другим проблемы создают.
2) Зачем вам в ram прогу размещать? Боитесь флэш убить? Так можете не бояться. Здоровья не хватит. Хотите ускорить? тогда несколько подходы другие. Хотите оверлеи сделать?
Освойте сначала простые методы работы, тогда, вы сами увидите, запросы совсем изменятся.
к inline ассемблеру прибег когда были зависания при загрузки константы в переменную, а потом чисто случайно в дебаггере обнаружил, что компилятор вставляет не те инструкции что я писал.

Насчет RAM, да это быстрее, если знаете другие методы, подскажите,
в симуляторе код совершенно по другому выполняется.

Сейчас просто вопрос что использовать для ARM,
если Keil может загружать код для отладки сразу в RAM, а IAR нет, тогда какие преимущества у него есть чтобы продолжать им пользоваться?

Есть ли какая то особая необходимость пользоваться
startup_stm32f40_41xxx.s и system_stm32f4xx.c
( из CMSIS от ST)

После сброса процессор и регистры выставляется во вполне определенное состояние в котором им уже можно пользоваться (ну например, в отличии от LCD Hitachi HD44780) ?
Поставить нужную частоту и ее источник, а там уже конфигурировать регистры под конкретную задачу?
stm8 вне форума  
Непрочитано 13.11.2015, 10:48  
SasaVitebsk
Гражданин KAZUS.RU
 
Регистрация: 04.08.2006
Сообщений: 911
Сказал спасибо: 28
Сказали Спасибо 180 раз(а) в 139 сообщении(ях)
SasaVitebsk на пути к лучшему
По умолчанию Re: IAR код виснет на M4

Сообщение от stm8 Посмотреть сообщение
к inline ассемблеру прибег когда были зависания при загрузки константы в переменную, а потом чисто случайно в дебаггере обнаружил, что компилятор вставляет не те инструкции что я писал.
Ну какие могут быть "зависания" при загрузке ...
Ну ребята. Ну я ещё как то понимаю Когда журналист пишет какую-то чушь... Но вы же позиционируете себя как "программисты". Причём не в том смысле, что умеете на клавиши нажимать, а в том смысле, что должны понимать внутреннюю структуру процессора и как это всё работает.. Хотя бы в общих чертах. Если вы к этому процу подключились, залили в него прогу, вместе со стартапом остановились и вычитали состояние, то можете не сомневаться, он полностью исправен и ничего там не зависает ... Иначе вы бы на экране увидили дырку от бублика...
Цитата:
Насчет RAM, да это быстрее, если знаете другие методы, подскажите,
в симуляторе код совершенно по другому выполняется.
Для данного МК время исполнения кода из Flash памяти не будет существенно увеличиваться. Там ускоритель есть. Народ экспериментировал, на некоторых задачах будет даже проигрыш. Правда есть специальная память высокоскоростная, для критических участков ССM.
Цитата:
Up to 192+4 Kbytes of SRAM including 64-
Kbyte of CCM (core coupled memory) data
RAM
Но в целом, это абсолютно не стоит внимания. Работайте во флэши.
Вы же не говорите для чего Вам RAM нужен.
Простой запрос выдал такую вот ссылку, к примеру... http://we.easyelectronics.ru/STM32/v...ozu-v-iar.html
Цитата:
Сейчас просто вопрос что использовать для ARM,
если Keil может загружать код для отладки сразу в RAM, а IAR нет, тогда какие преимущества у него есть чтобы продолжать им пользоваться?
Я так понимаю, вы сейчас о среде IAR, а не о компиляторе... Преимущества у него серьёзные. Он глобально по другому построен. IAR - это набор инструментов, которые соединены стандартным способом, что позволяет любой из инструментов заменить на другой... более привычный..
Например та же загрузка, выполняется не средствами IAR а чемм-то другим... Войдите туда же в опции проекта. Покопайтесь. Я же вам писал...
Я например в текущий момент пользуюсь ST-Link в качестве отладчика...
Вкладываю картинку, где буквально видно, что при загрузке используется утилита самого st и видно что есть файл настроек, который, совершенно очевидно , может быть подправлен, и будет указано куда чего загружать.
Вообще, конечно, дело вкуса ... Я значительное время работал и там и там и мне Keil очень не нравится. Причём по той же причине, по которой нравится другим. ))) В отладке он отвратительно себя показал. Например, если я под FreeRTOS запускаю 2 одинаковых задачи, то отлаживать практически невозможно. Я вообще не понимаю, что он показывает. Приходится переменные делать статическими чтобы увидеть их содержание. IAR просто на голову... Это долго рассказывать, да и боюсь целый холивар начнётся. Если вам удоьно в Keil работать - работайте. Проблем не вижу.
Цитата:
Есть ли какая то особая необходимость пользоваться
startup_stm32f40_41xxx.s и system_stm32f4xx.c
( из CMSIS от ST)
CMSIS это не st. Это ARM. Поэтому необходимость есть как в IAR так и в Keil. В двух словах, это попытка ARM стандартизировать работу с ядром, под разными компиляторами. А то зверинец реально задолбал ...
Цитата:
После сброса процессор и регистры выставляется во вполне определенное состояние в котором им уже можно пользоваться (ну например, в отличии от LCD Hitachi HD44780) ?
Есть даташит на семейство МК например st32f4xx и там описано оборудование. Некоторые регистры устанавливаются по сбросу в какое-то состояние (причём необязательно в нулевое) некоторые имеют неопределённое состояние. Это описано подробно.
Цитата:
Поставить нужную частоту и ее источник, а там уже конфигурировать регистры под конкретную задачу?
Лучше возьмите готовый проект, изучите его и подправьте под себя.
Так например, для процессоров Cortex надо не только "настроить частоту" процессора. Там несколько шин и несколько источников тактирования и это целая процедура. Кроме того, необходимо подать CLK на модуль, который будете использовать. Иначе он работать не будет.
Код:
  __disable_interrupt();

  // STM32F4xx HAL library initialization:
  //   - Configure the Flash prefetch, instruction and Data caches
  //   - Configure the Systick to generate an interrupt each 1 msec
  //   - Set NVIC Group Priority to 4
  //   - Global MSP (MCU Support Package) initialization
  HAL_Init();
  
  // Configure the system clock to have a system clock = 168 Mhz
  SystemClock_Config();

  // Включение тактирования портов ввода/вывода
  // 168 MHz
  __GPIOA_CLK_ENABLE();
  __GPIOB_CLK_ENABLE();
  __GPIOC_CLK_ENABLE();
  __GPIOD_CLK_ENABLE();
  __GPIOE_CLK_ENABLE();
  // Включение тактирования базового таймера (TIM6) для расчёта малых задержек (работа LCD)
  __TIM6_CLK_ENABLE();

  // Инициализировать порт кнопки калибровки
  KEY_CALIBR_INIT;
  vDelay60ns();
  vDelay60ns();
  vDelay60ns();
  // Проверить первинициализацию начального теста
  if(IS_KEY_CALIBR==0) firstdiag();
  
  // Включение тактирования DMA1 и 2
  // 168 MHz
  __DMA1_CLK_ENABLE();
  __DMA2_CLK_ENABLE();
  // Enable тактирования ETHERNET clock 
  __ETH_CLK_ENABLE();
Миниатюры:
Нажмите на изображение для увеличения
Название: 2015-11-13_091912.gif
Просмотров: 30
Размер:	21.1 Кб
ID:	84749  

Последний раз редактировалось SasaVitebsk; 13.11.2015 в 10:50.
SasaVitebsk вне форума  
Сказали "Спасибо" SasaVitebsk
Zoosman (17.11.2015)
 

Закладки
Опции темы

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

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

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

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Подниму тему WinAVR vs IAR oleg110592 Микроконтроллеры, АЦП, память и т.д 5 24.10.2015 14:06
IAR 6.60 при выборе процессора STM32F030C8 виснет alexdos ARM 6 30.09.2013 09:05
Виснет IAR при отладке AT91SAM9x512 + AT91SAM-ICE svad0 Микроконтроллеры, АЦП, память и т.д 6 30.01.2011 14:56
Проба пера AT91SAM9260 + IAR + J-Link ZED® Микроконтроллеры, АЦП, память и т.д 31 07.12.2010 21:18
MPLAB IDE и HI-TECH 18 s-4ern Микроконтроллеры, АЦП, память и т.д 16 17.09.2009 14:06


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


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