Змінюй хід війни! Допомагай ЗСУ!

printf() и два USART (AT91SAM7X256, Keil)

🟢 03:33 Відбій тривоги в м. Харків та Харківська територіальна громада.Слідкуйте за подальшими повідомленнями.#м_Харків_та_Харківська_територіальна_громада
  • 🟢 03:33 Відбій тривоги в м. Харків та Харківська територіальна громада.Слідкуйте за подальшими повідомленнями.#м_Харків_та_Харківська_територіальна_громада
  • #21
С ДМА очень даже хороший вариант, но до него я пока еще не дорос... пока только осваивается...

вот что навоял.

//================================================

#ifndef COMMUNICATION_H
#define COMMUNICATION_H

#pragma import(__use_no_semihosting_swi)

extern unsigned char Device_Num; //Íîìåð USART.

#define PRINTF0(...) {Device_Num = 0; printf(__VA_ARGS__);}
#define PRINTF1(...) {Device_Num = 1; printf(__VA_ARGS__);}
#define PRINTF2(...) {Device_Num = 2; printf(__VA_ARGS__);}

#define PUTCHAR0(c) {Device_Num = 0; putchar(c);}
#define PUTCHAR1(c) {Device_Num = 1; putchar(c);}
#define PUTCHAR2(c) {Device_Num = 2; putchar(c);}

#define SCANF0(...) {Device_Num = 0; scanf(__VA_ARGS__);}
#define SCANF1(...) {Device_Num = 1; scanf(__VA_ARGS__);}
#define SCANF2(...) {Device_Num = 2; scanf(__VA_ARGS__);}

//#define GETCHAR0()
//#define GETCHAR1(void) {Device_Num = 1; (getchar());}
//#define GETCHAR2(void) {Device_Num = 2; (getchar());}

#endif

//===================================================


#include "communication.h"
#include <usart\usart.h>
#include <dbgu\dbgu.h>
#include <stdio.h>


unsigned char Device_Num;

struct __FILE { int handle; };
FILE __stdout;
FILE __stdin;

//================proto==================
int SendChar(unsigned char c);
int GetChar(void);
//=======================================

int fputc(int ch, FILE *f)
{
return (SendChar(ch));
}

int fgetc(FILE *f)
{
return (GetChar());
}

int ferror(FILE *f)
{
return EOF;
}

void _ttywrch(int ch)
{
SendChar(ch);
}

void _sys_exit(int return_code)
{
while (1);
}


int GetChar(void)
{
switch (Device_Num)
{
case 0:
{
return USART_GetChar(AT91C_BASE_US0);
}
case 1:
{
return USART_GetChar(AT91C_BASE_US1);
}
case 2:
{
return DBGU_GetChar();
}
}
return -1;
}


int SendChar(unsigned char c)
{
switch (Device_Num)
{
case 0:
{
USART_PutChar(AT91C_BASE_US0,c);
return 0;
}
case 1:
{
USART_PutChar(AT91C_BASE_US1,c);
return 0;
}
case 2:
{
DBGU_PutChar(c);
return 0;
}
}
return -1;
}

В принципе все работает принтф, сканф и путчар... кроме гетчар...)
 
  • 🟢 03:33 Відбій тривоги в м. Харків та Харківська територіальна громада.Слідкуйте за подальшими повідомленнями.#м_Харків_та_Харківська_територіальна_громада
  • #22
DMA там проще всего... В регистры запихиваешь адрес архитектуры (собсно в какой порт пхать), адрес начала пакета и длину. Забываешь о нём до прерывания от DMA - оно вернёт значение кто закончил передачу, на сколько я помню.
 
  • 🟢 03:33 Відбій тривоги в м. Харків та Харківська територіальна громада.Слідкуйте за подальшими повідомленнями.#м_Харків_та_Харківська_територіальна_громада
  • #23
В кейле, или в чём? Я просто кейл не юзаю. я IAR пользовал.. D IAR всё нормально работает. И наглядности добавляет, и не засирает при этом память.

IAR AVR. Сейчас посмотрел в древнем 1,40 - тихий ужас с LPM.
в 3,20 уже что то вменяемое типа DEC-BREQ, так что уже не актуально.
Я чего запомнил, они еще в своей апликухе "еффициент с кодинг фор авр" в те давние времена рекомендовали SWITCH-CASE на if - else if менять.
 
  • 🟢 03:33 Відбій тривоги в м. Харків та Харківська територіальна громада.Слідкуйте за подальшими повідомленнями.#м_Харків_та_Харківська_територіальна_громада
  • #24
IAR AVR. Сейчас посмотрел в древнем 1,40 - тихий ужас с LPM.
в 3,20 уже что то вменяемое типа DEC-BREQ, так что уже не актуально.
Я чего запомнил, они еще в своей апликухе "еффициент с кодинг фор авр" в те давние времена рекомендовали SWITCH-CASE на if - else if менять.

