Перейти к содержанию
    

c чего начать?

06.05.2021 в 22:30, do_not_know_Linux сказал:

  я хочу поработать на самом низком уровне.  есть такие микроконтроллеры, котрые бы это позволили?

Конечно есть! PIC12, PIC16, PIC18, ATmega, MCS51, MSP430 - их все можно программировать как на Си, так и на ассемблере. Они, разумеется, далеко не передовые, но их очень полезно изучать первыми именно на ассемблере.

 

07.05.2021 в 12:08, wim сказал:

Вы не на тот форум зашли.

Форум тот, отвечают не те :biggrin:

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

44 minutes ago, byRAM said:

Форум тот, отвечают не те :biggrin:

Вот же еще вчера ответили 

 

48 minutes ago, byRAM said:

так и на ассемблере

Не хочет ТС на ассемблере, хочет исключительно ноликами и единичками.

И зачем это ему нужно не говорит.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

34 минуты назад, zombi сказал:

Вот же еще вчера ответили 

 Изачем это ему нужно не говорит.

Любой - это не ответ. МК с ядрами на ассемблере тяжко запрограммировать, если вообще реально.

Ассемблер легко представить в виде ноликов и единичек.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1 minute ago, byRAM said:

МК с ядрами на ассемблере тяжко запрограммировать, если вообще реально

А что такое "МК с ядрами"?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

7 минут назад, aaarrr сказал:

А что такое "МК с ядрами"?

С MIPSами, ARMами, кортексами и т.д.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Это C6000 может быть тяжко на ассемблере. ARM/MIPS мало чем отличаются от PIC в данном плане.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Пусть мой самый простой (~200ЛЕ) 16-разрядный софт-процессор возьмет. Система команд очень простая, регистров нет вообще (аккумуляторная архитектура), можно в коде программировать, можно на Си (lcc). По быстродействию в самом дешевом Циклоне4 - как 80МГц stm32, сравнивались на задачке N-ферзей, на Си. Система команд (разряды 1..10 - адрес данных в памяти, разряд 0 - косвенная адресация):

NOP    0x0000
ST      0x1000    dst=acc    
LD      0x2000    acc=src
COM   0x3000    acc=~src
NEG    0x4000    acc=-src
ADD    0x5000    acc+=src
SUB    0x6000    acc-=src
AND    0x7000    acc&=src
OR      0x8000    acc|=src
XOR    0x9000    acc^=src
ASL     0xA000    acc<<=1
ASR    0xB000    acc>>=1
EQ      0xC000    if(src==acc) pc=imm
NE      0xC800    if(src!=acc)  pc=imm    
GT      0xD000    if(src > acc) pc=imm    
LE      0xD800    if(src<=acc) pc=imm    
GE      0xE000    if(src>=acc) pc=imm    
LT      0xE800    if(src < acc) pc=imm    
CALL  0xF000    dst=pc+2     pc=imm
RET    0xF800    pc=src
LDE    0x0800    0x2800    0x4800    0x6800    0x8800    0xA800
STE    0x1800    0x3800    0x5800    0x7800    0x9800    0xB800

 

Изменено пользователем Leka

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1 час назад, byRAM сказал:

С MIPSами, ARMами, кортексами и т.д.

В таком случае, что такое МК без ядер?)))))))

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

35 минут назад, Leka сказал:

можно на Си (lcc)

Порт lcc сами писали? 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

3 minutes ago, mantech said:

Порт lcc сами писали? 

Да, но не полноценный - внес изменения в symbolic.c (емнип), ассемблер свой. Полной поддержки Си нет, конечно, только основные конструкции, один тип данных (int), нет стандартной библиотеки. Делался ради интереса, практически проверить некоторые идеи (ну и в домашней автоматике уже много лет работает). На Марсоходе выкладывал (но там lcc надо устанавливать, без этого компилятор не запускается, емнип).  

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Так выглядит программа N-ферзей, которую запускаю при проверке новых плат с ПЛИС. "top.c" - своя небольшая библиотека на Си, для вывода и тп, тк стандартной библиотеки (printf() и тп) нет.

#include "top.c"
int queens(int N)    {
    int 
        arow[16], 
        aleft[16], 
        aright[16], 
        aposs[16],
        poss, 
        place, 
        val, 
        pos,
        cnt;
    pos=1;
    val = (1<<N)-1; 
    arow[1]=aleft[1]=aright[1]=0;
    poss=aposs[1]=val>>(N>>1);
    cnt = 0;    
    while(pos){
        if(poss){
            place = poss & -poss; 
            poss &= ~place;
            if(pos==1 && !poss && (N & 1))
                cnt<<=1;
            if(pos!=N){
                aposs[pos]=poss;
                poss=arow[pos+1]=arow[pos]|place;
                poss|=aleft[pos+1]=(aleft[pos]|place)<<1;
                poss|=aright[pos+1]=(aright[pos]|place)>>1;
                aposs[++pos]=poss=~(poss) & val;
            } else{
                ++cnt;
            }
        }else{
            poss=aposs[--pos];
        }
    }
    if(!(N&1))cnt<<=1;
    return cnt;
}
void main(){
    int i,c='?'; 
    while(1){
        writech('>'); 
        while((c=readch())==-1);
        writech(c); 
        writestr("\r\n----rxtx-----\r\n");
        for(i=0;i<=12;i++){
            writestr("Q["); bin=i; writebin(2); writestr("] = ");              
            bin=queens(i); writebin(5); writestr("\r\n");
        }    
        writestr("-------------\r\n\r\n");
    }
}

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

2 часа назад, Leka сказал:

Так выглядит программа N-ферзей

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

Насколь я понял, взаимодействие с "внешним миром" тут только через readch() и writestr()

Изменено пользователем mantech

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

LDE и STE - команды зарезервированы для обмена с внешними устройствами (порты ВВ, умножители и тд). В ПЛИС для каждого конкретного случая можно делать разную интерпретацию этих команд, соответственно и мнемоника на Си м/б разной (может понадобиться правка исходника компилятора). Например, выделенное имя "port", тогда "port=a+b" будет означать запись в порт результата операции. Посмотрел, в top.c определено:

	int port;
	int readport(){return port;}
	int readch() { … }
	

  

(Давно это делал, забыл уже подробности.)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Гость do_not_know_Linux
9 hours ago, wim said:

Вам надо к ретрокомпьютерщикам - это некроманты

где их найти?

6 hours ago, zombi said:

И зачем это ему нужно не говорит.

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Гость
Эта тема закрыта для публикации ответов.
×
×
  • Создать...