Это ошибка линкера, или pebcak?

Mailhouse
Солнце 20 ноября 2016 г. 18:10
#include "Streaming.h" uint8_t pin, port, n; void setup() { Serial.begin(115200); while (!Serial); delay(10); Serial << "Analog Pins: " << BOARD_NR_ADC_PINS << endl; for (n = 0; n < BOARD_NR_ADC_PINS ; n++) { pin = boardADCPins[n]; if (pin < 16) { Serial.print("PA"); } else if (pin >= 16 && pin < 32) { Serial.print("PB"); pin -= 16; } else if (pin >= 32 && pin < 48) { Serial.print("PC"); pin -= 32; } Serial.println(pin); } Serial.println(); Serial << "PWM Pins: " << BOARD_NR_PWM_PINS << endl; for (n = 0; n < BOARD_NR_PWM_PINS ; n++) { pin = boardPWMPins[n]; if (pin < 16) { Serial.print("PA"); } else if (pin >= 16 && pin < 32) { Serial.print("PB"); pin -= 16; } else if (pin >= 32 && pin < 48) { Serial.print("PC"); pin -= 32; } Serial.println(pin); } Serial.println(); Serial << "Board Pins: " << BOARD_NR_USED_PINS << endl; for (n = 0; n < BOARD_NR_USED_PINS ; n++) { pin = boardUsedPins[n]; if (pin < 16) { Serial.print("PA"); } else if (pin >= 16 && pin < 32) { Serial.print("PB"); pin -= 16; } else if (pin >= 32 && pin < 48) { Serial.print("PC"); pin -= 32; } Serial.println(pin); } Serial.println(); Serial << "All GPIO Pins: " << BOARD_NR_GPIO_PINS << endl; for (n = 0; n < BOARD_NR_GPIO_PINS ; n++) { pin = PIN_MAP[n].gpio_bit; //port = PIN_MAP[n].gpio_device -> regs; //conversion? //workaround port = n; if (port < 16) { Serial.print("PA"); } else if (port >= 16 && port < 32) { Serial.print("PB"); } else if (port >= 32 && port < 48) { Serial.print("PC"); } Serial.println(pin); //more info Serial << "Mode: " << PIN_MAP[n].pinMode << endl; Serial << "ADC: " << PIN_MAP[n].adc_channel << endl; Serial << "Timer: " << PIN_MAP[n].timer_channel << endl << endl; //if adc_channes is 255 (0xFF) the pin is not analog } } void loop() {}

Даниэфф
Солнце 20 ноября 2016 г., 19:36
Попробуйте перекомпилировать статическую библиотеку, запустить в систему \ libstm32l4 \ build_gcc

Mailhouse
Солнце 20 ноября 2016 г., 22:02
Даниэфф написал:Попробуйте перекомпилировать статическую библиотеку, запустить в систему \ libstm32l4 \ build_gcc

Rogerclark
Солнце 20 ноября 2016 г., 22:43
Похоже, STM выбирайте не включать множество функций в L4, включая RND

https: // github.com/stm32duino/arduino_c ... конфликт.H#183

Я не уверен в причине этого. Я не уверен, что RNG -код его самостоятельно заявляет о любых статических закусках, которые потребуют ОЗУ, или необходимы другие функции инициирования, чтобы выполнить RNG и т. Д. (Вероятно, нет)

В любом случае, в настоящее время ваш единственный вариант - изменить этот файл и восстановить статическую библиотеку после изменения этого заголовка, чтобы включить желаемые функции.

Я опубликую об этом проблему GitHub.

Mailhouse
Пн 21 ноября 2016 г., 3:14
Я очень благодарю вас за ваше терпение. Я буду вмешиваться и помогу любым способом, но я зависим от вашего руководства. У меня есть доска Nucleo F103, доска ядер L476, некоторые светодиоды [пока нет осциллографа] и большой энтузиазм.

Как съесть слона?
Один укус за раз.

Rogerclark
Пн 21 ноября 2016 г., 3:27 утра
@mailhouse

Я думаю, что вы один из первых, кто активно использует Nucleo L476, так что вы в некоторой степени на кровотечении с этим.

