svinz Опубликовано 15 июня, 2012 Жалоба Share Опубликовано 15 июня, 2012 del Ссылка на комментарий Поделиться на другие сайты More sharing options...
svinz Опубликовано 15 июня, 2012 Автор Жалоба Share Опубликовано 15 июня, 2012 del Ссылка на комментарий Поделиться на другие сайты More sharing options...
Миша777 Опубликовано 16 июня, 2012 Жалоба Share Опубликовано 16 июня, 2012 свин о чем ты :blink: сидит походу у компа чертей отгоняет... Ссылка на комментарий Поделиться на другие сайты More sharing options...
De7c3L Опубликовано 16 июня, 2012 Жалоба Share Опубликовано 16 июня, 2012 Ну, вот. Теперь xct знает, что на форуме целых 2 программиста, bbden175 и svin* Ссылка на комментарий Поделиться на другие сайты More sharing options...
svinz Опубликовано 16 июня, 2012 Автор Жалоба Share Опубликовано 16 июня, 2012 del Ссылка на комментарий Поделиться на другие сайты More sharing options...
bbden175 Опубликовано 19 июня, 2012 Жалоба Share Опубликовано 19 июня, 2012 "#include <iostream.h>"- без использования подобных библиотек надо, так я и сам могу))))))))))))))) LPC1768- это не скромный, а CORTEX M3)))))))))))) Плюнул на все, написал вставку на асме-криво, но работает, отлажу-выложу)))))))))))))))))))))) "Ну, вот. Теперь xct знает, что на форуме целых 2 программиста, bbden175 и svin*"- да, мы такие))))))))))))))))) Пусть xct оценит следующее(да и не только он, всем будет полезно)))))))))))))))))))))) Так решал в MPLAB для ПИК18, с LPCXpresso-не работает " float arg; *(((BYTE*)&arg) + 0 ) *(((BYTE*)&arg) + 1 ) *(((BYTE*)&arg) + 2 ) *(((BYTE*)&arg) + 3 ) " в си нет типа byte, в стандарте -char (по сути-одно и тоже) svin, спасибо за реакцию))))))))))))))))) Ссылка на комментарий Поделиться на другие сайты More sharing options...
bbden175 Опубликовано 19 июня, 2012 Жалоба Share Опубликовано 19 июня, 2012 У меня ограничение исходника в 128к, а туда еще нужно засунуть много чего, вплоть до RTC, отсюда и ограничение в плане библиотек стандартных, те про include-надо забыть))))) Ссылка на комментарий Поделиться на другие сайты More sharing options...
svinz Опубликовано 19 июня, 2012 Автор Жалоба Share Опубликовано 19 июня, 2012 del Ссылка на комментарий Поделиться на другие сайты More sharing options...
bbden175 Опубликовано 19 июня, 2012 Жалоба Share Опубликовано 19 июня, 2012 Возможно, я действительно странный)))))) Но то, что работает у тебя на PC, не работает на МК, вот в чем суть))))))))))))))))) Мля, ну реально не работает.((((((((((((((((((( C я практически не знаю, об этом писал, мне асм ближе, так что чем разбираться в твоем коде, проще мне свой написать))))))))))))))))) мне float в четыре байта отдельных надо)))))))))))))))))))))))) Код я привел, но он тока в Микросях работает, у меня-почемуто нет( лыжи не едут), Дай мне пинок в нужном направлении, буду благодарен)))))) Народ объединения использует, только не могу понять как это реализовать в С. Ссылка на комментарий Поделиться на другие сайты More sharing options...
bbden175 Опубликовано 19 июня, 2012 Жалоба Share Опубликовано 19 июня, 2012 cout у меня без строки #include <stdio.h> тож не работает. Суть в том, что в режиме Semihosting C все работает, но это режим отладки, те с компом платка соединена. А мне надо автономно чтоб работала. А она виснет((((((((((((((((((((. В симуляторе пашет, в железе-нет. Пичалька(((((((((((((((((((((( Ссылка на комментарий Поделиться на другие сайты More sharing options...
svinz Опубликовано 19 июня, 2012 Автор Жалоба Share Опубликовано 19 июня, 2012 Я тя ваще не понимаю, ты мыслишь не как программист, а что-то в стиле "Я один", если ты знаешь этого человека. Я не телепат, "у меня что-то не работает", а что именно ? моя процедура void ftocp (float* f, char* c) у тебя не работает или что ? ps: есть у нас на работе один чел, тоже что-то кодит на С под микроконтроллеры. когда увидел его код - у меня щетина дыбом встала. вы, ребята, помойму кодите методом - а переберу-ка я случайные последовательности операторов - а вдруг получится программа, которая делает как раз то, что мне надо, но я сам толком не знаю, что мне надо. Ссылка на комментарий Поделиться на другие сайты More sharing options...
bbden175 Опубликовано 19 июня, 2012 Жалоба Share Опубликовано 19 июня, 2012 Да, ты чертовски прав, я не программер, а электронщик У меня ругается на строку #include <iostream.h> со всеми вытекающими...... Да, согласен, Мы кодим именно так ,как ты описал, но у Нас все работает, в отличие от Вас. Если Тебя не затруднит, прокомментируй пост № 6......... Если я не прав , укажи, плз Заранее Благодарен)))))))) CMSIS есть у нас................... И это реально радует........................ Ссылка на комментарий Поделиться на другие сайты More sharing options...
svinz Опубликовано 20 июня, 2012 Автор Жалоба Share Опубликовано 20 июня, 2012 Да, ты чертовски прав, я не программер, а электронщик У меня ругается на строку #include <iostream.h> со всеми вытекающими...... Да, согласен, Мы кодим именно так ,как ты описал, но у Нас все работает, в отличие от Вас. Если Тебя не затруднит, прокомментируй пост № 6......... Если я не прав , укажи, плз Заранее Благодарен)))))))) CMSIS есть у нас................... И это реально радует........................ Вот и прекрасно, что работает. Значит никакая помощь вам и не нужна. Знаю я этих электронщиков, они весь день сидят, матерятся, дымят своими паяльниками, припаивают и отпаивают проводки, они и схемы-то свои собирают методом случайного перебора вариантов соединения радиодеталей до тех пор, пока не заработает как надо, при том, опять же, сами точно не знают, "как надо". Нахера всё это ? А им "сам процесс нравится". Ну вас в жопу. Я так не могу, меня такой подход к работе бесит. Давай, до свиданья. Ссылка на комментарий Поделиться на другие сайты More sharing options...
ZZTOP Опубликовано 1 июля, 2012 Жалоба Share Опубликовано 1 июля, 2012 Интересная тема почему потёрли? Ссылка на комментарий Поделиться на другие сайты More sharing options...
svin Опубликовано 2 июля, 2012 Жалоба Share Опубликовано 2 июля, 2012 ладно, восстановим: typedef unsigned long int ui32; const ui32 hbit = 0x80000000 ; void ftocp (float& f, char* c) { ui32 n=*(ui32*)&f ; int z = n>>31 ; if (z) *c++='-'; else *c++='+'; int p = int( (n>>23) & 0xFF )-127 ; ui32 m = n<<9 ; ui32 cel, drob, ves; if (p==-127){ *c++='0'; *c=0; return; }; if (p>31) { *c++='i'; *c=0; return; }; if (p<-32) { *c++='s'; *c=0; return; }; if (p== 0) { cel=1; drob=m; }; if (p< 0 ) { cel=0; drob=(hbit|(m>>1)) >> (-p-1) ; }; if (p> 0) { cel= (hbit|(m>>1)) >> (31-p); drob= m<<p; }; ves= 1000000000 ; do { unsigned char k=0; while (cel>=ves) { k++; cel-=ves; }; *c++ = k+'0'; ves /= 10; } while (ves>0); *c++ ='.'; ves= 429496729 ; do { unsigned char k=0; while (drob>=ves) { k++; drob-=ves; }; *c++ = k+'0'; ves /= 10; } while (ves>0); *c= 0 ; } Пример использования: char t[22]; float z=-1.0/3.0 ; ftocp (z, t); результат в t[] : "-0000000000.333333348" Как работает: разбираем float на знак, порядок и мантиссу (z,p,m) согласно описания формата http://en.wikipedia.org/wiki/Single_precision далее сдвигом переводим в формат с фиксированной точкой, где бинарные целая и дробная части (cel,drob) имеют размер 32 бита. Отсюда точность вывода (по модулю) - минимум 2^-32, т.е. ~ 1e-9, максимум почти 2^32, т.е. ~ 4.29e9. Если число выходит за пределы, то пишем i (infinity) или s (singularity). Максимальный вывод составляет 22 байта, включая нуль-байт, заканчивающий строку. Ссылка на комментарий Поделиться на другие сайты More sharing options...
bbden175 Опубликовано 16 сентября, 2012 Жалоба Share Опубликовано 16 сентября, 2012 Фишка в том, что в компиляторе галочку в настройках(ну не разобрался) не установил, установил когда, все заработало Ссылка на комментарий Поделиться на другие сайты More sharing options...
bbden175 Опубликовано 16 сентября, 2012 Жалоба Share Опубликовано 16 сентября, 2012 Вот исходник: =============================================================================== Name : main.c Author : $(author) Version : Copyright : $(copyright) Description : main definition =============================================================================== */ #ifdef __USE_CMSIS #include "LPC17xx.h" #endif //******************************************************************************** ********************** #include <cr_section_macros.h> #include <NXP/crp.h> //******************************************************************************** ****************** // Variable to store CRP value in. Will be placed automatically // by the linker when "Enable Code Read Protect" selected. // See crp.h header for more information __CRP const unsigned int CRP_WORD = CRP_NO_CRP ; //******************************************************************************** ******************* #include "dma.h" #include "small_systick.h" #include "type.h" #include "adc.h" #include "GPIO.h" #include "timer.h" #include "dac.h" #include <stdio.h> //******************************************************************************** *********************** extern volatile uint32_t ADC0Value[ADC_NUM]; extern volatile uint32_t ADC0IntDone; //******************************************************************************** ************************ #define ADC_COUNT_MAX 4095 #define SUPPLY_VOLTAGE 3.30 #define JOYSTICK_LEFT (LPC_GPIO2->FIOPIN & (1<<13) ) #define JOYSTICK_RIGHT (LPC_GPIO0->FIOPIN & (1<<27) ) #define JOYSTICK_CENTER (LPC_GPIO0->FIOPIN & (1<<28) ) #define TONE_TO_DIVISOR(toneFreq) (10000000/(toneFreq*8*TABLE_ELEMENTS)) #define Q16_MIN (1<<14) #define Q16_MAX (1<<19) #define Q16_INIT (1<<16) #define Q16_STEP (1<<9) //******************************************************************************** **************************** volatile uint32_t msTicks; /* counts 1ms timeTicks */ /*---------------------------------------------------------------------------- SysTick_Handler *----------------------------------------------------------------------------*/ void SysTick_Handler(void) { msTicks++; /* increment counter necessary in Delay() */ } /*------------------------------------------------------------------------------ delays number of tick *------------------------------------------------------------------------------*/ __INLINE static void systick_delay (uint32_t dlyTicks) { uint32_t curTicks; curTicks = msTicks; while ((msTicks - curTicks) < dlyTicks); } //******************************************************************************** ****************************** static void initDAC(void) { LPC_PINCON->PINSEL1 = 0x2<<20; //Select AOUT function on pin LPC_SC->PCLKSEL0 |= 0x3 << 22; //DAC Clocked at CCLK/8 LPC_DAC->DACCNTVAL = TONE_TO_DIVISOR(440); //Timer rate = 100MHz/(8*444) => Timer/64samples = Waveform freq ~= 440Hz LPC_DAC->DACCTRL = 1<<2 | 1<<3; //Enable counter and DMA requests } //******************************************************************************** *********************** void InitTIM3 (void) { LPC_SC->PCONP |= (1<<23); // Timer2 power on LPC_SC->PCLKSEL1 |= (1 << 14); // Divide CCLK by 1 for Timer3 LPC_TIM3->TC = 0; // clear timer counter LPC_TIM3->PC = 0; // clear prescale counter LPC_TIM3->PR = 0; // clear prescale register LPC_TIM3->TCR |= (1 << 1); // reset timer LPC_TIM3->TCR &= ~(1 << 1); // release reset LPC_TIM3->CTCR = 0x00; // timer mode LPC_TIM3->PR = 99; // <resolution> uS accuracy @ CCLK/4 Peripheral Clock LPC_TIM3->MCR |= (1 << 1); NVIC_EnableIRQ(TIMER0_IRQn);//reset counter on match } //******************************************************************************** ************************** void DELAY_us(unsigned int us) { LPC_TIM3->MCR = 0; // disable timer LPC_TIM3->MR0 = us; // interrupt event on overrun LPC_TIM3->TC = 0; // reset counter LPC_TIM3->MCR |= (1 << 1); //reset counter on match LPC_TIM3->TCR |= (1 << 0); // start Timer2 while (LPC_TIM3->TC); return; } //******************************************************************************** **************************** void init_port (void) { // Set P2_ to 00 - GPIO 7<<20 LPC_PINCON->PINSEL4 &= (~(7<<20)|(255<<0));// // Set GPIO - P2_ - to be output LPC_GPIO2->FIODIR |= (7<<10); LPC_GPIO2->FIODIR |= (255<<0);// } //******************************************************************************** **************************** void LCD_com(unsigned char P) { LPC_GPIO2->FIOCLR = (1<<12);LPC_GPIO4->FIOCLR = (1<<11); LPC_GPIO2->FIOCLR = (1<<10); LPC_GPIO2->FIOPIN0 = P;//DELAY_us(1000); LPC_GPIO2->FIOSET=(1<<10); //EN=1 DELAY_us(100); LPC_GPIO2->FIOCLR = (1<<10); //EN=0 //DELAY_us(1000); LPC_GPIO2->FIOPIN0 = 0xFF; DELAY_us(100); } //******************************************************************************** **************************** void LCD_dat(unsigned char P) { LPC_GPIO2->FIOSET = (1<<12); LPC_GPIO2->FIOPIN0 = P; LPC_GPIO2->FIOSET = (1<<10); DELAY_us(100); LPC_GPIO2->FIOCLR = (1<<10); //EN=0 DELAY_us(100); LPC_GPIO2->FIOPIN0 = 0xFF; DELAY_us(100); } //******************************************************************************** ***************************** void LCD_init(void) {systick_delay(30); LCD_com(0x08); DELAY_us(200); LCD_com(0x38); DELAY_us(200); LCD_com(0x38); DELAY_us(200); LCD_com(0x38); DELAY_us(200); LCD_com(0x38); DELAY_us(200); LCD_com(0x01); DELAY_us(2000); LCD_com(0x06); DELAY_us(2000); LCD_com(0x0D); DELAY_us(200); } //******************************************************************************** ******************************* void LCD_string (char *s) { while (*s) {LCD_dat(*s++); } } //******************************************************************************** ******************************* //******************************************************************************** *************************** static void joystickToPhase(unsigned long int *stepDeltaQ16) { unsigned long int localDelta = *stepDeltaQ16; //Update waveforms on Joystick if ( 0 == JOYSTICK_RIGHT ) { P022_on();LCD_string("+"); localDelta += Q16_STEP; //+= Q16(1/128) } //cannot assert two positions on joystick at once else if (0 == JOYSTICK_LEFT) { P022_on();LCD_string("-"); localDelta -= Q16_STEP; //-= Q16(1/128) } else if ( 0 == JOYSTICK_CENTER) { P022_on();LCD_string("ok"); //Reset localDelta = Q16_INIT; } *stepDeltaQ16 = BOUND(Q16_MIN,localDelta,Q16_MAX); return; } //******************************************************************************** ************************** __attribute__ ((section(".ahb_ram"))) static unsigned long int dma_buff_ping[64]; //Having DMA buffers in RAM allows them to be filled with arbitrary waveforms __attribute__ ((section(".ahb_ram"))) static unsigned long int dma_buff_pong[64]; //if an application only needs fixed waveforms, simply update LLI's to point to const arrays __attribute__ ((section(".ahb_ram"))) static dmaLinkedListNode dmaList[2]; //Array of nodes, both will be set to point to each other creating a looping "list" //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +++++++++++++++++++++++++++++++ int main(void) { char s0[4]; float ADCVolts; unsigned char i; unsigned long int stepDeltaQ16 = Q16_INIT; //Initial value: 1.0 unsigned short* pSrc; dmaLinkedListNode* pNodePing = &dmaList[0]; dmaLinkedListNode* pNodePong = &dmaList[1]; //SysTick_Config(SystemCoreClock / 1000); // настройка таймера на период 1мс InitSysTick(100); initDAC(); initDMA(pNodePing); pSrc = (unsigned short*) &sine_buff[0]; for (i=0; i<TABLE_ELEMENTS; i++) { dma_buff_ping = pSrc; dma_buff_pong = pSrc; } pNodePing->sourceAddr = (unsigned long int) &dma_buff_ping[0]; pNodePing->destAddr = (unsigned long int) &LPC_DAC->DACR; pNodePing->nextNode = (unsigned long int) pNodePong; //bounce between double buffers forever //Size is 64 buffer elements, 32bits each //Transferred into DAC peripheral as 32 bits //Increment source address, but not destination pNodePing->dmaControl = TABLE_ELEMENTS | 0x2<<18 | 0x2<<21 | 1<<26; //Different sourceAddr for 2nd LLI node, but otherwise the same pNodePong->sourceAddr = (unsigned long int) &dma_buff_pong[0]; pNodePong->destAddr = (unsigned long int) &LPC_DAC->DACR; pNodePong->nextNode = (unsigned long int) pNodePing; //bounce between double buffers forever pNodePong->dmaControl = TABLE_ELEMENTS | 0x2<<18 | 0x2<<21 | 1<<26; InitSysTick(100); P022init_as_output(); P020init_as_output(); initDAC(); initDMA(pNodePing); /* Инициализация ADC */ ADCInit( ADC_CLK ); systick_delay(25); InitTIM3(); init_port(); LCD_init(); //DAC_Init(); P020_on(); P022_on(); //LCD_string(" Denis Surkov !"); //------------------------------------------------------------------------------------------------------ while(1) {initDAC(); joystickToPhase(&stepDeltaQ16); updateBuffer(pSrc,stepDeltaQ16); updateBuffer(pSrc,stepDeltaQ16); LCD_init(); P020_on(); P022_on(); {ADC0Read( 5 ); while ( !ADC0IntDone ); ADC0IntDone = 0;} ADCVolts=((ADC0Value[5]*SUPPLY_VOLTAGE))/ADC_COUNT_MAX; sprintf(s0,"%3.4f",ADCVolts); LCD_string("ADC data "); LCD_string(s0); LCD_string("V"); printf(s0); printf("\n"); P020_off(); P022_off(); } return 0 ; } Ссылка на комментарий Поделиться на другие сайты More sharing options...
bbden175 Опубликовано 16 сентября, 2012 Жалоба Share Опубликовано 16 сентября, 2012 Чушка, попробуй разобраться, этот код работает в железе уже 2 недели. Так кто из нас программер крутой?))))))))))))))))))))))))))))))))))0 Ссылка на комментарий Поделиться на другие сайты More sharing options...
svinz Опубликовано 17 сентября, 2012 Автор Жалоба Share Опубликовано 17 сентября, 2012 А этот говнокод как-то связан с преобразованием float в текст ? Ссылка на комментарий Поделиться на другие сайты More sharing options...
S10 Опубликовано 17 сентября, 2012 Жалоба Share Опубликовано 17 сентября, 2012 А этот говнокод как-то связан с преобразованием float в текст ? Ага, косвенно: sprintf(s0,"%3.4f",ADCVolts); Ссылка на комментарий Поделиться на другие сайты More sharing options...
Europe Опубликовано 17 сентября, 2012 Жалоба Share Опубликовано 17 сентября, 2012 сколько погнутых кавычек... Ссылка на комментарий Поделиться на другие сайты More sharing options...
Рекомендуемые сообщения
Заархивировано
Эта тема находится в архиве и закрыта для дальнейших ответов.