PeterBeklemishev / mila

Arduino alternative based on MILANDR processor
6 stars 0 forks source link

Mass pin|ports write #3

Open ko10ok opened 9 years ago

ko10ok commented 9 years ago

just for history ^__^

write to port in 'write(PB,PB3,PB4,PC..,(long)0X012312341FDH)'- like format

ports = 43 bits; 4 highest should be 0x0000 .... .... .... ..... size of long = 64 bit

type(porttypesize p)
{
  //например префикс и постфикс 01 - порт, ff - пин
  if(0xFFFF & p == 0x0000)
    return чиселко
  else: if(0xF000 & p == 0x0000)
          return пин
        else
          return порт
}

вот сюда выше идея: 0xWP0p

W - whole port P - port p - pin

целые порты типа PA, PB дефайнить как 0x1000 0x2000 пин на порту типа B2 B3 дефайнить как 0x0202 0x0203 сквозная нумерация пинов делается с пустым значением WP например 0х000А 0х00В2 тогда всё это сможет кушать pinWrite.

void write(porttypesize port, ...) {
   MDR_PORT_TypeDef *port;
   porttypesize ports[100];
   index = 0;

   porttypesize *p = &first;

while (type(p) != чиселко) {
  ports[index++]=p;
  p++;
}

long value = p;
bitOffset=0;
//запись значения 
for(i=0;i<count;i++)
  if(type(ports[i])==порт):
  {
      port = port_from_pin( (ports[i] >> 2) & 0x0F);
      port->RXTX = (value << bitOffset) 0xFFFFFFFF;
      bitOffset+=_sizeofbytesinint_;

      break;
  }
  else:
  {
      //для скорости не делаем пинврайт
      if (value == 1){
        port->RXTX |= ( 1 << bit );
      }

      else if (val == 0){
        port->RXTX &= ~( 1 << bit );
      }
      bitOffset+=_sizeofbytesforbit_;

      break;
  }
}
ko10ok commented 9 years ago

nope! We will use some extramultiextendedoverpowered define! Stop making this terible code!

ko10ok commented 9 years ago

gimme =))

dubkov commented 9 years ago

В чём смысл этого issue?

ko10ok commented 9 years ago

@dubkov, в том что мне сказали что массовую запись в пины можно производить на этапе препроцессора, вместо кода. Таким образом жду пока сделают и закроют)

PS если неактуально или я не понял чего, то просто закрыть за инвалидностью)

dubkov commented 9 years ago

мне сказали что массовую запись в пины можно производить на этапе препроцессора, вместо кода. Таким образом жду пока сделают и закроют)

А, ну это я тоже жду, когда сделают. :smiley:

ReDetection commented 9 years ago

В рамках #11.

@dubkov Хочу множественную запись в пины. Что-то типа pins(0,1,2,3,4,5)=0b010101 или даже так: pins(0...5)=0b010101 Будет ли сквозная нумерация как у ардуино? Или более традиционно: 1.0, 1.1, 1.2….1.7, 2.0, 2.1... Или по названиям портов: А0, А1, А2, …. А7, В0…. порты там какие попало получаются

@ko10ok Рекомендую сквозную нумерацию определить, но так же оставить возможность работать с портами. с цифровой нумерацие полегче получается имхо https://ru.wikipedia.org/wiki/%D0%9F%D1%80%D0%B5%D0%BF%D1%80%D0%BE%D1%86%D0%B5%D1%81%D1%81%D0%BE%D1%80_%D0%A1%D0%B8 http://www.opennet.ru/docs/RUS/cpp/cpp-5.html надо потестить макросы типа

#define RANGE1(X,Y) \
        X==Y? X: X,RANGE2(X+1,Y)        
#define RANGE2(X,Y) \
        X==Y? X: X,RANGE1(X+1,Y)

вроде должен выдать весь порядок портов и если немного подшаманить, то вызвать функции записи в этот порт =/

@redetection Историческая ссылка , там может быть интересный синтаксис. Но для такого всё равно уже надо писать свой DSL и анализировать AST. Давайте это чуть позже, надо сначала базовый функционал написать. С DSL я помогу, мне это интересно Юра, вот такие макросы не сработают. Кстати, вот хороший пример, как можно поизвращаться с макросами (там вокруг немного obj-c, не обращайте на него внимания)

ReDetection commented 9 years ago

вот здесь ещё интересные развратные примеры

ReDetection commented 9 years ago

а вот здесь сказано, что всё печально :(

ReDetection commented 9 years ago

ещё полезные ссылки http://stackoverflow.com/questions/3299834/c-compile-time-constant-detection?lq=1 http://stackoverflow.com/questions/7658060/how-can-i-elide-a-call-if-an-edge-condition-is-known-at-compile-time?lq=1

ko10ok commented 9 years ago

спасибо) за кучу инфы, но это не делает массовую запись. И я ее не делаю, ибо ты знаешь как делать, вот и делай) Это кстати базовый функционал.

ReDetection commented 9 years ago

Я так и понял, что кроме меня это делаю некому, поэтому и ищу сопутствующую инфу, чтобы потом, когда я начал реализовывать, весь справочный материал был уже готов. Реализовывать один фиг нельзя, пока вы не определились с организацией пинов, потому что в любом случае макрос будет на это завязан. Я же не хочу всё переделывать. И это, кстати, не базовый функцонал. Это — приятная плюшка.