В те времена я использовал IAR исключительно, чтоб экзампл на DS18B20 для далласовского CRC откомпилировать и передрать в асм :D И сейчас не понимаю как можно для 8bit контроллеров юзать С, тем более IAR... Я им на ARMе работал - там всё нормально пашет.
 
  • 🟢 03:33 Відбій тривоги в м. Харків та Харківська територіальна громада.Слідкуйте за подальшими повідомленнями.#м_Харків_та_Харківська_територіальна_громада
  • #25
В те времена я использовал IAR исключительно, чтоб экзампл на DS18B20 для далласовского CRC откомпилировать и передрать в асм :D И сейчас не понимаю как можно для 8bit контроллеров юзать С, тем более IAR... Я им на ARMе работал - там всё нормально пашет.

Ты знаешь, просто замечательно. Если не брать в счет проекты до 1к с ручной раскладкой переменных по регистрам то все равно лучше чем компилит тот же IAR ты не напишешь. А если учесть то что для больших проектов все равно приходиться городить свою формализацию по тем же вызовам ф-ций то овчинка выделенки не стоит вообще. А угнатся за оптимизацитей иара на больших проектах вручную это непозволительная роскошь. Ни и самое главное - время + сопровождаемость.
Единственное что у меня было на асме помоему 2313 у которого если не ошибаюсь нет то ли нормального стека то ли каких то индексных X,Y,Z для нормальной работы С.
Кстати по оптимизации иар по крайней мере для авр один из самых лучших.
 
  • 🟢 03:33 Відбій тривоги в м. Харків та Харківська територіальна громада.Слідкуйте за подальшими повідомленнями.#м_Харків_та_Харківська_територіальна_громада
  • #26
Кстати по оптимизации иар по крайней мере для авр один из самых лучших.

Ога, первый уровень не оптимизирует, остальные - не работают :D Ну в смысле компилят, но не работает код.

Я в асме под AVR быстрее пишу, чем в С.
 
  • 🟢 03:33 Відбій тривоги в м. Харків та Харківська територіальна громада.Слідкуйте за подальшими повідомленнями.#м_Харків_та_Харківська_територіальна_громада
  • #27
  • 🟢 03:33 Відбій тривоги в м. Харків та Харківська територіальна громада.Слідкуйте за подальшими повідомленнями.#м_Харків_та_Харківська_територіальна_громада
  • #28
Единственное что у меня было на асме помоему 2313 у которого если не ошибаюсь нет то ли нормального стека то ли каких то индексных X,Y,Z для нормальной работы С.

x,y,z есть. Просто стек поинтер 1 байт (SPL).
 
  • 🟢 03:33 Відбій тривоги в м. Харків та Харківська територіальна громада.Слідкуйте за подальшими повідомленнями.#м_Харків_та_Харківська_територіальна_громада
  • #29
Ога, первый уровень не оптимизирует, остальные - не работают :D Ну в смысле компилят, но не работает код.

Я в асме под AVR быстрее пишу, чем в С.

Это было давно. У меня mega162 в 10-ке проектов забита по самое нехочу на помоему предпоследнем уровне оптимизации. Все как по маслу.
для меги 128 забитой более чем на половину юзаю 3,20 либо 5,10. Причем как не странно переход 3,20-5,10 прошел практически безболезненно, только пару раз руганулось варнингом что не поймет с какой стороны сравнивать два волатайла, но даже с этим все откомпилилось и в железе заработало.
Как сопровождать и писать проекты больше нескольких кил на асме ума не приложу, я как попробовал в свое время С для 8051 понял что ковырянее в асме это напрасная трата времени, ну хотя кому как.
Интересно, а под локальные переменные в функциях ты Y юзаешь ? ;) Просто как посмотришь что компиллер вытворяет с этим Y понимаешь что человек так не может.
 
  • 🟢 03:33 Відбій тривоги в м. Харків та Харківська територіальна громада.Слідкуйте за подальшими повідомленнями.#м_Харків_та_Харківська_територіальна_громада
  • #30
Как сопровождать и писать проекты больше нескольких кил на асме ума не приложу, я как попробовал в свое время С для 8051 понял что ковырянее в асме это напрасная трата времени, ну хотя кому как.
Интересно, а под локальные переменные в функциях ты Y юзаешь ? ;) Просто как посмотришь что компиллер вытворяет с этим Y понимаешь что человек так не может.
Мега 32 забивается на асме на 76% на ура. Да, ты правильно подметил - формализация всё равно будет, но трудностей не вижу. Так туда влазит стока, шо мама нигарюй.
 
  • 🟢 03:33 Відбій тривоги в м. Харків та Харківська територіальна громада.Слідкуйте за подальшими повідомленнями.#м_Харків_та_Харківська_територіальна_громада
  • #31
