Перейти к содержанию

    

ruslan1

Свой
  • Публикаций

    2 369
  • Зарегистрирован

  • Посещение

Репутация

0 Обычный

Информация о ruslan1

  • Звание
    Гуру
  • День рождения 09.01.1973

Контакты

  • Сайт
    http://
  • ICQ
    0

Информация

  • Город
    Кишинев

Посетители профиля

9 115 просмотров профиля
  1. Вы имеете в виду LOAD MODE REGISTER (LMR) ? В данных микросхемах (и в старой и в новой) в LMR перепутанные биты A10 и A12 оба "Reserved" и туда записываются нули
  2. Уважаемые nanorobot и jcxz, Спасибо за предложения помочь с железом! Удалось запустить имеющуюся плату с полной памятью(32МБ) после простой перепайки-перерезки, так что дополнительные тушки для экспериментов вроде как и не нужны :) Что интересно: собственно это было как бы дополнительная хотелка, основной софт на предыдущих версиях платы и на 8МБ трудится устойчиво. Так что думаю может и переделывать не стану, пока не нужно. А что на плате запаяна микросхема 32МБ- это скрытые резервы, которые можно будет задействовать в будущем путем несложной перепайки :)
  3. (Кстати, нашел внятный перевод части документа на эту самую SDRAM, если кому на великом и могучем легче: тынц!) Выпив, я рассудил трезво.... Спасибо за советы и идеи, вот какие выводы сделал из выше(ниже)написанного: 1. для использования памяти в полном объеме нужно резать. В смысле, соединять адреса правильно а не как у меня. Это самый простой и понятный "костыль". Как выше заметил VladislavS, с учетом наличия резисторов подобраться к дорожкам технологически несложно. 2. Нужно понять, может ли работать микросхема в таком режиме (без изменения платы), с использованием только первой четверти памяти (0-й банк)? По моему разумению да, но тут хотелось бы ваше мнение услышать. Почему мне кажется что работа стабильна в таком режиме при использовании только четверти памяти: Про перемешивание строк и столбцов: У меня строки: row address: A[12:0], столбцы: column address: A[8:0]. То есть собственно строки и столбцы из-за перестановки A10 <-> A11 не перемешиваются, можно спать спокойно. Про Precharge: А вот тут интереснее, ибо A10 не просто адрес, он дырку в стене загораживает активно участвует в данном процессе: Из документации на мой МК: То есть пока я сижу тихо и не отсвечиваю не устанавливаю мой A11 (для SDRAM это A10) в 'high', это штатный режим работы. Делаю вывод: свои 8 Мегабайт из установленных 32 я могу и так использовать, без всяких харакири на плате.
  4. У меня перепутаны на элементе в схематике A11 и A10. должно быть A10- pin22, у меня- pin 35, A11- pin35, у меня pin22. Перекинул проводками- заработало. Лет 6 назад его рисовал. блин. А может и не я рисовал.... Что самое интересное- никаких проблем с 8-МБайт памятью не было, даже и не думал про такое. И как теперь с этим жить....
  5. Спасибо, попробовал с разными сочетаниями CAS Latency для FMC (2 и 3) и соответственно менял MR (220 и 230). Ничего не изменилось. Я уже раньше по интернету смотрел насчет конфигурации для этой MT48LC16M16A2, разницу MR=230 вместо моего 231 увидел, и пробовал конечно. Более того, я не совсем понимаю почему с 231 (Burst Length=2) работало с 8MB чипом и продолжает работать сейчас. Но это не суть моей проблемы. Спасибо за напоминаие, я и не замечал что МК этот бурст не поддерживает. буду 230/220 применять. Похоже на системную ошибку при разводке или сборке. Заказал на пробу одну MT48LC16M16A2 из другого источника, посмотрю что изменится при ее установке на старую версию платы (прокину проводком PA12 и поиграюсь). Если не поможет- значит все-таки не разводка новой платы и не брак памяти. Резисторы: тянется из старых разработок, последовательное согласование. Все никак не уберу, если уж на плату влезли и из-за правила "работает-не трогай". Думаете, может глючить из-за них? Попробую.
  6. И снова здравствуйте всем! Вот у меня и дошли наконец-то руки до этой платы. Поигрался- прослезился. Что-то не так, а где- понять не могу. В двух словах: Конструкция: На старой плате стояла микросхема IS42S16400J (1 Meg Bits x 16 Bits x 4 Banks, 64-MBIT) На новой плате установлена MT48LC16M16A2TG-6A IT G ( 4 Meg x 16 x 4 banks, 256-MBIT) МК: STM32F429IIT6, rev.3 Изменения: доведена до МК линия A12 (раньше висела в воздухе). Результат: стабильно тестируется только первая четверть RAM (8 Мегабайт из 32 имеющихся). При доступе к следующим адресам иногда происходит запись в младшие адреса. Что бы это могло быть? нестабильная работа цепи A12 ? Осциллографом смотрю- вижу сигналы на пинах, криминала в форме не вижу. Замыканий вроде нет, и не глюк конкретного экземпляра (проверил на трех таких собранных платах) В программе измемения сделал минимальные: - добавил конфигурирование A12 - изменил длину шины строки с 12 бит на 13 бит - измненил длину шины столбца с 8 на 9 бит - изменил время рефреша согласно моей тактовой 83.968 MHz: 64ms/8192 raws = 7.8125 us, 7.8125 * 83.968 MHz = 656, 656 -20 = 646 Схема: вроде бы стандартная, только поменяны на шине данных D15 и D13 для более удобной разводки (это уже давно сделано, никогда не мешало в старых версиях платы). Моя инициализация: /* FMC GPIO Configuration PF0 ------> FMC_A0 PF1 ------> FMC_A1 PF2 ------> FMC_A2 PF3 ------> FMC_A3 PF4 ------> FMC_A4 PF5 ------> FMC_A5 PC0 ------> FMC_SDNWE PH2 ------> FMC_SDCKE0 PH3 ------> FMC_SDNE0 PF11 ------> FMC_SDNRAS PF12 ------> FMC_A6 PF13 ------> FMC_A7 PF14 ------> FMC_A8 PF15 ------> FMC_A9 PG0 ------> FMC_A10 PG1 ------> FMC_A11 PG2 ------> FMC_A12 new pin, in old boards this pin is not connected PE7 ------> FMC_D4 PE8 ------> FMC_D5 PE9 ------> FMC_D6 PE10 ------> FMC_D7 PE11 ------> FMC_D8 PE12 ------> FMC_D9 PE13 ------> FMC_D10 PE14 ------> FMC_D11 PE15 ------> FMC_D12 PD8 ------> FMC_D13 PD9 ------> FMC_D14 PD10 ------> FMC_D15 PD14 ------> FMC_D0 PD15 ------> FMC_D1 PG4 ------> FMC_BA0 PG5 ------> FMC_BA1 PG8 ------> FMC_SDCLK PD0 ------> FMC_D2 PD1 ------> FMC_D3 PG15 ------> FMC_SDNCAS PE0 ------> FMC_NBL0 PE1 ------> FMC_NBL1 */ #define SDRAM_TIMEOUT ((uint32_t)0xFFFF) void external_RAM_init() { //--------------------------- GPIO ----------------------- GPIO_InitTypeDef GPIO_InitStructure; /* Alternate functions configuration */ GPIO_PinAFConfig(GPIOC, GPIO_PinSource0, GPIO_AF_FMC); GPIO_PinAFConfig(GPIOD, GPIO_PinSource0, GPIO_AF_FMC); GPIO_PinAFConfig(GPIOD, GPIO_PinSource1, GPIO_AF_FMC); GPIO_PinAFConfig(GPIOD, GPIO_PinSource8, GPIO_AF_FMC); GPIO_PinAFConfig(GPIOD, GPIO_PinSource9, GPIO_AF_FMC); GPIO_PinAFConfig(GPIOD, GPIO_PinSource10, GPIO_AF_FMC); GPIO_PinAFConfig(GPIOD, GPIO_PinSource14, GPIO_AF_FMC); GPIO_PinAFConfig(GPIOD, GPIO_PinSource15, GPIO_AF_FMC); GPIO_PinAFConfig(GPIOE, GPIO_PinSource0, GPIO_AF_FMC); GPIO_PinAFConfig(GPIOE, GPIO_PinSource1, GPIO_AF_FMC); GPIO_PinAFConfig(GPIOE, GPIO_PinSource7, GPIO_AF_FMC); GPIO_PinAFConfig(GPIOE, GPIO_PinSource8, GPIO_AF_FMC); GPIO_PinAFConfig(GPIOE, GPIO_PinSource9, GPIO_AF_FMC); GPIO_PinAFConfig(GPIOE, GPIO_PinSource10, GPIO_AF_FMC); GPIO_PinAFConfig(GPIOE, GPIO_PinSource11, GPIO_AF_FMC); GPIO_PinAFConfig(GPIOE, GPIO_PinSource12, GPIO_AF_FMC); GPIO_PinAFConfig(GPIOE, GPIO_PinSource13, GPIO_AF_FMC); GPIO_PinAFConfig(GPIOE, GPIO_PinSource14, GPIO_AF_FMC); GPIO_PinAFConfig(GPIOE, GPIO_PinSource15, GPIO_AF_FMC); GPIO_PinAFConfig(GPIOF, GPIO_PinSource0, GPIO_AF_FMC); GPIO_PinAFConfig(GPIOF, GPIO_PinSource1, GPIO_AF_FMC); GPIO_PinAFConfig(GPIOF, GPIO_PinSource2, GPIO_AF_FMC); GPIO_PinAFConfig(GPIOF, GPIO_PinSource3, GPIO_AF_FMC); GPIO_PinAFConfig(GPIOF, GPIO_PinSource4, GPIO_AF_FMC); GPIO_PinAFConfig(GPIOF, GPIO_PinSource5, GPIO_AF_FMC); GPIO_PinAFConfig(GPIOF, GPIO_PinSource11, GPIO_AF_FMC); GPIO_PinAFConfig(GPIOF, GPIO_PinSource12, GPIO_AF_FMC); GPIO_PinAFConfig(GPIOF, GPIO_PinSource13, GPIO_AF_FMC); GPIO_PinAFConfig(GPIOF, GPIO_PinSource14, GPIO_AF_FMC); GPIO_PinAFConfig(GPIOF, GPIO_PinSource15, GPIO_AF_FMC); GPIO_PinAFConfig(GPIOG, GPIO_PinSource0, GPIO_AF_FMC); GPIO_PinAFConfig(GPIOG, GPIO_PinSource1, GPIO_AF_FMC); GPIO_PinAFConfig(GPIOG, GPIO_PinSource2, GPIO_AF_FMC); GPIO_PinAFConfig(GPIOG, GPIO_PinSource4, GPIO_AF_FMC); GPIO_PinAFConfig(GPIOG, GPIO_PinSource5, GPIO_AF_FMC); GPIO_PinAFConfig(GPIOG, GPIO_PinSource8, GPIO_AF_FMC); GPIO_PinAFConfig(GPIOG, GPIO_PinSource15, GPIO_AF_FMC); GPIO_PinAFConfig(GPIOH, GPIO_PinSource2, GPIO_AF_FMC); GPIO_PinAFConfig(GPIOH, GPIO_PinSource3, GPIO_AF_FMC); /* GPIO_InitStruct port C*/ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz; GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; GPIO_Init(GPIOC, &GPIO_InitStructure); /* GPIO_InitStruct port D*/ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_8 | GPIO_Pin_9 | GPIO_Pin_10 | GPIO_Pin_14 | GPIO_Pin_15; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz; GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; GPIO_Init(GPIOD, &GPIO_InitStructure); /* GPIO_InitStruct port E*/ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_7 | GPIO_Pin_8 | GPIO_Pin_9 | GPIO_Pin_10 | GPIO_Pin_11 | GPIO_Pin_12 | GPIO_Pin_13 | GPIO_Pin_14 | GPIO_Pin_15; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz; GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; GPIO_Init(GPIOE, &GPIO_InitStructure); /* GPIO_InitStruct port F*/ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3 | GPIO_Pin_4 | GPIO_Pin_5 | GPIO_Pin_11 | GPIO_Pin_12 | GPIO_Pin_13 | GPIO_Pin_14 | GPIO_Pin_15; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz; GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; GPIO_Init(GPIOF, &GPIO_InitStructure); /* GPIO_InitStruct port G*/ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2 |GPIO_Pin_4 | GPIO_Pin_5 | GPIO_Pin_8 | GPIO_Pin_15; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz; GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; GPIO_Init(GPIOG, &GPIO_InitStructure); /* GPIO_InitStruct port H*/ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2 | GPIO_Pin_3; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz; GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; GPIO_Init(GPIOH, &GPIO_InitStructure); //--------------------------- FMC ----------------------- FMC_SDRAMInitTypeDef FMC_SDRAMInitStructure; FMC_SDRAMTimingInitTypeDef FMC_SDRAM_TimingInitStructure; FMC_SDRAMCommandTypeDef FMC_SDRAMCommandStructure; uint32_t timeout = SDRAM_TIMEOUT; /* enable required clocks for periphicals */ RCC_AHB3PeriphClockCmd(RCC_AHB3Periph_FMC, ENABLE); RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOC, ENABLE); RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOD, ENABLE); RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOE, ENABLE); RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOF, ENABLE); RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOG, ENABLE); RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOH, ENABLE); external_RAM_GPIO_init(); FMC_SDRAM_TimingInitStructure.FMC_ExitSelfRefreshDelay = 7; FMC_SDRAM_TimingInitStructure.FMC_LoadToActiveDelay = 2; FMC_SDRAM_TimingInitStructure.FMC_RCDDelay = 2; FMC_SDRAM_TimingInitStructure.FMC_RowCycleDelay = 7; FMC_SDRAM_TimingInitStructure.FMC_RPDelay = 2; FMC_SDRAM_TimingInitStructure.FMC_SelfRefreshTime = 4; FMC_SDRAM_TimingInitStructure.FMC_WriteRecoveryTime = 2; FMC_SDRAMInitStructure.FMC_Bank = FMC_Bank1_SDRAM; FMC_SDRAMInitStructure.FMC_CASLatency = FMC_CAS_Latency_3; FMC_SDRAMInitStructure.FMC_ColumnBitsNumber = FMC_ColumnBits_Number_9b; FMC_SDRAMInitStructure.FMC_InternalBankNumber = FMC_InternalBank_Number_4; FMC_SDRAMInitStructure.FMC_ReadBurst = FMC_Read_Burst_Enable; FMC_SDRAMInitStructure.FMC_ReadPipeDelay = FMC_ReadPipe_Delay_1; FMC_SDRAMInitStructure.FMC_RowBitsNumber = FMC_RowBits_Number_13b; FMC_SDRAMInitStructure.FMC_SDClockPeriod = FMC_SDClock_Period_2; FMC_SDRAMInitStructure.FMC_SDMemoryDataWidth = FMC_SDMemory_Width_16b; FMC_SDRAMInitStructure.FMC_SDRAMTimingStruct = &FMC_SDRAM_TimingInitStructure; FMC_SDRAMInitStructure.FMC_WriteProtection = FMC_Write_Protection_Disable; FMC_SDRAMInit(&FMC_SDRAMInitStructure); /* Configure a clock configuration enable command */ FMC_SDRAMCommandStructure.FMC_CommandMode = FMC_Command_Mode_CLK_Enabled; FMC_SDRAMCommandStructure.FMC_CommandTarget = FMC_Command_Target_bank1; FMC_SDRAMCommandStructure.FMC_AutoRefreshNumber = 1; FMC_SDRAMCommandStructure.FMC_ModeRegisterDefinition = 0; /* Wait until the SDRAM controller is ready */ timeout = SDRAM_TIMEOUT; while (FMC_GetFlagStatus(FMC_Bank1_SDRAM, FMC_FLAG_Busy) != RESET && timeout--); /* Send the command */ FMC_SDRAMCmdConfig(&FMC_SDRAMCommandStructure); /* Delay */ for (int i = 0; i < 100000; i++) /* Configure a PALL (precharge all) command */ FMC_SDRAMCommandStructure.FMC_CommandMode = FMC_Command_Mode_PALL; FMC_SDRAMCommandStructure.FMC_CommandTarget = FMC_Command_Target_bank1; FMC_SDRAMCommandStructure.FMC_AutoRefreshNumber = 1; FMC_SDRAMCommandStructure.FMC_ModeRegisterDefinition = 0; /* Wait until the SDRAM controller is ready */ timeout = SDRAM_TIMEOUT; while (FMC_GetFlagStatus(FMC_Bank1_SDRAM, FMC_FLAG_Busy) && timeout--); /* Send the command */ FMC_SDRAMCmdConfig(&FMC_SDRAMCommandStructure); /* Configure a Auto-Refresh command */ FMC_SDRAMCommandStructure.FMC_CommandMode = FMC_Command_Mode_AutoRefresh; FMC_SDRAMCommandStructure.FMC_CommandTarget = FMC_Command_Target_bank1; FMC_SDRAMCommandStructure.FMC_AutoRefreshNumber = 8; FMC_SDRAMCommandStructure.FMC_ModeRegisterDefinition = 0; /* Wait until the SDRAM controller is ready */ timeout = SDRAM_TIMEOUT; while (FMC_GetFlagStatus(FMC_Bank1_SDRAM, FMC_FLAG_Busy) && timeout--); /* Send the command */ FMC_SDRAMCmdConfig(&FMC_SDRAMCommandStructure); /* Configure a load Mode register command */ FMC_SDRAMCommandStructure.FMC_CommandMode = FMC_Command_Mode_LoadMode; FMC_SDRAMCommandStructure.FMC_CommandTarget = FMC_Command_Target_bank1; FMC_SDRAMCommandStructure.FMC_AutoRefreshNumber = 1; FMC_SDRAMCommandStructure.FMC_ModeRegisterDefinition = 0x0231; /* Wait until the SDRAM controller is ready */ timeout = SDRAM_TIMEOUT; while (FMC_GetFlagStatus(FMC_Bank1_SDRAM, FMC_FLAG_Busy) && timeout--); /* Send the command */ FMC_SDRAMCmdConfig(&FMC_SDRAMCommandStructure); /* Set the device refresh counter */ /* 64/8192 = 7.8125 us, 7.8125 * 83.968 Mhz = 656, 656 -20 = 646 */ FMC_SetRefreshCount(646); /* Wait until the SDRAM controller is ready */ timeout = SDRAM_TIMEOUT; while(FMC_GetFlagStatus(FMC_Bank1_SDRAM, FMC_FLAG_Busy) != RESET && timeout--); }
  7. Ethernet через шлейф

    Для данного вопроса макет может только доказать что "это нельзя использовать". Доказать что "это годное решение" - сам макет не сможет, тут полный НИОКР нужен :)
  8. Ethernet через шлейф

    ... И продают дополнительные шнуры-переходники с этого штыревого разъема в нормальное LAN гнездо? Или все-таки продают плату расширения, в которую втыкается напрямую эта гребенка, и на плате расширения уже установлен нормальный коннектор? Я тоже использую межплатный IDC шлейф для Ethernet, но он у меня 5 см. На 30см я не стану так делать.
  9. Ethernet через шлейф

    Не хотите головной боли- берите нормальные разъемы и кабели. 30см не так уж и мало. Решайте с помощью стандартный средств, это избавит от многих проблем и в результате может оказаться сильно дешевле (и в производстве, и в эксплуатации, и в ремонте). Ставьте стандартный RJ45 на плату. На корпус- разъем с RJ45 мамой наружу и кабелем 40см с RJ45 папой внутрь. Еще можно найти разъемы которые имеют маму наружу и маму внутрь, добавляете стандартный кабель и вперед. Мы использовали оба варианта (обычно нужно IP67 и лучше), разъем с хвостом удобней и дешевле.
  10. Git на сервере

    Так он вообще не про Гит спрашивал. Если про Гит, то лично я перешел на gitlab.com, доволен. Сейчас крутится больше 20 приватных проектов, все норм. Полностью бесплатно. Тормозов или глюков пока не заметно. Делается периодически архивирование на локальный сервер (в два нажатия плюс скачивание подготовленного архива). До этого пользовались хостингом на Digital Ocean. Но за последние два года было несколько непонятных падений. Причем есть несколько независимых дроплетов для разных задач, падали в разных сочетаниях и с разным внешним эффектом (например, использование ЦП возрастало до 100%, или много обращений к диску). Задачи разные, дроплеты не связаны, общее- только хостер. Уже увел оттуда все кроме FTP. Надоело стандартные задачи поддерживать, раскидал по облачным поставщикам готового. Осталось только найти того, кто готовое FTP в облаке предоставляет. Как ни странно, такое найти сложно. Часто есть ftp как дополнение к хостингу сайта. Но такое ощущение что Ftp там писали какие-то андроид-программеры, убого и некорректно. Так что ищу именно Ftp хостинг, занедорого, а не "веб хостинг и ftp". И у меня специфика- трафика вроде немного, но зато может кучка "клиентов", порядка сотни, постоянно подключаться-отключаться, причем много с одинаковыми логинами.
  11. Набор для разработки на ARM

    Можете рассказать, насколько J-Link быстрее, чем ST-Link и в каком из режимов и с какими STM камнями это уже важно? Для чего конкретно Вы не станете использовать ST-Link, потому что это сильно замедлит работу? Ну, скажем, программирует быстрее. Или читает дампы памяти быстрее при отладке. Или позволяет такое, чего не может ST-Link. Никак не могу для себя аргументировать покупку J-Link. просто не понимаю зачем он мне нужен. Могу купить, но не знаю зачем :) Я с J-Link дела не имел уже лет 10, но когда использовал (с ARM-9), ничем выдающимся он не запомнился (на фоне тогда же используемых для других камней шайбы от Майкрочипа, LPT программатора от Альтеры и Фитоновского ЧипПрога). Только вот помню, что даже программатор (J-Flash?) уже шел как отдельная опция и не входил в базовую цену (которая была очень немаленькой). Ну и помню что к ИАРу почему-то хитро цеплялся, нужны были пляски с бубном.
  12. Набор для разработки на ARM

    Извините, я не заметил, может тут уже советовали: если "все только начинается", то могу посоветовать "старую новую" оболочку "atollic truestudio" (тынц!) Она уже полгода как бесплатная. Очень интересная штука. Есть встроенные вкусности, например средства для отладки RTOS. Я ее только пробовал по полному циклу (редактирование, компилирование, отладка)- понравилось. Если буду проект с нуля делать- очень вероятно что на эту оболочку перейду. J-link совсем не нужен. Достаточно ST-Link. И желательно нормальный от ST. Придется раскошелится на 10-20-30 долларов (я их как часть платы NUCLEO брал, тынц). Китайские тоже работают, но у них есть бяка с RESET, как тут уже заметили, иногда (очень редко и не для всех камней) это может быть важно.
  13. "asm" function is nonstandard

    Ну, если из листинга исчезает примерно 500 ошибок, это делает понимание оставшихся там десятков сообщений более легким. Оределил эту __NO_EMBEDDED_ASM, данная проблема в этом файле пропала. Но вот чем это грозит? Кстати, теперь оно находит эту asm- ошибку только в порте FreeRTOS ("port.c"), на файлы CMSIS вроде больше и не ругается. как-то: _asm uint32_t vPortGetIPSR( void ) { PRESERVE8 mrs r0, ipsr bx r14 } __asm void prvEnableVFP( void ) { PRESERVE8 /* The FPU enable bits are in the CPACR. */ ldr.w r0, =0xE000ED88 ldr r1, [r0] /* Enable CP10 and CP11 coprocessors, then save back. */ orr r1, r1, #( 0xf << 20 ) str r1, [r0] bx r14 nop }
  14. "asm" function is nonstandard

    Какой asm файл я не использую? Вы про "__NO_EMBEDDED_ASM" ? ну я не знаю. Предки так делали и нам завещали, даже не задумывался над этим. А что, лучше включить?
  15. "asm" function is nonstandard

    чтобы проверить свои исходники на наличие потенциальных проблем.