Мадиас
Вторник 5 мая 2015 г., 21:28
Хорошо, уже поздно, и я мгновенно запутался:
Как я могу настроить с библиотекой SPI второй порт SPI?
*стыд*
Как я могу настроить с библиотекой SPI второй порт SPI?
*стыд*
Мадиас
Вторник 5 мая 2015 г. 22:01
Хорошо, тем временем я не нашел свой вопрос «глупым»
Он должен быть настроен с помощью Spiclass (<порт>), но это не будет функционировать:
Попробуйте простой "Spiclass (1).начать »(= эквивалентно. к SPI.начать) разбить клен...
Он должен быть настроен с помощью Spiclass (<порт>), но это не будет функционировать:
Попробуйте простой "Spiclass (1).начать »(= эквивалентно. к SPI.начать) разбить клен...
Rogerclark
Вторник 5 мая 2015 г. 22:16
Матиас
Я посмотрел на это некоторое время назад.
Я не могу вспомнить, почему, я думаю, что это то, как Ардуино использует глобальные конструкторы в библиотеках, что затрудняет это изменить
Я уверен, что искал метод (не уверен, что я, возможно, опубликовал в старой ветке форума Arduino)
В любом случае. Я думаю, что лучшее решение - просто дублировать SPI LIB и назвать его SPI2
эн.фон.
#включать <SPI2.час>
Но вопрос в том, должна ли глобальная переменная SPI должна быть названа SPI или мы должны назвать это SPI2
Я думаю, что называть это SPI2, вероятно, будет лучше, иначе у вас не может быть 2 канала SPI одновременно одновременно
В качестве альтернативы, у нас есть версия SPI, которая не имеет глобального конструктора, и вы должны вручную построить класс
Жаль, что Ардуино решил использовать глобальный конструктор.
Ах, я частично помню сейчас.
Я пытался поместить #IFDEF в SPI, чтобы остановить называться глобального конститутора, чтобы я мог вручную построить его в коде, но я не думаю, что это возможно
Если вы поместите #define no_global_constructors в эскиз, он не поднят библиотекой,
Либера
Это должен быть вариант меню, но это плохие новости.
Я не пытался включить еще один заголовок E.глин. #include no_global_constructors.h, который будет определять, no_global_constructors
Я думаю, это стоит пойти.
Но, возможно, просто версии библиотек, которые не строится на глобальном уровне, лучше
Я посмотрел на это некоторое время назад.
Я не могу вспомнить, почему, я думаю, что это то, как Ардуино использует глобальные конструкторы в библиотеках, что затрудняет это изменить
Я уверен, что искал метод (не уверен, что я, возможно, опубликовал в старой ветке форума Arduino)
В любом случае. Я думаю, что лучшее решение - просто дублировать SPI LIB и назвать его SPI2
эн.фон.
#включать <SPI2.час>
Но вопрос в том, должна ли глобальная переменная SPI должна быть названа SPI или мы должны назвать это SPI2
Я думаю, что называть это SPI2, вероятно, будет лучше, иначе у вас не может быть 2 канала SPI одновременно одновременно
В качестве альтернативы, у нас есть версия SPI, которая не имеет глобального конструктора, и вы должны вручную построить класс
Жаль, что Ардуино решил использовать глобальный конструктор.
Ах, я частично помню сейчас.
Я пытался поместить #IFDEF в SPI, чтобы остановить называться глобального конститутора, чтобы я мог вручную построить его в коде, но я не думаю, что это возможно
Если вы поместите #define no_global_constructors в эскиз, он не поднят библиотекой,
Либера
Это должен быть вариант меню, но это плохие новости.
Я не пытался включить еще один заголовок E.глин. #include no_global_constructors.h, который будет определять, no_global_constructors
Я думаю, это стоит пойти.
Но, возможно, просто версии библиотек, которые не строится на глобальном уровне, лучше
Мадиас
Вторник 5 мая 2015 г. 22:25
Роджер, спасибо за ответ,
ха -ха -ха...И я действительно думал, я злюсь
ОК: Я не вижу проблем в дублирующей библиотеке SPI2 (и думаю далее: SPI3), чтобы вы могли включить, легко разные настройки DMA
Я тестировал только все нуклео, так что я уверен, что я первый работаю с двумя отдельными портами SPI...Но (как часто я пишу ", но"?)
НО:
Практически у меня есть один сценарий для использования 2 портов SPI:
Экран TFT
SD-карта
Возможно, SD-карта слишком медленная с высокой тактовой частотой TFT, поэтому вы можете выбрать более медленную скорость для SD-карты, не замедляя все это и/или использовать разные настройки DMA.
ха -ха -ха...И я действительно думал, я злюсь
ОК: Я не вижу проблем в дублирующей библиотеке SPI2 (и думаю далее: SPI3), чтобы вы могли включить, легко разные настройки DMA
Я тестировал только все нуклео, так что я уверен, что я первый работаю с двумя отдельными портами SPI...Но (как часто я пишу ", но"?)
НО:
Практически у меня есть один сценарий для использования 2 портов SPI:
Экран TFT
SD-карта
Возможно, SD-карта слишком медленная с высокой тактовой частотой TFT, поэтому вы можете выбрать более медленную скорость для SD-карты, не замедляя все это и/или использовать разные настройки DMA.
Rogerclark
Вторник 5 мая 2015 г. 11:35
Матиас
Нет. ты не сходишь с ума
Я помню, что кто -то еще задал мне тот же вопрос
Возможно, мы сможем получить немного отзывов сообщества
эн.глин.
Должны ли мы иметь
#включать <SPI2.час>
который имеет глобальный VAR SPI2
#включать <SPI3.час>
который имеет глобальный VAR SPI3
Звучит как лучший вариант, хотя код будет дублироваться, что означает, что любое изменение в SPI1 должно быть скопировано в SPI2 и т. Д
Нет. ты не сходишь с ума
Я помню, что кто -то еще задал мне тот же вопрос
Возможно, мы сможем получить немного отзывов сообщества
эн.глин.
Должны ли мы иметь
#включать <SPI2.час>
который имеет глобальный VAR SPI2
#включать <SPI3.час>
который имеет глобальный VAR SPI3
Звучит как лучший вариант, хотя код будет дублироваться, что означает, что любое изменение в SPI1 должно быть скопировано в SPI2 и т. Д
victor_pv
Ср. 06 мая 2015 12:09
Мадиас я подумал в том же сценарии, SPI1 для TFT и SPI2 для SDCARD.
Я спросил о SPI2, и я верю, что Роджер сказал, что его можно использовать с Hardwarespi. Я не пробовал это мысль.
Учитывая, что у Arduino нет второго порта, мы можем выбрать, какой способ назвать его. Я думаю, что было бы лучше не создавать его экземпляры, таким образом, он не потребует никакой памяти, если вы не решите использовать его в своем эскизе, и в этом случае вы его создаете.
Мы должны быть в состоянии выполнять передачу DMA точно так же, просто нужно изменить пару параметров.
Это мои 2 цента.
Я спросил о SPI2, и я верю, что Роджер сказал, что его можно использовать с Hardwarespi. Я не пробовал это мысль.
Учитывая, что у Arduino нет второго порта, мы можем выбрать, какой способ назвать его. Я думаю, что было бы лучше не создавать его экземпляры, таким образом, он не потребует никакой памяти, если вы не решите использовать его в своем эскизе, и в этом случае вы его создаете.
Мы должны быть в состоянии выполнять передачу DMA точно так же, просто нужно изменить пару параметров.
Это мои 2 цента.
Rogerclark
Ср. 6 мая 2015 г., 21:29
Я согласен, что мы могли бы сделать с библиотеками, которые не проводят глобальное экземпляр
Однако я не думаю, что есть какой -нибудь способ поместить что -то в эскиз, который будет подхвачен библиотеками, которые можно использовать для предотвращения глобального VAR.
Мы могли бы сделать это как меню, но я не думаю, что это хорошая идея, так как, когда вы открываете конкретный набросок, вам также нужно изменить настройки меню.
Возможно, это вопрос для раздела программирования на форуме Arduino, но в прошлый раз я разместил тот же вопрос, люди считали, что это не ардуино, поэтому я не получил никаких полезных ответов
Однако я не думаю, что есть какой -нибудь способ поместить что -то в эскиз, который будет подхвачен библиотеками, которые можно использовать для предотвращения глобального VAR.
Мы могли бы сделать это как меню, но я не думаю, что это хорошая идея, так как, когда вы открываете конкретный набросок, вам также нужно изменить настройки меню.
Возможно, это вопрос для раздела программирования на форуме Arduino, но в прошлый раз я разместил тот же вопрос, люди считали, что это не ардуино, поэтому я не получил никаких полезных ответов
Мадиас
Ср. 06 мая 2015 г., 21:32
Я играю вокруг, чтобы заставить порт SPI#2 работал над моим нуклео, я думаю, что я не могу возражать на возрасте, поэтому я обязательно настрою библиотеку SPI:
Правильно ли настройка SPI2 только при изменении последней строки (544 трудно найти!) в SPI.CPP от
Правильно ли настройка SPI2 только при изменении последней строки (544 трудно найти!) в SPI.CPP от
xxx@wopr:~/Arduino/hardware/Arduino_STM32/tools$ file linux/*
linux/45-maple.rules: ASCII text
linux/49-stlinkv1.rules: ASCII text
linux/49-stlinkv2-1.rules: ASCII text
linux/49-stlinkv2.rules: ASCII text
linux/dfu-util: directory
linux/install.sh: POSIX shell script, ASCII text executable
linux/jlink_upload: Bourne-Again shell script, ASCII text executable
linux/maple_upload: Bourne-Again shell script, ASCII text executable
linux/readme.txt: ASCII text, with no line terminators
linux/serial_upload: Bourne-Again shell script, ASCII text executable
linux/src: directory
linux/stlink: directory
linux/stlink_upload: Bourne-Again shell script, ASCII text executable
linux/stm32flash: directory
linux/upload-reset: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked, interpreter /lib/ld-linux.so.2, for GNU/Linux 2.6.24, BuildID[sha1]=dc8dc5ad6de94179a9d534b1a34aeb6d906640b1, not stripped
linux/upload_router: Bourne-Again shell script, ASCII text executable
xxx@wopr:~/Arduino/hardware/Arduino_STM32/tools$ file linux64/*
linux64/45-maple.rules: ASCII text
linux64/49-stlinkv1.rules: ASCII text
linux64/49-stlinkv2-1.rules: ASCII text
linux64/49-stlinkv2.rules: ASCII text
linux64/dfu-util: directory
linux64/install.sh: POSIX shell script, ASCII text executable
linux64/maple_upload: Bourne-Again shell script, ASCII text executable
linux64/readme.txt: ASCII text, with no line terminators
linux64/serial_upload: Bourne-Again shell script, ASCII text executable
linux64/src: directory
linux64/stlink: directory
linux64/stlink_upload: Bourne-Again shell script, ASCII text executable
linux64/stm32flash: directory
linux64/upload-reset: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked, interpreter /lib/ld-linux.so.2, for GNU/Linux 2.6.24, BuildID[sha1]=dc8dc5ad6de94179a9d534b1a34aeb6d906640b1, not stripped
linux64/upload_router: Bourne-Again shell script, ASCII text executable
xxx@wopr:~/Arduino/hardware/Arduino_STM32/tools$
Mrburnette
Ср. 6 мая 2015 г., 22:59
Мадиас написал:<...>
Edit2: Думание далее: ОК, равны, мы обрабатываем два (или более) порта SPI одновременно, всегда будет необходимость перенастроить используемые библиотеки, потому что все они связаны с «SPI». Так что, может быть, мы «объявляем» SPI2 как порт хранилища SPI (SD -карты, Flash Ram,....)?
Edit2: Думание далее: ОК, равны, мы обрабатываем два (или более) порта SPI одновременно, всегда будет необходимость перенастроить используемые библиотеки, потому что все они связаны с «SPI». Так что, может быть, мы «объявляем» SPI2 как порт хранилища SPI (SD -карты, Flash Ram,....)?
Мадиас
Чт, 7 мая 2015 г., 6:07
Хорошо, я думаю, могут быть некоторые возможности:
Мы должны изучить «Energia» и «Chipkit», как они обрабатывают SPI с несколькими портами.
Мы должны изучить «Energia» и «Chipkit», как они обрабатывают SPI с несколькими портами.
Rogerclark
Чт, 7 мая 2015 г., 6:57
Как они это делают ???
Мадиас
Чт, 7 мая 2015 г., 9:04
ОК, Chipkit использует отдельную библиотеку (DSPI), а Energia (на Stellaris/Tiva) использует параметр «Select Module»:
https: // github.com/energia/energia/дерево ... Спутники/SPI - Я не знаю, как/если мы получим выгоду от этого.
РЕДАКТИРОВАТЬ: Но Mabye это лучше использовать один порт SPI и использовать/реализовать транзакции:
https: // www.PJRC.com/teensy/td_libs_spi.HTML
https: // github.com/energia/energia/дерево ... Спутники/SPI - Я не знаю, как/если мы получим выгоду от этого.
РЕДАКТИРОВАТЬ: Но Mabye это лучше использовать один порт SPI и использовать/реализовать транзакции:
https: // www.PJRC.com/teensy/td_libs_spi.HTML
#define LEDPIN PC13
bool isOn = true;
// TestClass
class myClass2
{
public:
myClass2(){};
~myClass2(){};
uint8_t content = 0;
//uint16_t content = 0;
//uint32_t content = 0;
};
class myClass
{
public:
myClass(){};
~myClass(){};
//uint8_t content = 0;
//uint16_t content = 0;
//uint32_t content = 0;
myClass2 content;
};
// GetFreeRAM
#ifdef __arm__
// should use uinstd.h to define sbrk but Due causes a conflict
extern "C" char* sbrk(int incr);
#else // __ARM__
extern char *__brkval;
#endif // __arm__
int getFreeRam()
{
char top;
#ifdef __arm__
return (int)(&top - reinterpret_cast(sbrk(0)));
#elif defined(CORE_TEENSY) || (ARDUINO > 103 && ARDUINO != 151)
return &top - __brkval;
#else // __arm__
return __brkval ? &top - __brkval : &top - __malloc_heap_start;
#endif // __arm__
}
uint32_t count;
uint32_t count_max = 2000;
myClass **classArray;
void setup()
{
Serial.begin(115200);
pinMode(LEDPIN,OUTPUT);
Serial.println(F("Setup"));
count = 1;
delay(2000);
}
void loop()
{
// Check count max
if (count >= count_max)
{
count = 0;
// SoftwareReset Test
#ifdef _LIBMAPLE_NVIC_H_
nvic_sys_reset();
#endif
#ifdef __CORE_CM3_H_GENERIC
NVIC_SystemReset();
#endif
return;
}
// Report count
Serial.print("Count: ");
Serial.println(count);
// Report Basic Size
Serial.print("sizeof(myClass*): ");
Serial.println(sizeof(myClass*));
Serial.print("sizeof(myClass): ");
Serial.println(sizeof(myClass));
// Create the class array
classArray = (myClass**)malloc(count * sizeof(myClass*));
for (uint32_t i = 0; i < count; i++)
{
classArray[i] = new myClass();
}
// Report FreeRam
Serial.print("CreateFreeRam: ");
Serial.println(getFreeRam());
digitalWrite(LEDPIN, isOn);
isOn = !isOn;
// Clear the class array
for (uint32_t i = 0; i < count; i++)
{
delete(classArray[i]);
}
free(classArray);
// Report FreeRam
Serial.print("ResetFreeRam: ");
Serial.println(getFreeRam());
// Loop Delay
delay(50);
count+=10;
}