У меня есть Nucleo L476 (который мне прислал), и я сделал несколько быстрых тестов E.глин. Подключение SPI и I2C, и я обнаружил некоторые проблемы с тактовой частотой процессора, а также с тактовой скоростью SPI, но я не пытался использовать функции HAL.

Я не знаю, заключила ли компания, которая заключила контракт с STM на написание кода (WI6LABS), активно отслеживает проблемы в GitHub, но я уже отправил им электронное письмо сегодня, в связи с некоторым менее оптимальным кодом (тратит драгоценные оперативные памяти на F1 и делает то же самое на L4 - но на L4 не имеет большого значения, потому что у него много оперативной памяти), так что, надеюсь, Wi6labs рассмотрит все открытые проблемы в L4, и, возможно, STM вернется ко мне.

КСТАТИ. Вы установили пакет через Manager или клонирование или загрузку из GitHub ?

Mailhouse
Пн 21 ноября 2016 г., 12:05
Я скачиваю с github.

Кроме того, это удивительно, что сон на нем, иногда иногда.

Этот код генерирует действительно случайные числа. Моя проблема, как и была до сих пор, заключалась в том, что я не настраивал периферийные устройства на часы. HardwareTimer timer1(1); timer1.setPeriod(40); HardwareTimer timer4(4); timer4.setPeriod(40);

Rogerclark
Пн 21 ноября 2016 г., 19:30
@Danieleff прокомментировал в выпуске, который я опубликовал в GitHub, и похоже, что включение RNG и т. Д. Не влияет на размер эскиза, поскольку линкера не включают функции, которые вы не используете.

Хотя я не совсем уверен, следует ли нам внести абсолютно все.

Grumpyoldpizza
Вт 22 ноября 2016 г. 12:17
Mailhouse написал:Я скачиваю с github.

Кроме того, это удивительно, что сон на нем, иногда иногда.

Этот код генерирует действительно случайные числа. Моя проблема, как и была до сих пор, заключалась в том, что я не настраивал периферийные устройства на часы. void HardwareTimer::setMasterModeTrGo(uint32_t mode) { this->dev->regs.bas->CR2 &= ~TIMER_CR2_MMS; this->dev->regs.bas->CR2 |= mode; }

