![]() |
|
|
|
|
#1 |
|
Administrator
Регистрация: 12.04.2010
Адрес: Москва
Сообщений: 9,618
Вес репутации: 9824 ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
Если используем тип uint16_t, то нужно делить на 2, потому как sizeof возвращает размер массива не в колличестве элементов , а в байтах. Если используем тип uint8_t, то делить не нужно
|
|
|
|
|
|
#2 |
|
Administrator
Регистрация: 12.04.2010
Адрес: Москва
Сообщений: 9,618
Вес репутации: 9824 ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
Спасибо!
Плюсанул |
|
|
|
|
|
#3 |
|
Junior Member
Регистрация: 05.11.2014
Сообщений: 1
Вес репутации: 0 ![]() |
Предлагаю выложить библиотеку на публичный хостинг типа гитхаба с целью предоставления сообществу возможности слать pull-реквесты с фиксами и предложениями.
|
|
|
|
|
|
#4 |
|
Administrator
Регистрация: 12.04.2010
Адрес: Москва
Сообщений: 9,618
Вес репутации: 9824 ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
Для меня это темный лес.
В том смысле что я никогда не пользовался и не представляю как им пользоваться |
|
|
|
|
|
#5 |
|
Member
Регистрация: 07.03.2013
Сообщений: 75
Вес репутации: 0 ![]() |
Admin,
Скоро придет экран с контроллером тача XPT2046 , в сети есть либа Utouch, она работает софтварным дерганьем ног. Есть задумка переделать либу на SPI. Но судя по даташиту(стр26), передавать команду на считывание следующей координаты(X,Y,Z) можно параллельно с приемом текущей координаты. Что позволит сократить "сеанс связи с 8+16bit=24bit до 16 бит. Если функцию viod SendSPI(uint8_t SPI_data), переделать по аналогии с Spi.transfer, т.е. добавить "return SPDR", а так же "void" заменить на "uint8_t", то все преимущество в ускорении, я так понимаю, потеряется ? |
|
|
|
|
|
#6 |
|
Member
Регистрация: 07.03.2013
Сообщений: 75
Вес репутации: 0 ![]() |
Настоятельно рекомендую включить данную конструкцию в Либу!
Данным подходом, полностью решена проблема перенастраиваемых дефайнами пинов. Т.е. данную конструкцию можно использовать аналогично с digitalRead(pin), при чем абсолютно не теряя в скорости ни одного такта. Поверял след скетчем (Софтварное считывание 32битного значения АЦП) Код:
#include "CyberLib.h"
#define _D_In(x) D##x##_In
#define D_In(x) _D_In(x)
#define _D_Out(x) D##x##_Out
#define D_Out(x) _D_Out(x)
#define _D_High(x) D##x##_High
#define D_High(x) _D_High(x)
#define _D_Low(x) D##x##_Low
#define D_Low(x) _D_Low(x)
#define _D_Inv(x) D##x##_Inv
#define D_Inv(x) _D_Inv(x)
#define _D_Read(x) D##x##_Read
#define D_Read(x) _D_Read(x)
#define ADC_CLK_Pin 13
#define ADC_DATA_Pin 6
union AdcType{
uint32_t data32;
uint8_t data8[4];
};
uint32_t startT = 0;
uint16_t dur =0;
void setup()
{
Serial.begin(9600);
D13_Out;
D6_In;
readAdcFast32bitVAR(); //REAL read uint32_t data 1207kHz = 13.25 (-0.25)= 13 cycles/bit
readAdcFast32bitFix(); //REAL read uint32_t data 1207kHz = 13.25 (-0.25)= 13 cycles/bit
}
void readAdcFast32bitFix()
{
AdcType adc;
startT = micros();
for (byte k=0;k<100;k++){
///+++++++++++++++++++++++++++++++++++++++++++++++++
for (byte j=3;j!=255;j--){
for (byte i=0;i<8;i++){
D13_High;
adc.data8[j]<<=1;
D13_Low;
if (D6_Read) {adc.data8[j]++;}
}
}
//--------------------------------------------------
}
dur = micros()-startT;
Serial.println(dur);
Serial.println(adc.data32); //чтобы не оптимизировал считывание в adc.data
}
void readAdcFast32bitVAR()
{
AdcType adc;
startT = micros();
for (byte k=0;k<100;k++){
///+++++++++++++++++++++++++++++++++++++++++++++++++
for (byte j=3;j!=255;j--){
for (byte i=0;i<8;i++){
D_High(ADC_CLK_Pin);
adc.data8[j]<<=1;
D_Low(ADC_CLK_Pin);
if (D_Read(ADC_DATA_Pin)) {adc.data8[j]++;}
}
}
//--------------------------------------------------
}
dur = micros()-startT;
Serial.println(dur);
Serial.println(adc.data32); //чтобы не оптимизировал считывание в adc.data
}
void loop(){}
Скорость считывания 1203кГц/байт на считывание 1 байта тратится 13 тактов. Последний раз редактировалось HiddenPilot; 10.12.2014 в 22:37. |
|
|
|
|
|
#8 |
|
Administrator
Регистрация: 12.04.2010
Адрес: Москва
Сообщений: 9,618
Вес репутации: 9824 ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
Вот вырезал из библиотеки фунуфию чтения и отправки данных
PHP код:
Вот этот код реально работает быстрее, но я его закоментирова, так как не все устройства успевают переходить в режим готовности PHP код:
|
|
|
|
|
|
#9 | |
|
Member
Регистрация: 07.03.2013
Сообщений: 75
Вес репутации: 0 ![]() |
Цитата:
А как на счет включения в либу выше приведенных макросов для автоподстановки номера pin'а (D##x##_) ? |
|
|
|
|
|
|
#10 | ||
|
Administrator
Регистрация: 12.04.2010
Адрес: Москва
Сообщений: 9,618
Вес репутации: 9824 ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
Цитата:
Цитата:
|
||
|
|
|
![]() |
| Здесь присутствуют: 7 (пользователей: 0 , гостей: 7) | |
| Опции темы | Поиск в этой теме |
| Опции просмотра | |
|
|