x,y,z есть. Просто стек поинтер 1 байт (SPL).

Не, что то писал под 2313 на иаре, это у at1200 хардварный стек глубиной 3 и полнейшее отсутствие ОЗУ, так что там и без Cи сильно не разгонишся.

Мега 32 забивается на асме на 76% на ура. Да, ты правильно подметил - формализация всё равно будет, но трудностей не вижу. Так туда влазит стока, шо мама нигарюй.

:eyecrazy:круто. Если будет заказчик с устовием "только асм" теперь знаю куда его послать.
А если завтра на арм нужно перевести пол проекта что делаем ? :іржач:
 
  • 🟢 03:33 Відбій тривоги в м. Харків та Харківська територіальна громада.Слідкуйте за подальшими повідомленнями.#м_Харків_та_Харківська_територіальна_громада
  • #32
давайте ещё c# впихнем :D

на C универсальное сложно будет написать. регистры, периферия ведь разная будет?
можно конечно сделать функции "драйверов", будет потеря на вызовах, и по памяти.
 
  • 🟢 03:33 Відбій тривоги в м. Харків та Харківська територіальна громада.Слідкуйте за подальшими повідомленнями.#м_Харків_та_Харківська_територіальна_громада
  • #33
:eyecrazy:круто. Если будет заказчик с устовием "только асм" теперь знаю куда его послать.
Всегда гортов помочь хорошим людям за хорошие деньги ;) :D Шучу - по людям требование не обязательное, только по деньгам.

А если завтра на арм нужно перевести пол проекта что делаем ? :іржач:

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

Но это лирика.

По настоящему круто было - игры на ZX-Spectrum в 128 и более кБ, написанные в асме ;)

P/S/ На меня не смотрите - это не я их писал :D
 
  • 🟢 03:33 Відбій тривоги в м. Харків та Харківська територіальна громада.Слідкуйте за подальшими повідомленнями.#м_Харків_та_Харківська_територіальна_громада
  • #34
давайте ещё c# впихнем :D

Если впихнете - покажете. Мне так, чисто поржать (с).

на C универсальное сложно будет написать. регистры, периферия ведь разная будет?
можно конечно сделать функции "драйверов", будет потеря на вызовах, и по памяти.

Это к чему? Вы знаете какой-то язык "универсальнее" С и на котором не придется переделывать весь ввод/вывод под конкретное железо?

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

Непонятно, только, как это мешает применению С.

По настоящему круто было - игры на ZX-Spectrum в 128 и более кБ, написанные в асме ;)

Согласен. Элита, Элита 3, Дриллер и иже с ними - это просто произведения искусства. :клас:
 
  • 🟢 03:33 Відбій тривоги в м. Харків та Харківська територіальна громада.Слідкуйте за подальшими повідомленнями.#м_Харків_та_Харківська_територіальна_громада
  • #35
Это к чему? Вы знаете какой-то язык "универсальнее" С и на котором не придется переделывать весь ввод/вывод под конкретное железо?
Некоторые пишут на нативном асме,и не заморачиваются;)
 
  • 🟢 03:33 Відбій тривоги в м. Харків та Харківська територіальна громада.Слідкуйте за подальшими повідомленнями.#м_Харків_та_Харківська_територіальна_громада
  • #36
Некоторые пишут на нативном асме,и не заморачиваются;)

Идет женщина мимо поля, смотрит какой-то мужик в скафандре траву косит.
- Что ты делаешь?
- Сено кошу.
- А почему в скафандре?
- Трудности люблю.
- Да ну, брось, пошли лучше потрахаемся...
Мужик задумался.
- Хм, да можно пожалуй.... Но только стоя! И в гамаке!
 
  • 🟢 03:33 Відбій тривоги в м. Харків та Харківська територіальна громада.Слідкуйте за подальшими повідомленнями.#м_Харків_та_Харківська_територіальна_громада
  • #37
давайте ещё c# впихнем :D

c# на PC :)

на C универсальное сложно будет написать.
как раз на асме универсальное тяжело написать особенно для разных процов. Например в каком то есть индексная арифметика такая а в другом не такая а с перлам. пуговицами.

регистры, периферия ведь разная будет?

за регистры пусть у компиллера голова болит
перефирия примерно одинаковая SPI он и в африке SPI, i2s, таймера. Безусловно регистры перефири прийдется корректировать, но это всего несколько мест, например для того же вывода в терминал это
putc, getc, ну может еще getc_ready.

можно конечно сделать функции "драйверов", будет потеря на вызовах, и по памяти.

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

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

Но это лирика.
Рес, я не об это , я об том что для начала учим асм арм пока регистры и флаги ночью не сняться а вот потом... Что гораздо труднее копипастинга. Еше на асме можно такого нахакерить в общем случае....
 
Назад
Зверху Знизу