Grumpyoldpizza
Вт 22 ноября 2016 г. 1:00
Извините, должно было быть более точным. Это то, что должно быть в hw_config.C: //INIT const int8_t sineU[] = { 0,3,7,10,14,17,21,24,28,31,34,37,41,44,47,50,53,56,59,62,64,67,69,72,74,77,79,81,83,85, 87,88,90,91,93,94,95,96,97,98,98,99,99,99,99,99,99,99,99,99,98,98,97,96,95,94,93,91,90,88, 87,85,83,81,79,77,74,72,69,67,64,62,59,56,53,50,47,44,41,37,34,31,28,24,21,17,14,10,7,3, 0,-3,-7,-10,-14,-17,-21,-24,-28,-31,-34,-37,-41,-44,-47,-50,-53,-56,-59,-62,-64,-67,-69,-72,-74,-77,-79,-81,-83,-85, -87,-88,-90,-91,-93,-94,-95,-96,-97,-98,-98,-99,-99,-99,-99,-99,-99,-99,-99,-99,-98,-98,-97,-96,-95,-94,-93,-91,-90,-88, -87,-85,-83,-81,-79,-77,-74,-72,-69,-67,-64,-62,-59,-56,-53,-50,-47,-44,-41,-37,-34,-31,-28,-24,-21,-17,-14,-10,-7,-3}; const int8_t sineV[] = { 87,85,83,81,79,77,74,72,69,67,64,62,59,56,53,50,47,44,41,37,34,31,28,24,21,17,14,10,7,3, 0,-3,-7,-10,-14,-17,-21,-24,-28,-31,-34,-37,-41,-44,-47,-50,-53,-56,-59,-62,-64,-67,-69,-72,-74,-77,-79,-81,-83,-85, -87,-88,-90,-91,-93,-94,-95,-96,-97,-98,-98,-99,-99,-99,-99,-99,-99,-99,-99,-99,-98,-98,-97,-96,-95,-94,-93,-91,-90,-88, -87,-85,-83,-81,-79,-77,-74,-72,-69,-67,-64,-62,-59,-56,-53,-50,-47,-44,-41,-37,-34,-31,-28,-24,-21,-17,-14,-10,-7,-3, 0,3,7,10,14,17,21,24,28,31,34,37,41,44,47,50,53,56,59,62,64,67,69,72,74,77,79,81,83,85, 87,88,90,91,93,94,95,96,97,98,98,99,99,99,99,99,99,99,99,99,98,98,97,96,95,94,93,91,90,88}; const int8_t sineW[] = { -87,-88,-90,-91,-93,-94,-95,-96,-97,-98,-98,-99,-99,-99,-99,-99,-99,-99,-99,-99,-98,-98,-97,-96,-95,-94,-93,-91,-90,-88, -87,-85,-83,-81,-79,-77,-74,-72,-69,-67,-64,-62,-59,-56,-53,-50,-47,-44,-41,-37,-34,-31,-28,-24,-21,-17,-14,-10,-7,-3, 0,3,7,10,14,17,21,24,28,31,34,37,41,44,47,50,53,56,59,62,64,67,69,72,74,77,79,81,83,85, 87,88,90,91,93,94,95,96,97,98,98,99,99,99,99,99,99,99,99,99,98,98,97,96,95,94,93,91,90,88, 87,85,83,81,79,77,74,72,69,67,64,62,59,56,53,50,47,44,41,37,34,31,28,24,21,17,14,10,7,3, 0,-3,-7,-10,-14,-17,-21,-24,-28,-31,-34,-37,-41,-44,-47,-50,-53,-56,-59,-62,-64,-67,-69,-72,-74,-77,-79,-81,-83,-85}; //Motor int32_t motorStep = 0, motorPhase = 0, motorStepTimer = 0; byte NRD = 1; int throttle = 0; //Debounces uint32_t encoderDebounce = 0, gearDebounce = 0; //PIN ASSIGNMENT #define UH PB9 #define UL PB8 #define VH PB7 #define VL PB6 #define WH PA10 #define WL PA9 #define REVERSESW PB1 #define DRIVESW PB0 //int UH = PB9, UL = PB8, VH = PB7, VL = PB6, WH = PA10, WL = PA9; //int REVERSESW = PB1, DRIVESW = PB0; //FLOATS AND OTHERS int32_t kU = 0, kV = 0, kW = 0; int16_t jU = 0, jV = 0, jW = 0, currentStep = 0, oldStep = 0; //---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- void setup(){ //PINMODE afio_cfg_debug_ports(AFIO_DEBUG_SW_ONLY); adc_set_sample_rate(ADC1, ADC_SMPR_7_5); adc_set_sample_rate(ADC2, ADC_SMPR_7_5); HardwareTimer timer1(1); timer1.setPeriod(40); HardwareTimer timer4(4); timer4.setPeriod(40); //Serial3.begin(200000); pinMode(REVERSESW, INPUT_PULLUP); pinMode(DRIVESW, INPUT_PULLUP); pinMode(UL, PWM); pinMode(VL, PWM); pinMode(WL, PWM); pwmWrite(UL,0); pwmWrite(VL,0); pwmWrite(WL,0); pinMode(UH, PWM); pinMode(VH, PWM); pinMode(WH, PWM); pwmWrite(UH,0); pwmWrite(VH,0); pwmWrite(WH,0); //Charge BOOTSTRAP pwmWrite(UL,2880); pwmWrite(VL,2880); pwmWrite(WL,2880); delay(50); pwmWrite(UL,0); pwmWrite(VL,0); pwmWrite(WL,0); motorSquare(); //Throttle pinMode(PA0, INPUT_ANALOG); pinMode(PA2, INPUT_PULLUP); pinMode(PA7, INPUT_PULLUP); } //-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- void loop(){ //Throttle throttle = adc_read(ADC1, 0); //if(throttle < 409){throttle = 0;} //GEAR //if(digitalRead(REVERSESW) == digitalRead(DRIVESW)){NRD = 2;} //if(digitalRead(REVERSESW) == LOW){NRD = 1;} if(digitalRead(DRIVESW) == LOW){NRD = 3;} //if(NRD == 2){throttle = 0;} if(micros() - motorStepTimer > throttle*100){motorSine();} } // VOID LOOP END -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- void motorSine(){ kU = (sineU[motorStep]*288)/10; if(kU == 0){pwmWrite(UH,0); pwmWrite(UL,0);} if(kU > 0){pwmWrite(UH,kU); pwmWrite(UL,0);} if(kU < 0){kU = kU*-1; pwmWrite(UH,0); pwmWrite(UL,kU);} kV = (sineV[motorStep]*288)/10; if(kV == 0){pwmWrite(VH,0); pwmWrite(VL,0);} if(kV > 0){pwmWrite(VH,kV); pwmWrite(VL,0);} if(kV < 0){kV = kV*-1; pwmWrite(VH,0); pwmWrite(VL,kV);} kW = (sineW[motorStep]*288)/10; if(kW == 0){pwmWrite(WH,0); pwmWrite(WL,0);} if(kW > 0){pwmWrite(WH,kW); pwmWrite(WL,0);} if(kW < 0){kW = kW*-1; pwmWrite(WH,0); pwmWrite(WL,kW);} motorStep++; if(motorStep < 0){motorStep = 179;} if(motorStep > 179){motorStep = 0;} motorStepTimer = micros(); }

