Jump to content

    

visht

Свой
  • Content Count

    309
  • Joined

  • Last visited

Community Reputation

0 Обычный

About visht

  • Rank
    Местный

Recent Profile Visitors

1391 profile views
  1. IAR 4.10.1 переменные С в ASM

    хм ... снова этот development guide В IAR Assembler User Guide и IAR C/C++ Compiler User Guide этого нет ... где то написали, а где то забыли. Теперь буду знать кому доверять :) А по ходу дела встретил вот такой веселый момент: поскольку согласно development guide я получил право не сохранять DE Scratch registers Any function is permitted to destroy the contents of a scratch register. If a function needs the register value after a call to another function, it must store it during the call, for example on the stack. The following registers are used as scratch registers: ● The registers AX , HL , CS and ES . In the V2 calling convention, the BC and DE registers are also scratch registers. я решил тут же им воспользоваться, и мой ASM код в отладчике превратился в DB8 по шагам ходит, работу выполняет, но отображается как набор констант. Когда я решил вернуть обертку push DE ... pop DE Код в отладке снова стал мнемоникой. Или это особенность работы, и тоже описано в документации ? :)
  2. IAR 4.10.1 переменные С в ASM

    понял. Спасибо. IAR C/C++ Compiler User Guide - тут ничего про банки не сказано, хотя текст практически совпадает IAR C/C++ Development Guide - а тут все то же, но с дополнениями... Регистры лишними не бывают, теперь можно смело использовать.
  3. IAR 4.10.1 переменные С в ASM

    ядро Renesas RL78, но IAR вроде универсальный ... должен быть. ошибка линкера Error[Li005]: no definition for "buff" [referenced from C:\softs\rl78\Debug\Obj\test.o] была мысль что он не видит из за того что переменная не используется, но я пробовал и с другими данными, результат тот же. И даже так не работает. массив объявлен перед main, как глобальный. __root __saddr unsigned char buff[5]; модуль Asm #include "ior5f1006c.h" NAME test PUBLIC _call EXTERN buff SECTION CODE:CODE _call: push DE mov A, #00 mov1 CY, S:(buff+1).0 mov1 A.4, CY pop DE ret END Сработало :) Причем с вызовом функции ASM из C тоже понадобилось _ .. но там в сообщении по ошибке было ясно что он ищет _call и опыт использования DLL помог, причем если читать по документации, то ни о каком _ и речи нет ... А вот с переменной не сообразил ... Спасибо. И еще вопрос ко всем, но уже конкретно к привязке к ядру RL78. Соглашение о вызовах, в документации описано что AX, HL, CS, ES регистровые пары можно портить, BC, DE перед использованием сохранять ... Но в RL78-S3 4 банка этих регистров, что с остальными то делать .. Cудя по определению регионов *.icf он про них в курсе, но вот о том как он их использует я так и не нашел. Может где то не там читал, и это описано в каком то другом документе ?
  4. переменные объявлены в С модуле, в сегменте SADDR. __saddr char var[5]; Хочу использовать их в ASM функции, чтобы не привязывать к конкретному адресу. в документации написано EXTERN var При попытке использовать эту переменную в ASM модуле получаю ошибку Undefined пробовал IMPORT результат тот же. Можно конечно не привязываться к массиву, а использовать SADDR как временный буфер, засунув нужное кол-во в стэк, Но снова возникает вопрос в передаче начального адреса SADDR ... Указывать конкретные адреса не хочется ... Подскажите как правильно это делать ?
  5. Пытаюсь работать с библиотекой Type 01 и Type 02 eel_status_t ee_state; eel_request_t ee_request; unsigned char bb [2] = {0xbe, 0xda}, aa [2] = {0x55, 0xaa}; ee_state = EEL_Init (); // return EEL_OK EEL_Open (); ee_request.identifier_u08 = 1; ee_request.command_enu = EEL_CMD_STARTUP; ee_request.address_pu08 = bb; EEL_Execute (& ee_request); do { EEL_Handler (); } while (ee_request.status_enu == EEL_BUSY); // return EEL_ERR_INITIALIZATION Настроил для R5F1006C на 4 блока. Варианты решения с из описания ошибки не подходят. EEL or FDL not initialized or not openedwrong handling on user sideinitialize and open EEL before using it тогда решил попробовать Type 01 #define FDL_SYSTEM_FREQUENCY 16000000L / * programming voltage mode * / / * #define FDL_WIDE_VOLTAGE_MODE * / / * specify the size of the pool #define FAL_POOL_SIZE 4 / * specify the pool in the pool; #define EEL_POOL_SIZE 4 ee_state = EEL_Init(); EEL_Open(); ee_request.identifier_u08 = 'a'; ee_request.command_enu = EEL_CMD_FORMAT; ee_request.address_pu08 = 0; ee_request.timeout_u08 = 0xff; EEL_Execute(&ee_request); // EEL_ERR_POOL_EXHAUSTED И снова решения проблемы не подходят. Может кто подсказать что ей надо ? Спасибо.
  6. Знать бы как это называется, то и вопросов бы не возникло. Спасибо.
  7. Возможно где то есть опция, которая включает / отключает этот режим ... Но сбросы на дефолт ничего не дали ... И перемещение компонентов при захвате их мышкой можно только в местах незанятых другими компонентами. Может кто знает как это убрать ... Спасибо.
  8. AS3933 кто пробовал ?

    Писал им, молчат...
  9. Купил на Али, для пробы. Но, несовпадения описания в даташита с реальностью наводят на мысли что это брак ... Если кто использует такую, или есть демо борд, прошу ответить. Надо попробовать несколько команд чтобы убедиться кто врет.
  10. Имею аналогичную проблему, но приведенное решение не работает. в наличии пакет lib_usb драйвер который был получен из zadig_2.1.2.exe При попытке установить через ПКМ - "Выбранный Inf-файл не поддерживает этого метода установки" при запуске DPInst64.exe пишет что установил, а по факту - Для устройства не установлены драйверы. (Код 28) притом что сама zadig_2.1.2.exe их успешно устанавливает, но нужно впихнуть их установку в инсталятор. что посоветуете для Windows начиная от XP и до 10 ?
  11. мдя, отключил и все стало вменяемо, была мысль ... но как то вроде условие, должен из очереди все команды убирать в любом случае. Спасибо.
  12. не забыл, и написал об этом... , и потом привел листинг ... Вопрос был не в том как сделать , а в том почему так, И вот на этот вопрос можно ли поподробнее, что же все таки было задумано ... ?
  13. Один и тот же код выполняется с разной скоростью на 2-х разных процессорах. И даже на одном и том же процессоре при выборе разных условий оптимизации. может есть этому научное объяснение, хотелось бы его выслушать. А пока факты: программа выполняет действия: дергает ногой делает задержку (циклом с volatile), дергает ногой выполняет функцию дергает ногой снова задержка дергает ногой выполняет функцию дергает ногой снова задержка дергает ногой измеряются промежутки времени потраченные на задержку между дерганиями для дергания ногой используется Fast метод, соотв бит установлен. вариант 1: уровень оптимизации Level 2, time optimization - off имеем задержки снятые ЛА 70us 195us 250us 96: ESYNC_X; 0x0000B0B4 E1D403B6 LDRH R0,[R4,#0x36] 0x0000B0B8 E2200001 EOR R0,R0,#0x00000001 0x0000B0BC E1C403B6 STRH R0,[R4,#0x36] 97: for (i = 0; i < 800; i++); // wait 70 µs 0x0000B0C0 E3A00000 MOV R0,#task_io(0x00000000) 0x0000B0C4 E2800001 ADD R0,R0,#0x00000001 0x0000B0C8 E3500E32 CMP R0,#0x00000320 0x0000B0CC 3AFFFFFC BCC 0x0000B0C4 98: ESYNC_X; 0x0000B0D0 E1D403B6 LDRH R0,[R4,#0x36] 0x0000B0D4 E2200001 EOR R0,R0,#0x00000001 0x0000B0D8 E1C403B6 STRH R0,[R4,#0x36] 99: write(0x6a); 0x0000B0DC E3A0006A MOV R0,#0x0000006A 0x0000B0E0 EBFFFF91 BL write(0x0000AF2C) 100: ESYNC_X; 0x0000B0E4 E1D403B6 LDRH R0,[R4,#0x36] 0x0000B0E8 E2200001 EOR R0,R0,#0x00000001 0x0000B0EC E1C403B6 STRH R0,[R4,#0x36] 101: for (i = 0; i < 1600; i++); // wait 140 µs 0x0000B0F0 E3A00000 MOV R0,#task_io(0x00000000) 0x0000B0F4 E2800001 ADD R0,R0,#0x00000001 0x0000B0F8 E3500D19 CMP R0,#0x00000640 0x0000B0FC 3AFFFFFC BCC 0x0000B0F4 102: ESYNC_X; 0x0000B100 E1D403B6 LDRH R0,[R4,#0x36] 0x0000B104 E2200001 EOR R0,R0,#0x00000001 0x0000B108 E1C403B6 STRH R0,[R4,#0x36] 103: write(0x6b); 0x0000B10C E3A0006B MOV R0,#0x0000006B 0x0000B110 EBFFFF85 BL write(0x0000AF2C) 104: ESYNC_X; 0x0000B114 E1D403B6 LDRH R0,[R4,#0x36] 0x0000B118 E2200001 EOR R0,R0,#0x00000001 0x0000B11C E1C403B6 STRH R0,[R4,#0x36] 105: for (i = 0; i < 1800; i++); // wait 250 us 0x0000B120 E59F1094 LDR R1,[PC,#0x0094] // тут 0x708, зуб на холодец 0x0000B124 E3A00000 MOV R0,#task_io(0x00000000) 0x0000B128 E2800001 ADD R0,R0,#0x00000001 0x0000B12C E1500001 CMP R0,R1 0x0000B130 3AFFFFFC BCC 0x0000B128 106: ESYNC_X; 0x0000B134 E1D403B6 LDRH R0,[R4,#0x36] 0x0000B138 E2200001 EOR R0,R0,#0x00000001 0x0000B13C E1C403B6 STRH R0,[R4,#0x36] вариант 2: уровень оптимизации Level 2, time optimization - on имеем задержки снятые ЛА 70us 250us 157us 96: ESYNC_X; 0x0000B0DC E1D403B6 LDRH R0,[R4,#0x36] 0x0000B0E0 E2200001 EOR R0,R0,#0x00000001 0x0000B0E4 E1C403B6 STRH R0,[R4,#0x36] 97: for (i = 0; i < 800; i++); // wait 70 µs 0x0000B0E8 E3A00000 MOV R0,#task_io(0x00000000) 0x0000B0EC E2800001 ADD R0,R0,#0x00000001 0x0000B0F0 E3500E32 CMP R0,#0x00000320 0x0000B0F4 3AFFFFFC BCC 0x0000B0EC 98: ESYNC_X; 0x0000B0F8 E1D403B6 LDRH R0,[R4,#0x36] 0x0000B0FC E2200001 EOR R0,R0,#0x00000001 0x0000B100 E1C403B6 STRH R0,[R4,#0x36] 99: write(0x6a); 0x0000B104 E3A0006A MOV R0,#0x0000006A 0x0000B108 EBFFFF89 BL write(0x0000AF34) 100: ESYNC_X; 0x0000B10C E1D403B6 LDRH R0,[R4,#0x36] 0x0000B110 E2200001 EOR R0,R0,#0x00000001 0x0000B114 E1C403B6 STRH R0,[R4,#0x36] 101: for (i = 0; i < 1600; i++); // wait 140 µs 0x0000B118 E3A00000 MOV R0,#task_io(0x00000000) 0x0000B11C E2800001 ADD R0,R0,#0x00000001 0x0000B120 E3500D19 CMP R0,#0x00000640 0x0000B124 3AFFFFFC BCC 0x0000B11C 102: ESYNC_X; 0x0000B128 E1D403B6 LDRH R0,[R4,#0x36] 0x0000B12C E2200001 EOR R0,R0,#0x00000001 0x0000B130 E1C403B6 STRH R0,[R4,#0x36] 103: write(0x6b); 0x0000B134 E3A0006B MOV R0,#0x0000006B 0x0000B138 EBFFFF7D BL write(0x0000AF34) 104: ESYNC_X; 0x0000B13C E1D403B6 LDRH R0,[R4,#0x36] 0x0000B140 E2200001 EOR R0,R0,#0x00000001 0x0000B144 E1C403B6 STRH R0,[R4,#0x36] 105: for (i = 0; i < 1800; i++); // wait 250 us 0x0000B148 E3A01FC2 MOV R1,#0x00000308 0x0000B14C E3A00000 MOV R0,#task_io(0x00000000) 0x0000B150 E2811B01 ADD R1,R1,#0x00000400 0x0000B154 E2800001 ADD R0,R0,#0x00000001 0x0000B158 E1500001 CMP R0,R1 0x0000B15C 3AFFFFFC BCC 0x0000B154 106: ESYNC_X; 0x0000B160 E1D403B6 LDRH R0,[R4,#0x36] 0x0000B164 E2200001 EOR R0,R0,#0x00000001 0x0000B168 E1C403B6 STRH R0,[R4,#0x36] и вот смотрю я на листинг, и он одинаковый, и команду те же, а задержка разная, причем первая одинаковая, а вторая увеличивается ... и если сосредоточить внимание только на второй то имеем 195us 0x0000B0F0 E3A00000 MOV R0,#task_io(0x00000000) 0x0000B0F4 E2800001 ADD R0,R0,#0x00000001 0x0000B0F8 E3500D19 CMP R0,#0x00000640 0x0000B0FC 3AFFFFFC BCC 0x0000B0F4 250us 0x0000B118 E3A00000 MOV R0,#task_io(0x00000000) 0x0000B11C E2800001 ADD R0,R0,#0x00000001 0x0000B120 E3500D19 CMP R0,#0x00000640 0x0000B124 3AFFFFFC BCC 0x0000B11C как так то ? чем дальше адресация флешь, тем дольще выполнение команды ? Жду ваших мнений. Спасибо.
  14. IAR HID mouse example

    Цитата(Chestor @ Feb 9 2011, 23:10) О неисправности USB сужу исходя из того, что светодиод на USB-порте не загорелся и вообще устройство компом не видится никак. не находиться вообще, или определяется как неизвестное устройство ? в первом случае проверьте правильность управления 1,5 кОм резистором. Вполне возможно что на платах это реализовано по разному. во втором проверьте на тот ли порт (у него их 2) подключен ваш разьем, правильно ли выбраны все PINSELx.
  15. suspend & resume USB LPC23xx

    Цитата(kovigor @ Feb 8 2011, 13:01) Не за что, рад был помочь. Вообще-то, гадать нет смысла. Это должно быть расписано в документации или в эррате. Если не расписано, то нужно пытать техподдержку. Если и она не знает, то варианта два - или обходить эту особенность окольными путями, как это сделали вы, или же искать другой МК, лишенный этой особенности, если это возможно ... у них там так и написано. USB_NEED_CLK is asserted if any of the bits of the USBClkSt register are asserted. а вот что имелось ввиду под словом любой, остается тайной. Техподдержка не отвечает. Запрос отправлял через офф. сайт, а там конкретных email нету, и мучать некого ... а я бы помучал Сегодня пришло письмо, с просьбой подождать еще 5 дней. Тем временем я выяснил, что USB_NEED_CLK все таки сбрасывается, но только при работе в железе. Т.е. если ходить JTAG-ом то в USBClkSt всегда установлен младший бит, и соответственно USB_NEED_CLK всегда 1. А при работе процессора в нормальном режиме, этот бит 0, и все происходит правильно. Однако это не решает проблемы, так как при установки USBWAKE бита просыпания контроллера не происходит. Может нужно самому выключить PLL так как при Power Down она не выключается, может еще что ... пока не выяснил. Но появился новый вопрос в техподдержку, буду продолжать долбить.