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

Zigrund

Участник
  • Постов

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

  • Посещение

Репутация

0 Обычный

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

  • Звание
    Частый гость
    Частый гость
  1. Здравствуйте. Купил плату SK-iMX53-OEM. http://starterkit.ru/html/index.php?name=s...=view&id=73 Хочу научиться писать образ Windows Embedded Compact 7. Пока не очень получается. Подскажите, пожалуйста. Может кто-нибудь этим уже занимался, можно парочку небольших примеров кода, с минимум драйверов, чтобы просто запустилась WEC7.
  2. Спасибо, теперь вопрос стал проясняться. С quart-ой уже общался, значит буду плотнее общаться. А что Вы сказали Compact 2013 не работает? Я на сайт кварты заходил, там они даже обучение предлагают уже, месяц назад начали предлагать. А что Вы думаете не осилит?
  3. Скажите, пожалуйста, кто-нибудь уже работал с Windows Embedded Compact 2013? Поделитесь опытом. Может где-нибудь можно взять отладочную плату. И ещё вопрос. Кто-нибудь делал свою устройство на базе даже Windows CE 6, меня интересует как проходит процесс лицензирования. Вот я, например, разработаю устройство, захочу продать партию, что надо делать, чтобы не было касяка с Microsoft. Подскажите, пожалуйста. Может у кого-то уже был такой опыт.
  4. Имеется в C# аналог Terminated? И как правильнее вот эту конструкцию запустить в потоке: SettingsForMaps stmap = new SettingsForMaps(); stmap.DeltaMouseX = DeltaX; stmap.DeltaMouseY = DeltaY; stmap.EnableDisable3D = ED3D; stmap.InMertrNaSm = MertrNaSm; stmap.MeinZoom = Zoom; stmap.UrovenDetail = Level; stmap.abortDrawEvent = abortDrawing; //делаю сейчас так, отсылая запрос о прерывании потока в функию, но WaitOne тормазит жутко. Это совсем мне не подходит. handlemap.SetParameters(stmap); handlemap.DrawMap(bitmapmap, 0, 0, stmap);
  5. Есть на си, работает на меге 32 на 16 мегагерцах. Проверен, отлажен. РАбочий. Могу проект в иаре кинуть вам на почту.
  6. Потоки в C#

    Подскажите пожалуйста как прервать поток. Есть функция, в которую передаются определённый класс. В этой функции есть цикл for. В чём моя проблема. Я хочу завершить поток и надо следовательно выволиться из for. В билдере я делал всё просто. Я в эиу функцию передовал указательна на терминейт потока. И проблем не было. Я здесь попробовал WaitOne, но он так сильно тормазит, а быстродействие для меня играет очень большое значение. Второй нюанс, эта функция в длл. Что подскажите???
  7. Я так и не разобрался в чём проблема. Настраивается, инициализируется, а когда дело доходит до рисунка: молчание. Она, что, как-то выборочно отгорела?
  8. СОРИ. Про модель забыл: C1098 Я тоже так думал, но на все остальные команды она корректно отечает. Ну кроме главной)))) B3825BFEd01.pdf
  9. Глупый вопрос. Не знаю, что случилось с камерой. Имеется uart камера. Всё работало. Но вдруг просто перестала выдавать рисунок. На все команды отвечает верно, размер рисунка возвращает. А вот после команды «получить рисунок» тишина. Я её убил или что? Подскажите. Команда: // SYNC byte[] buffer = new byte[6] { 0xAA, 0x0D, 0x00, 0x00, 0x00, 0x00 }; // ACK buffer = new byte[6]{ 0xAA, 0x0E, 0x00, 0x00, 0x00, 0x00}; // Initial buffer = new byte[6] { 0xAA, 0x01, 0x04, 0x07, 0x00, 0x05 }; // Set Package Size buffer = new byte[6] { 0xAA, 0x06, 0x08, 0x40, 0x00, 0x00 }; // SNAPSHOT buffer = new byte[6] { 0xAA, 0x05, 0x00, 0x00, 0x00, 0x00 }; // GET PICTURE здесь получаю размер рисунка buffer = new byte[6] { 0xAA, 0x04, 0x01, 0x00, 0x00, 0x00 }; // ACK здесь должен быть дальше рисунок, а в ответ тишина, а раньше был. buffer = new byte[6] { 0xAA, 0x0E, 0x00, 0x00, 0x00, 0x00 };
  10. Подключил камеру. Хочу вывести изображение на экран. Все стробы считываются, всё инициализируется. А данных на шине данных нет. И такое ощущение, что они просто в воздухе болтаются. Подскажите, что я забыл проинициализировать. Может у кого-нибудь опыт есть!? Не пойму, толи лыжи, толи я))) Это пдф на всякий случай. YACD511SBDBC___DataSheet__Ver_0.0_.pdf
  11. Большое спасибо за помощь. Пойду выкуривать касяки.
  12. Понятно, буду выжимать мксимум, но я ещё дождусь другой контроллер с готовым интерфейсом. Тоесть его писать самому? Его нет в библиотеках, как на билдере? Если честно, то я на армах всего 3-ю неделю пишу, но разжёвывать не надо, я его на всякий случай выложил, раз вы сказали его нет под рукой. Никогда ничего не покупал, всё сам, так что лучше вариант второй, с мозгом который))) За помощь спасибо.
  13. 4.5 это нормальный результат. В идеале надо 9. У меня память подключена по 16 бит. А правильный memcpy это какой??? Вы имеете ввиду вот эти вод регистры? PCLKSEL0 =0x55595555; PCLKSEL1 =0x55555555; Тут всё по максимому, кроме RTC. Прилогаю usermanual: user.manual.lpc24xx.pdf
  14. 6 всё равно маловато, надо 9 ) А что делать? Ведь одна строка занимает 400 байт, при этом их 150. Это самый худшиф вариант,а надо 3200 байт, на 1200 строк. Ну или ходя бы 1600 байт на 600 строк.Тоесть однозначно около 1 MB. Можно построчно запихивать, а потом капировать, но это как-то не выход. Что подскажите. может что понастраивать надо? Вот мой кусочек настройки внешней памяти: //#define USE_32_BIT_DATABUS #define SDRAM_BASE_ADDR 0xA0000000 void initEMC(void) { volatile unsigned int i, dummy = dummy; // SCS &= ~0x00000002; // SCS |= 0x00000002; EMCCONTROL = 0x00000001; PCONP |= 0x00000800; /* Turn on EMC PCLK */ FIO2DIR &= ~(1 << 12); /* make P2.12 pin as input */ FIO2MASK &= ~(1 << 12); PINSEL4 = 0x50000000; #ifdef USE_32_BIT_DATABUS PINSEL5 = 0x55010115; PINSEL7 = 0x55555555; #else // x PINSEL5 = 0x05000555; #endif PINSEL6 = 0x55555555; PINSEL8 = 0x55555555; PINSEL9 = 0x50555555; //all registers... #ifdef USE_32_BIT_DATABUS EMCDYNAMICRP = 1; EMCDYNAMICRAS = 3; EMCDYNAMICSREX = 5; EMCDYNAMICAPR = 1; EMCDYNAMICDAL = 5; EMCDYNAMICWR = 1; EMCDYNAMICRC = 5; EMCDYNAMICRFC = 5; EMCDYNAMICXSR = 5; EMCDYNAMICRRD = 1; EMCDYNAMICMRD = 1; EMCDINAMICRDCFG = 1; // EMCDYNAMICRASCAS0 = 0x00000202; // EMCDYNAMICCFG0 = 0x00005480; #else EMCDYNAMICRP = 2; EMCDYNAMICRAS = 3; EMCDYNAMICSREX = 7; EMCDYNAMICAPR = 2; EMCDYNAMICDAL = 5; EMCDYNAMICWR = 1; EMCDYNAMICRC = 5; EMCDYNAMICRFC = 5; EMCDYNAMICXSR = 7; EMCDYNAMICRRD = 1; EMCDYNAMICMRD = 2; EMCDINAMICRDCFG = 1; // EMCDYNAMICRASCAS0 = 0x00000303; // EMCDYNAMICCFG0 = 0x00000680; #endif //wait 100mS delay(100000); //Send command: NOP EMCDINAMICCTRL = 0x00000183; //wait 200mS delay(200000); //Send command: PRECHARGE-ALL, shortest possible refresh period EMCDINAMICCTRL = 0x00000103; EMCDINAMICRFR = 0x00000002; //wait 128 ABH clock cycles for(i=0; i<0x40; i++) asm ("nop"); //Set correct refresh period EMCDINAMICRFR = 28; //Send command: MODE EMCDINAMICCTRL = 0x00000083; //Set mode register in SDRAM #ifdef USE_32_BIT_DATABUS dummy = *((volatile unsigned int*)(SDRAM_BASE_ADDR | (0x22 << 11))); #else dummy = *((volatile unsigned int*)(SDRAM_BASE_ADDR | (0x33 << 12))); #endif //Send command: NORMAL EMCDINAMICCTRL = 0x00000000; //Enable buffer EMCDYNAMICCFG0 |= 0x00080000; //initial system delay delay(1000); EMCSTATICWAITWEN0 = 0x2; EMCSTATICWAITOEN0 = 0x2; EMCSTATICWAITRD0 = 0x1f; EMCSTATICWAITPG0 = 0x1f; EMCSTATICWAITWR0 = 0x1f; EMCSTATICWAITTURN0 = 0xf; EMCSTATICCNFG0 = 0x00000081; delay(2000); /* for NAND FLASH */ EMCSTATICCNFG1 = 0x00000080; EMCSTATICWAITWEN1 = 0x2; EMCSTATICWAITOEN1 = 0x2; EMCSTATICWAITRD1 = 0x1F; EMCSTATICWAITPG1 = 0x1F; EMCSTATICWAITWR1 = 0x1F; EMCSTATICWAITTURN1 = 0xF; delay(2000); }
  15. Вот результат моего творчества: __ramfunc unsigned int GetScanLine(unsigned char *dest, unsigned long volatile *port) { unsigned int v; unsigned char *d = dest; while(!((*port) & HSYNC_MASK)); while(!((*port) & PCLK_MASK)); do { v = *port; *d++ = v; if (!(v & PCLK_MASK)) { v = *port; } FIO2SET |= 1 << 10; __no_operation(); __no_operation(); FIO2CLR |= 1 << 10; __no_operation(); __no_operation(); __no_operation(); __no_operation(); __no_operation(); __no_operation(); __no_operation(); __no_operation(); __no_operation(); __no_operation(); __no_operation(); __no_operation(); __no_operation(); __no_operation(); __no_operation(); __no_operation(); __no_operation(); __no_operation(); __no_operation(); __no_operation(); __no_operation(); __no_operation(); __no_operation(); __no_operation(); __no_operation(); __no_operation(); __no_operation(); } while((v & HSYNC_MASK)); return d - dest; } 1,125 MHz Поднимает на ура и железно. Возникла другая проблема вот в этом месте: *d++ = v; Когда в функцию передаёшь указатель на внутреннею память, тоесть просто создаёшь BYTE buff[500]; Всё нормально, *d++ = v эта команда выполняется с постоянное число тактов. А когда передаёшь на внешнюю память, то вот это *d++ = v; каманда исполняется за разное число тактов. Проверил точно предложенным Вами способом. В чём проблема. Может как-то не так настроена внешняя память??? Из - за этого сбивается вся синхронизация и поэтому получается такой своего рода случайный процесс. ))) Помогите пожалуйста и как правильно объявлять массив во внешней памяти?
×
×
  • Создать...