Rogerclark
Вт 22 ноября 2016 г. 7:10 утра
Grumpyoldpizza написал:Извините, должно было быть более точным. Это то, что должно быть в hw_config.C: TIMER1->regs.bas->CR1 |= 0x20;

Grumpyoldpizza
Вт 22 ноября 2016 г., 13:28
Rogerclark написал:Grumpyoldpizza написал:Извините, должно было быть более точным. Это то, что должно быть в hw_config.C: /////////////////////////////////////////////////////////////////////// // // tone(pin,frequency[,duration]) generate a tone on a given pin // // noTone(pin) switch off the tone on the pin // // setToneTimerChannel(timer,channel) force use of given timer/channel // /////////////////////////////////////////////////////////////////////// #include "Arduino.h" #include // define default timer and channel #ifndef TONE_TIMER #define TONE_TIMER 4 #endif #ifndef TONE_CHANNEL #define TONE_CHANNEL 4 #endif #define PinTimer(pin) (PIN_MAP[pin].timer_device->clk_id-RCC_TIMER1+1) #define PinChannel(pin) (PIN_MAP[pin].timer_channel) // if USE_PIN_TIMER is set, the PWM timer/channel is used for PWM pins #define USE_PIN_TIMER // if USE_BSRR is set the tone pin will be written via the fast BSRR register // instead of using the slow digitalWrite() function in the interrupt handler #define USE_BSRR // construct static timer array ( HardwareTimer TTimer1(1), TTimer2(2), TTimer3(3), TTimer4(4); #ifdef STM32_HIGH_DENSITY HardwareTimer TTimer5(5), TTimer6(6), TTimer7(7), TTimer8(8); #endif HardwareTimer *TTimer[4] { &TTimer1,&TTimer2,&TTimer3,&TTimer4 #ifdef STM32_HIGH_DENSITY ,&TTimer5,&TTimer6,&TTimer7,&TTimer8 #endif }; uint8_t tone_force_channel = 0; // forced timer channel uint8_t tone_force_ntimer = 0; // forced timer HardwareTimer *tone_timer = TTimer[TONE_TIMER]; // timer used to generate frequency uint8_t tone_channel = TONE_CHANNEL; // timer channel used to generate frequency uint8_t tone_ntimer = TONE_TIMER; // timer used to generate frequency bool tone_state = true; // last pin state for toggling short tone_pin = -1; // pin for outputting sound short tone_freq = 444; // tone frequency (0=pause) uint32_t tone_nhw = 0; // tone duration in number of half waves uint16_t tone_tcount = 0; // time between handler calls in 1/36 usec uint16_t tone_ncount = 0; // handler call between toggling uint16_t tone_n = 0; // remaining handler calls before toggling uint32_t tone_next = 0; // counter value of next interrupt #ifdef USE_BSRR volatile uint32_t *tone_bsrr; // BSRR set register (lower 16 bits) uint32_t tone_smask=0; // BSRR set bitmask uint32_t tone_rmask=0; // BSRR reset bitmask #endif //////////////////////////////////////////////////////////////////////////////// // timer hander for tone with no duration specified, // will keep going until noTone() is called void tone_handler_1(void) { tone_next += tone_tcount; // comparator value for next interrupt tone_timer->setCompare(tone_channel, tone_next); // and install it if(--tone_n == 0){ tone_state = !tone_state; // toggle tone output #ifdef USE_BSRR if(tone_state) *tone_bsrr = tone_smask; else *tone_bsrr = tone_rmask; #else digitalWrite(tone_pin,tone_state);// and output it #endif tone_n = tone_ncount; // reset interrupt counter } } //////////////////////////////////////////////////////////////////////////////// // timer hander for tone with a specified duration, // will stop automatically when duration time is up. void tone_handler_2(void) { tone_next += tone_tcount; tone_timer->setCompare(tone_channel, tone_next); if(--tone_n == 0){ if(tone_freq>0){ // toggle pin tone_state = !tone_state; #ifdef USE_BSRR if(tone_state) *tone_bsrr = tone_smask; else *tone_bsrr = tone_rmask; #else digitalWrite(tone_pin,tone_state);// and output it #endif } tone_n = tone_ncount; if(!--tone_nhw){ // check if tone duration has finished tone_timer->pause(); // disable timer pinMode(tone_pin, INPUT); // disable tone pin } } } //////////////////////////////////////////////////////////////////////////////// // play a tone on given pin with given frequency and optional duration in msec void tone(uint8_t pin, short freq, unsigned duration = 0) { tone_pin = pin; #ifdef USE_PIN_TIMER // if the pin has a PWM timer/channel, use it (unless the timer/channel are forced) if(PinChannel(tone_pin) && !tone_force_channel){ tone_channel = PinChannel(tone_pin); tone_ntimer = PinTimer(tone_pin); } else #endif { // set timer and channel to default resp values forced with setToneTimerChannel tone_ntimer = tone_force_channel?tone_force_ntimer:TONE_TIMER; tone_channel = tone_force_channel?tone_force_channel:TONE_CHANNEL; } tone_timer = TTimer[tone_ntimer-1]; tone_freq = freq; tone_nhw = 0; tone_next = 0; tone_timer->pause(); if(freq > 0 || duration >0 ){ uint32_t count = 18000000/freq; // timer counts per half wave tone_ncount = tone_n = (count>>16)+1; // number of 16-bit count chunk tone_tcount = count/tone_ncount; // size of count chunk if(duration > 0) // number of half waves to be generated tone_nhw = ((duration*(freq>0?freq:100))/1000)<<1; else // no duration specified, continuous sound until noTone() called tone_nhw = 0; pinMode(tone_pin, PWM); // configure output pin pinMode(tone_pin, OUTPUT); // configure output pin #ifdef USE_BSRR // Set up BSRR register values for fast ISR tone_bsrr = &((PIN_MAP[tone_pin].gpio_device)->regs->BSRR); tone_smask = (BIT(PIN_MAP[tone_pin].gpio_bit)); tone_rmask = tone_smask<<16; #endif // Set up an interrupt on given timer and channel tone_next = tone_tcount; // prepare channel compare register tone_timer->setMode(tone_channel,TIMER_OUTPUT_COMPARE); tone_timer->setCompare(tone_channel,tone_next); // attach corresponding handler routine tone_timer->attachInterrupt(tone_channel,tone_nhw?tone_handler_2:tone_handler_1); // Refresh the tone timer tone_timer->refresh(); // Start the timer counting tone_timer->resume(); } else { // detach handler routine tone_timer->detachInterrupt(tone_channel); // disactive pin by configuring it as input pinMode(tone_pin, INPUT); } } //////////////////////////////////////////////////////////////////////////////// // disable tone on specified pin, if any void noTone(uint8_t pin){ tone(pin,-1); // it's all handled in tone() } //////////////////////////////////////////////////////////////////////////////// // set timer and channel to some different value // must be called before calling tone() or after noTone() was called void setToneTimerChannel(uint8_t ntimer, uint8_t channel){ tone_force_ntimer = ntimer; tone_force_channel = channel; } void setup() { } void loop() { // Fur Elise.. almost... // Notes (and mistakes) unashamedly stolen from -> https://gist.github.com/spara/1832855 int our_tone_pin=PB0; // play e4 delay(600); tone(our_tone_pin, 329.63, 300); delay(350); // play d4# tone(our_tone_pin, 311.13, 300); delay(350); // play e4 tone( 10, 329.63, 300); delay(350); // play d4# tone( 10,311.13, 300); delay(350); // play e4 tone(our_tone_pin, 329.63, 300); delay(350); // play b3 tone( 10, 246.94, 300); delay(400); // play d4 tone(our_tone_pin, 293.66,300); delay(400); // play c4 tone(our_tone_pin, 261.63,300); delay(400); // play a3 tone(our_tone_pin, 220, 900); delay(1000); // play d3 tone(our_tone_pin,146.83, 300); delay(350); //play f3 tone(our_tone_pin, 174.61, 300); delay(400); //play a3 tone(our_tone_pin, 220, 300); delay(400); // play b3 tone(our_tone_pin, 246.94, 900); delay(1000); // play f3 tone(our_tone_pin, 174.61, 300); delay(400); // play a3# tone(our_tone_pin, 233.08, 300); delay(400); // play b3 tone(our_tone_pin, 246.94, 300); delay(400); // play c4 tone(our_tone_pin, 261.63, 900); delay(1000); delay(300); // play e4 tone(our_tone_pin, 329.63, 300); delay(400); // play d4# tone(our_tone_pin, 311.13, 300); delay(400); // play e4 tone(our_tone_pin, 329.63, 300); delay(400); // play d4# tone(our_tone_pin, 311.13, 300); delay(400); // play e4 tone(our_tone_pin, 329.63, 300); delay(400); // play b3 tone(our_tone_pin, 246.94, 300); delay(400); // play d4 tone(our_tone_pin, 293.66, 300); delay(400); // play c4 tone(our_tone_pin, 261.63, 300); delay(400); // play a3 tone(our_tone_pin, 220, 900); delay(1000); // play d3 tone(our_tone_pin, 146.83, 300); delay(400); // play f3 tone(our_tone_pin, 174.61, 300); delay(400); // play a3 tone(our_tone_pin, 220, 300); delay(400); // play b3 tone(our_tone_pin, 246.94, 900); delay(1000); // play f3 tone(our_tone_pin, 174.61, 300); delay(400); // play c4 tone(our_tone_pin, 261.63, 300); delay(400); // play b3 tone(our_tone_pin, 246.94, 300); delay(400); // play a3 tone(our_tone_pin, 220, 900); delay(1000); // play b3 tone(our_tone_pin,246.94, 300); delay(400); // play c4 tone(our_tone_pin, 261.63, 300); delay(400); // play d4 tone(our_tone_pin, 293.66, 300); delay(400); // play e4 tone(our_tone_pin, 329.63, 900); delay(1000); // play g3 tone(our_tone_pin, 196, 300); delay(400); // play f4 tone(our_tone_pin, 349.23, 300); delay(400); //play e4 tone(our_tone_pin, 329.23, 300); delay(400); // play d4 tone(our_tone_pin, 293.63, 900); delay(1000); // play e3 tone(our_tone_pin,164.81, 300); delay(400); // play e4 tone(our_tone_pin, 329.63, 300); delay(400); // play d4 tone(our_tone_pin, 293.63, 300); delay(400); // play c4 tone(our_tone_pin, 261.63, 900); delay(1000); // play d3 tone(our_tone_pin, 146.83, 300); delay(400); // play d4 tone(our_tone_pin, 293.63, 300); delay(400); // play c4 tone(our_tone_pin, 261.63, 300); delay(400); // play b3 tone(our_tone_pin, 246.94, 900); delay(1000); delay(400); // play e4 tone(our_tone_pin, 329.63, 300); delay(400); // play d4# tone(our_tone_pin, 311.13, 300); delay(350); // play e4 tone( 10, 329.63, 300); delay(350); // play d4# tone( 10,311.13, 300); delay(350); // play e4 tone(our_tone_pin, 329.63, 300); delay(350); // play b3 tone( 10, 246.94, 300); delay(400); // play d4 tone(our_tone_pin, 293.66,300); delay(400); // play c4 tone(our_tone_pin, 261.63,300); delay(400); // play a3 tone(our_tone_pin, 220, 900); delay(1000); // play d3 tone(our_tone_pin,146.83, 300); delay(350); //play f3 tone(our_tone_pin, 174.61, 300); delay(400); //play a3 tone(our_tone_pin, 220, 300); delay(400); // play b3 tone(our_tone_pin, 246.94, 900); delay(1000); // play f3 tone(our_tone_pin, 174.61, 300); delay(400); // play a3 tone(our_tone_pin, 233.08, 300); delay(400); // play b3 tone(our_tone_pin, 246.94, 300); delay(400); // play c4 tone(our_tone_pin, 261.63, 900); delay(1000); delay(300); // play e4 tone(our_tone_pin, 329.63, 300); delay(400); // play d4# tone(our_tone_pin, 311.13, 300); delay(400); // play e4 tone(our_tone_pin, 329.63, 300); delay(400); // play d4# tone(our_tone_pin, 311.13, 300); delay(400); // play e4 tone(our_tone_pin, 329.63, 300); delay(400); // play b3 tone(our_tone_pin, 246.94, 300); delay(400); // play d4 tone(our_tone_pin, 293.66, 300); delay(400); // play c4 tone(our_tone_pin, 261.63, 300); delay(400); // play a3 tone(our_tone_pin, 220, 900); delay(1000); // play d3 tone(our_tone_pin, 146.83, 300); delay(400); // play f3 tone(our_tone_pin, 174.61, 300); delay(400); // play a3 tone(our_tone_pin, 220, 300); delay(400); // play b3 tone(our_tone_pin, 246.94, 900); delay(1000); // play f3 tone(our_tone_pin, 174.61, 300); delay(400); // play c4 tone(our_tone_pin, 261.63, 300); delay(400); // play b3 tone(our_tone_pin, 246.94, 300); delay(400); // play a3 tone(our_tone_pin, 220, 900); delay(1000); delay(5000); }

