Jump to content

    

Dark0711

Участник
  • Content Count

    39
  • Joined

  • Last visited

Community Reputation

0 Обычный

About Dark0711

  • Rank
    Участник
  1. boost

    Что удалось выяснить. 1. Не все библиотеки надо собирать, а только CODEBoost.Chrono Boost.Context Boost.Filesystem Boost.GraphParallel Boost.IOStreams Boost.Locale Boost.MPI Boost.ProgramOptions Boost.Python Boost.Regex Boost.Serialization Boost.Signals Boost.System Boost.Thread Boost.Timer Boost.Wave 2. Нужна бородатая версия boost с поддержкой с99 Это видимо 1.39 или 1.40(Есть сомнения), выше не смотрел,1.47 уже одни ошибки. Толком не проверял смотрел только boost.bing, boost.range, boost.array. Цитата(demiurg_spb @ Jan 14 2016, 14:47) Думаю, что никак. Там наверняка с++11 и выше, а что умеет ИАР с его embeddedC++ я особо не в теме. Для GCC это было бы много реальнее, но и тут могут возникнуть траблы с объёмом кучи. ИМХО. Интересно а ARM toolchain уже поддерживает C++11 и C++14 ?
  2. boost

    Всем доброго дня. Подскажите пожалуйста как можно собрать boost под IAR.
  3. Добрый день помогите пожалуйста, пытаюсь запустить DMA отправку в SPI по таймеру. Проходит первый пакет и всё, передача останавливаеться, хотя таймер щелкает. Код        Timer = LPC_TIM0;         ChannelNum = 0;              SSP_ConfigStructInit(&SSP_ConfigStruct);     SSP_ConfigStruct.CPHA = SSP_CPHA_SECOND;     SSP_ConfigStruct.CPOL = SSP_CPOL_LO;     SSP_ConfigStruct.Databit = SSP_DATABIT_16;     SSP_Init(SSP_ID,&SSP_ConfigStruct);     SSP_Cmd(SSP_ID, ENABLE);      GPDMA_Channel_CFG_Type GPDMACfg;      GPDMACfg.ChannelNum = ChannelNum;      GPDMACfg.SrcMemAddr = (uint32_t)&Buff;      GPDMACfg.DstMemAddr = 0;      GPDMACfg.TransferSize = sizeof(Buff)/2;      GPDMACfg.TransferWidth = 0;      GPDMACfg.TransferType = GPDMA_TRANSFERTYPE_M2P;      GPDMACfg.SrcConn = GPDMA_CONN_MAT0_1;      GPDMACfg.DstConn = GPDMA_CONN_SSP0_Tx;      GPDMACfg.DMALLI = 0;      GPDMA_Setup(&GPDMACfg);      GPDMA_SetIRQAddr(ChannelNum,SSP2_DMA_IRQHandler);//Прерывание SPI для DMA      SSP_DMACmd (SSP_ID,SSP_DMA_TX, ENABLE);      GPDMA_ChannelCmd(ChannelNum, ENABLE);         TIM_ConfigCFG.PrescaleValue = 100;     TIM_ConfigCFG.PrescaleOption = TIM_PRESCALE_USVAL;     TIM_MatchCFG.MatchChannel = 1;     TIM_MatchCFG.IntOnMatch = true;     TIM_MatchCFG.ResetOnMatch = true;     TIM_MatchCFG.StopOnMatch = false;     TIM_MatchCFG.ExtMatchOutputType = TIM_EXTMATCH_TOGGLE;     TIM_MatchCFG.MatchValue   = 10000;     TIM_Init(Timer, TIM_TIMER_MODE, &TIM_ConfigCFG);     TIM_ConfigMatch(Timer, &TIM_MatchCFG);     TIM_ClearIntPending(Timer, TIM_MR1_INT);     TIM_Cmd(Timer, ENABLE);     NVIC_EnableIRQ(TIMER0_IRQn);
  4. Vinculum II - FTDI

    Цитата(mantech @ Mar 23 2015, 17:18) ЗЫ. Что мешает избавиться от этой экзотики и поставить нормальный АРМ с кучей уже готовых примеров с усб и файловой системой?? Проект уже собран в виде устройства. Библиотеку Я получил от них. Нужно написать им письмецо и заполнить форму и всё.
  5. Vinculum II - FTDI

    Цитата(KnightIgor @ Mar 20 2015, 18:34) FatFS? Не это не то, там готовая либа. Добавил и всё. А если FATFS прикручивать, можно увязнуть надолго.
  6. Vinculum II - FTDI

    Добрый день. Есть у кого к этому чуду(Vinculum II - FTDI) библиотека LFAT, для работы с длинными именами в FAT. А то производитель зажал и требует лицензию от Microsoft.
  7. lpc1788 iap

    Вобшем код от Golikov A., не очень помог, все осталось также. Поробую с частотой процессора поиграть.
  8. lpc1788 iap

    Цитата(jcxz @ Jul 1 2014, 10:39) Правильная последовательность: 1. Загрузчик в начале флеш. Стартует первым. Проверяет валидность основной прошивки во флеш и наличие новой прошивки в SDRAM (инициализировав предварительно интерфейс SDRAM). 2. Если есть новая валидная прошивка в SDRAM - загрузчик шьёт её. В конце прошивки - сбрасывает флаг наличия новой прошивки. 3. Если имеется валидная прошивка во флеш (вновь прошита или имелась ранее), загрузчик передаёт управление на неё. Основная программа, по завершении приёма новой прошивки в SDRAM, ставит флаг новой прошивки и делает аппаратный сброс CPU (сторожевиком или через спец.регистр). Спасибо большое учту. Мысли примерно в этом же направлении и крутились..
  9. lpc1788 iap

    Цитата(andrewlekar @ Jul 1 2014, 10:11) Кстати, вы учли, что IAP использует немного вашей ОЗУ? Вот из даташита: Да, программа использует только первые 8кб ОЗУ
  10. lpc1788 iap

    Спасибо большое, сейчас опробую и отпишусь.
  11. lpc1788 iap

    Цитата(andrewlekar @ Jul 1 2014, 08:59) Почему не работает, не знаю, но прокомментирую саму реализацию. Размещать бутлоадер в конце вполне разумно, у меня так же сделано. Но идея вызывать загрузчик из приложения не очень хорошая. Тут многие сталкивались с проблемами при таком подходе и в итоге переходили к другой схеме: сначала всегда стартует загрузчик и проверяет, нужно ли обновлять приложение или стартовать имеющееся. Вот скорей всего так и буду делать, размешать в начале и проверять есть чего или нет. А причина почему вызываю загрузчик из приложения, что бы уменьшить код загрузчика. В основном приложении гружу прошивку в SDRAM через USB, прыгаю на загрузчик, на всё готовое, инициализированное =). И просто копирую с SDRAM в буфер в RAMe, кусочками по 256 байт и пишу во флеш. Просто обидно, хочется разобрать в причинах нестабильной работе IAP, а то он так в середине флеша напишет мне лабуду, а Я потом буду гадать, чего это основная программа падает.
  12. lpc1788 iap

    Цитата(Golikov A. @ Jun 30 2014, 19:51) 1. Лучше наоборот сделать%) Бутлоадер в начало положить, а прошивку боевую ближе к концу. Стартуете с бутлоадера, он проверяет прошивку боевую (целостность и прочее), если все ок переходит к ней,если нет ждет новую. Идея была в том, что бутлодел заливает прошивку и просто ресетит микроконтроллер и он весело стартует с новой прошивкой Цитата2. Была такая фигня (на 1768, но они близнецы братья как понимаю) , нужно запрещать прерывания, если брали стандартные примеры, то там есть запреты, но вместо них пустые заглушки, а иногда ваще нет запретов. А запреты ОЧЕНЬ строго нужны. Даже таймер может сбивать процесс. Прерывания отрубаю, таблицы векторов перемешаю. В errata вычитал что нужно в Pboost тройку вставить и в Matrix arb еденицу в бит rom lat, не помогло ! Как Я понял из errata что еще частоту можно понизить и типо все пучком будет.
  13. lpc1788 iap

    Всем привет! Нужна помошь, никак не могу разобраться. Решил Я написать свой bootloader, и разместил его в конце флеша. Основная программа вызываеть его когда хочет обновиться. Сделал, все залил. Бутлодер грузиться, находит файл прошивки и должен запихать ее с нолевого адреса флеша. Но при записи(256 512 байит или более)портиться первый две или три пачки, пишиться какаято чушь, а далее все как положено записываеться.Сектора флеша форматирую перед записью. Может кто сталкивался с проблемой???
  14. FreeRTOS + emWin

    Цитата(Rimm @ Apr 24 2013, 04:37) Доброго времени суток! Очень бы хотел посмотреть на рабочую сборку... по ссылке ничего не находит(( Если не затруднит, перезалейте проект пожалуйста! С Уважением. Да к сожалению Я удалили проект с Яндекса, сейчас скину что-нибудь более менее рабочее. Цитата(Тоша @ Apr 27 2013, 00:10) Да к сожалению Я удалили проект с Яндекса, сейчас скину что-нибудь более менее рабочее. Похожая сборка под VS2010 и IAR 6 http://yadi.sk/d/OHYud91U4NlWI Есть версия под lpc2478 c дисплеем 320*240. Пишите.
  15. FreeRTOS + UART

    RTOS удобнее использовать, потому-что ещё куча всего по мимо UART. Задачу решил так: Кодstatic uint8_t Raw[SIZE_BUFF];//Буфер для UART static volatile uint32_t RxFrameLength;//Счётчик символов //RxFrameLength  - счётчик длина принятых сообщений перед отправкой запроса в UART обнуляеться. static xSemaphoreHandle xSemaphoreRx;  //Семафор приёма данных от UART static portBASE_TYPE xHigherPriorityTaskWoken; /**/ / *   Обработчик для прерывания от UART*/ /**/ static void Comm_UART_RxHandler(uint8_t Data) //Приём данных из UART {     if (Data == 0x00) // Ждем конец посылки     {         if (RxFrameLength > 0)         {            // RxFrameReady = 1;            xSemaphoreGiveFromISR(xSemaphoreRx, &xHigherPriorityTaskWoken); //Отдаём семафор             }     }     else     {         if (RxFrameLength < SIZE_BUFF)             Raw[RxFrameLength++] = Data;         else         {             RxFrameLength = 0;         }     } } /**/ /*Задача обработчик*/ /**/ void Task(void* P) { if (xSemaphoreTake(xSemaphoreRx, Timeout) == pdTRUE) //:Ждём ответа определенное время {     //Разгребаем данные } }