Rogerclark
Вт 22 ноября 2016 г., 19:53
@grumpyoldpizza

Спасибо за подробное объяснение.

Поскольку нуклео постоянно питается от USB, я не думаю, что текущее потребление будет проблемой, но это было бы, если бы мы сделали общий вариант.

Возможно, путь вперед заключается в том, чтобы ОП создал библиотеку RNG и вызовет код PLL из ее функции начала.

(Я собирался сказать, что настройка RNG PLL в конструкторе, но, как мы знаем, порядок, в котором глобальные конструкторы не определены, не определяется)

Grumpyoldpizza
Вт 22 ноября 2016 г., 21:15
Rogerclark написал:@grumpyoldpizza

Спасибо за подробное объяснение.

Поскольку нуклео постоянно питается от USB, я не думаю, что текущее потребление будет проблемой, но это было бы, если бы мы сделали общий вариант.

Возможно, путь вперед заключается в том, чтобы ОП создал библиотеку RNG и вызовет код PLL из ее функции начала.

(Я собирался сказать, что настройка RNG PLL в конструкторе, но, как мы знаем, порядок, в котором глобальные конструкторы не определены, не определяется)

Rogerclark
Вт 22 ноября 2016 г., 22:19
Спасибо

Нам нужно рефакторировать код L4, как мы делали для F1, потому что в L4 Repo SystemClock_Config в настоящее время не в варианте.CPP

Grumpyoldpizza
Вт 22 ноября 2016 г., 11:08 вечера
Rogerclark написал:Спасибо

Нам нужно рефакторировать код L4, как мы делали для F1, потому что в L4 Repo SystemClock_Config в настоящее время не в варианте.CPP

Rogerclark
Вторник 22 ноября 2016 г., 11:59 вечера
Несколько вещей, вероятно, означают, что мы должны рефакторировать

1. Нам не хотим разных файловых структур в разных ядрах, так как это затрудняет поддержание. (См. @Danieleff's Posting)
2. Я знаю, по крайней мере, одного пользователя, который использует Arduino IDE для быстрого прототипирования для проекта с низкой мощностью, который, вероятно, будет использовать одну из серии L4 (и он в настоящее время использует Nucleo L476))
В конечном счете он намерен произвести коммерческий продукт, но технически нечего помешать ему использовать составленные двоичные файлы Arduino IDE в коммерческом продукте, если он хочет.

Grumpyoldpizza
Ср 23 ноября 2016 г. 12:24
Rogerclark написал:Пара вещей, вероятно, означает, что мы должны рефакторировать

1. Нам не хотим разных файловых структур в разных ядрах, так как это затрудняет поддержание. (См. @Danieleff's Posting)
2. Я знаю, по крайней мере, одного пользователя, который использует Arduino IDE для быстрого прототипирования для проекта с низкой мощностью, который, вероятно, будет использовать одну из серии L4 (и он в настоящее время использует Nucleo L476))
В конечном счете он намерен произвести коммерческий продукт, но технически нечего помешать ему использовать составленные двоичные файлы Arduino IDE в коммерческом продукте, если он хочет.

Rogerclark
Ср 23 ноября 2016 г., 12:48
Мы (я) оказался между камнем и тяжелым местом.

Люди хотят лучшей поддержки для F4 и F7, а также поддержки F0, но изменение Libmaple для работы на всех этих MCU будет большой работой, и ни у кого нет времени или энергии, чтобы сделать это.

Я надеялся, что официальное ядро ​​STM рассмотрит это, но я бы предпочел не вкладывать в Wi6labs Offside на данный момент, поскольку Afik они должны исправить ошибки в своем коде (хотя я не знаю, закончился ли их контракт с Dev с STM или нет, и будь ли это все еще применимо)

Я знаю, что есть разговоры о создании ядра, основанного на LiboPencm3 или какой -то новой вариации этого, но я не вижу, чтобы это произошло в ближайшем будущем.

В то же время Авик де, все еще продолжает свою старую стандартную периферийную библиотеку, но в своих досках, но в своих досках.Файл TXT он, кажется, поддерживает только два разных варианта F3 и один F4 - (даже если, по -видимому, есть варианты папки для более широкого разнообразия версий MCU)


Поэтому до тех пор, пока люди заинтересованы в развитии и улучшении ядра HAL, я рад им управлять, и это может в конечном итоге стать пригодным для использования ;-)

Grumpyoldpizza
Ср 23 ноября 2016 г. 1:03
Rogerclark написал:Мы (я) оказался между камнем и тяжелым местом.

Люди хотят лучшей поддержки для F4 и F7, а также поддержки F0, но изменение Libmaple для работы на всех этих MCU будет большой работой, и ни у кого нет времени или энергии, чтобы сделать это.

Я надеялся, что официальное ядро ​​STM рассмотрит это, но я бы предпочел не вкладывать в Wi6labs Offside на данный момент, поскольку Afik они должны исправить ошибки в своем коде (хотя я не знаю, закончился ли их контракт с Dev с STM или нет, и будь ли это все еще применимо)

Я знаю, что есть разговоры о создании ядра, основанного на LiboPencm3 или какой -то новой вариации этого, но я не вижу, чтобы это произошло в ближайшем будущем.

В то же время Авик де, все еще продолжает свою старую стандартную периферийную библиотеку, но в своих досках, но в своих досках.Файл TXT он, кажется, поддерживает только два разных варианта F3 и один F4 - (даже если, по -видимому, есть варианты папки для более широкого разнообразия версий MCU)


Поэтому до тех пор, пока люди заинтересованы в развитии и улучшении ядра HAL, я рад им управлять, и это может в конечном итоге стать пригодным для использования ;-)

Rogerclark
Ср 23 ноября 2016 г. 1:14
С F4 я думаю, что его доступность, так как китайцы делают несколько досок F4 (и много досок F1), но, похоже, не делают много других

Mailhouse
Ср 23 ноября 2016 г., 4:34
Каковы последствия для настройки часов таким образом?

Такие библиотеки, как Tone и Servo, правильно?

Rogerclark
Ср 23 ноября 2016 г., 4:58
Я думаю, что @grumpyoldpizza сказал, что единственным побочным эффектом было увеличение текущего потребления

USB -хост CORT STM32