Помогите пожалуйста с кодом С#

Обсуждаем контроллеры компании Atmel.
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18561
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Re: Помогите пожалуйста с кодом С#

Сообщение ARV »

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

Мой уютный бложик... заходите!
Реклама
Dimon456
Мудрый кот
Сообщения: 1849
Зарегистрирован: Вс дек 25, 2016 08:34:54

Re: Помогите пожалуйста с кодом С#

Сообщение Dimon456 »

ARV, "это" заработало
Файл func.h состоит из
Спойлер

Код: Выделить всё

//#ifndef FUNC_H
//#define FUNC_H

//==================
STATE (PROC_DEVICE_INIT,             proc_device_init),
STATE (PROC_DEVICE_WAIT_SWITCH_MODE, proc_device_wait_switch_mode),
STATE (PROC_DEVICE_MANUAL,           proc_device_manual_mode),
STATE (PROC_DEVICE_AUTOMAT,          proc_device_automat_mode),
STATE (PROC_DEVICE_EMERG_MODE,       proc_device_emerg_mode),
//==================


//#endif
ни должно быть ни чего лишнего в нем
файл _proc_device.h состоит
Спойлер

Код: Выделить всё

#ifndef PROC_DEVICE_H
#define PROC_DEVICE_H

#define __flash const

//==================
typedef void (*FUNC)(void);
//==================

typedef enum _proc_device
{
#define STATE(name, func) name
#include "func.h"
#undef STATE
  PROC_DEVICE_STATES,
}proc_device_t;


void proc_device (void);
void proc_device_init (void);
void proc_device_wait_switch_mode (void);
void proc_device_manual_mode (void);
void proc_device_automat_mode (void);
void proc_device_emerg_mode (void);


void proc_fsm_func (FUNC __flash *ptr_func, unsigned char s);
__flash FUNC proc_device_func [PROC_DEVICE_STATES] ;


#endif
и файл _proc_device.c
Спойлер

Код: Выделить всё

#include "_proc_device.h"

static   proc_device_t _proc_device;

void proc_device (void)
{
 _proc_device = PROC_DEVICE_INIT;

proc_fsm_func (proc_device_func, _proc_device);

 _proc_device = PROC_DEVICE_MANUAL;

proc_fsm_func (proc_device_func, _proc_device);

_proc_device = PROC_DEVICE_AUTOMAT;

proc_fsm_func (proc_device_func, _proc_device);

_proc_device = PROC_DEVICE_WAIT_SWITCH_MODE;

proc_fsm_func (proc_device_func, _proc_device);

_proc_device = PROC_DEVICE_EMERG_MODE;

proc_fsm_func (proc_device_func, _proc_device);
}

void proc_device_init (void) {
 PORTC = (1 << 0);
}

void proc_device_wait_switch_mode (void) {
 PORTC = (1 << 1);
}

void proc_device_manual_mode (void) {
 PORTC = (1 << 2);
}

void proc_device_automat_mode (void) {
 PORTC = (1 << 3);
}

void proc_device_emerg_mode (void) {
 PORTC = (1 << 4);
}

void proc_fsm_func (FUNC __flash *ptr_func, unsigned char s)
{
  ptr_func [s] ();
}

__flash FUNC proc_device_func [PROC_DEVICE_STATES] =
{
#define STATE(name, func) func
#include "func.h"
#undef STATE
};
Реклама
Аватара пользователя
Мурик
Друг Кота
Сообщения: 3383
Зарегистрирован: Пн окт 11, 2010 19:00:08

Re: Помогите пожалуйста с кодом С#

Сообщение Мурик »

Dimon456 писал(а):gcc_arm не проглотил
В ARM нет необходимости в __flash потому что флеш, озу, регистры и др. в едином адресном пространстве равном 4 ГБ.
Явно указывать что данные во флеше нет необходимости.
Dimon456
Мудрый кот
Сообщения: 1849
Зарегистрирован: Вс дек 25, 2016 08:34:54

Re: Помогите пожалуйста с кодом С#

Сообщение Dimon456 »

Мурик, это откуда такое убеждение?
Для информации arm
Спойлер

Код: Выделить всё

#define __flash const
Program Size:
      text	   data	    bss	    dec	    hex	filename
       888	      0	   1032	   1920	    780	TEMPLATE_FSM_ARM.elf
proc_device_func	0x08000364	
	proc_device_func[0]	0x080002c5	
	proc_device_func[1]	0x080002d5	
	proc_device_func[2]	0x080002e5	
	proc_device_func[3]	0x080002f5	
	proc_device_func[4]	0x08000305

Код: Выделить всё

#define __flash //const
Program Size:
      text	   data	    bss	    dec	    hex	filename
       868	     20	   1028	   1916	    77c	TEMPLATE_FSM_ARM.elf
proc_device_func	0x20000000	
	proc_device_func[0]	0x080003ed	
	proc_device_func[1]	0x08000409	
	proc_device_func[2]	0x08000425	
	proc_device_func[3]	0x08000441	
	proc_device_func[4]	0x0800045d
Реклама
Эиком - электронные компоненты и радиодетали
Demiurg
Это не хвост, это антенна
Сообщения: 1480
Зарегистрирован: Ср июн 25, 2008 15:19:44
Контактная информация:

Re: Помогите пожалуйста с кодом С#

Сообщение Demiurg »

[uquote="Dimon456",url="/forum/viewtopic.php?p=3876863#p3876863"]...[/uquote]
Разобрался, гуд. В силу кое-каких обстоятельств не мог ответить раньше. Эти макросы называются X-Macro. Мне этот подход показал один специалист, профессионал. Много чего можно сделать с помощью таких макросов. Лично я сделал простую конструкцию. Название состояния и соответствующую ему функцию. Файл _proc_device.h или func.h создается для каждого автомата, либо программного модуля, в моем случае под программным модулем понимается proc_device.
При таком подходе можно делать очень гибкие вещи. Сделать один файл, в нем прописать нужные тебе вещи. А потом в нужных местах собирать так как тебе нужно. К примеру, local, язык интерфейса.
Примеры из проекта того товарища.
Спойлер

Код: Выделить всё

MLMESSAGE(	Enter			,	"Button   >Enter<"	,	"Taste    >Enter<"		,	"Tecla    >Enter<"	,	"Touche   >Enter<"	,	"Нажми   > Ввод <"	)	//14
MLMESSAGE(	Grade			,	"Grade"				,	"Sorte"			 		,	"Grado"				,	"Produit"			,	"Продукт"			)	//15
MLMESSAGE(	Price			,	"Price"				,	"Preis"					,	"Precio"			,	"Prix"				,	"Цена"				)	//16
MLMESSAGE(	Sign			,	"Sign"				,	"Anzeige"				,	"Se al"				,	"Afficheur"			,	"Табло"				)	//17
MLMESSAGE(	LineGrade		,	"Line    Grade   "	,	"Zeile   Sorte   "		,	"L nea   Grado   "	,	"Ligne   Prod.   "	,	"Строка Прод"		)	//18
MLMESSAGE(	Lines			,	"Lines           "	,	"Zeilen          "		,	"L neas          "	,	"Lignes          "	,	"Строки"			)	//19
MLMESSAGE(	DigitsLine		,	"Digits/line     "	,	"Ziffer/Zeile    "		,	"D gitos/l nea   "	,	"Chiffres/ligne  "	,	"Цифры"					)	//20
Спойлер

Код: Выделить всё

//PRODUCT(	Name		,	En			,	Ru
PRODUCT(	Empty		,	"--------- "	,	"----------"	)
PRODUCT(	Normal80	,	"Normal 80 "	,	"Нормаль 80"	)
PRODUCT(	Ai92		,	"AI 92     "	,	"АИ 92     "	)
PRODUCT(	Ai95		,	"AI 95     "	,	"АИ 95     "	)
Спойлер

Код: Выделить всё

SETUP(	Light				,	"Яркость/bright" ,	10		,	100	,	0	)
SETUP(	Lang				,	"Language"		,	RUS		,	LANG_QTY-1	,	0	)
Спойлер

Код: Выделить всё

STATE ( EnterGrade				, "Prices"					, "УСТАНОВКА ЦЕН"			, null_menu			)
STATE ( EnterEffect				, "Effect"					, "ЭФФЕКТ"					, null_menu			)
STATE ( EnterBrightness			, "Brightness"				, "ЯРКОСТЬ"					, null_menu			)
STATE ( ConfigurationPin		, "Configuration"			, "КОНФИГУРАЦИЯ"			, null_menu			)
STATE ( ZeroesSpaces			, "Zeros and spaces"		, "НУЛИ И ПРОБЕЛЫ"			, null_menu			)
STATE ( ServiceMenu				, "Service menu"			, "СЕРВИС"					, null_menu			)
Реклама
Dimon456
Мудрый кот
Сообщения: 1849
Зарегистрирован: Вс дек 25, 2016 08:34:54

Re: Помогите пожалуйста с кодом С#

Сообщение Dimon456 »

Demiurg, а я то все думал, ну как вытянуть название, а оно вон как делается
Спойлер

Код: Выделить всё

STATE (PROC_DEVICE_INIT,             proc_device_init, 				"PROC_DEVICE_INIT"),
STATE (PROC_DEVICE_WAIT_SWITCH_MODE, proc_device_wait_switch_mode, 	"PROC_DEVICE_WAIT_SWITCH_MODE"),
STATE (PROC_DEVICE_MANUAL,           proc_device_manual_mode, 		"PROC_DEVICE_MANUAL"),
STATE (PROC_DEVICE_AUTOMAT,          proc_device_automat_mode, 		"PROC_DEVICE_AUTOMAT"),
STATE (PROC_DEVICE_EMERG_MODE,       proc_device_emerg_mode,		"PROC_DEVICE_EMERG_MODE"),

Код: Выделить всё

 char *Array [] = {
#define STATE(name, func, ima) ima
#include "func.h"
#undef STATE
};
Реклама
Demiurg
Это не хвост, это антенна
Сообщения: 1480
Зарегистрирован: Ср июн 25, 2008 15:19:44
Контактная информация:

Re: Помогите пожалуйста с кодом С#

Сообщение Demiurg »

Лучше как в MicroMenu ввести поле text. 1 вариант вытащить текст по индексу. 2 вариант, ввести поле. Что выгодней, смотрите сами.
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18561
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Re: Помогите пожалуйста с кодом С#

Сообщение ARV »

Dimon456, если речь идет о вытаскивании наименования пункта меню для его отображения на дисплее в случае "многоязычного" меню, то, имхо, опять-таки, не стоит изобретать велосипед, а действовать по аналогии с i18n: по Id меню в таблице строк находить нужный текст, определяя таблицу по номеру текущей "локали".

хотя, если честно, эта возня не стоит свеч: я не могу придумать варианта, когда переключение языка интерфейса во встраиваемом устройстве НЕОБХОДИМО, если это самое устройство не выходит на международный рынок в качестве серийно продаваемой продукции. что-то мне подсказывает, что здесь о таких устройствах никто не говорит.

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

Мой уютный бложик... заходите!
BlackKilkennyCat
Собутыльник Кота
Сообщения: 2905
Зарегистрирован: Ср ноя 29, 2017 06:58:50

Re: Помогите пожалуйста с кодом С#

Сообщение BlackKilkennyCat »

C# для ПК
не только. Причём, изначально не только.
NStorm
Поставщик валерьянки для Кота
Сообщения: 1978
Зарегистрирован: Ср июл 17, 2013 13:55:57

Re: Помогите пожалуйста с кодом С#

Сообщение NStorm »

[uquote="BlackKilkennyCat",url="/forum/viewtopic.php?p=3881526#p3881526"]не только. Причём, изначально не только.[/uquote]
Из википедии цитаты:
C# (произносится си шарп) — объектно-ориентированный язык программирования. Разработан в 1998—2001 годах группой инженеров компании Microsoft под руководством Андерса Хейлсберга и Скотта Вильтаумота[7] как язык разработки приложений для платформы Microsoft .NET Framework.
На тот момент изначально .NET - чисто винда. Дальше:
C# разрабатывался как язык программирования прикладного уровня для CLR
CLR - реализация виртуальной машины. Опять же для винды.
Да, за счет байт-кода он гибкий, потом появился Mono. Но в целом тут как с Java. Которой я на МК что-то тоже не вижу (и не удивляюсь этому).
BlackKilkennyCat
Собутыльник Кота
Сообщения: 2905
Зарегистрирован: Ср ноя 29, 2017 06:58:50

Re: Помогите пожалуйста с кодом С#

Сообщение BlackKilkennyCat »

Ну, вообще-то википедия немного не договаривает (я не читал, руководствуюсь вышеприведенными цитатами). Под дотнет создавался даже камень, работали КПК, на которых ОС далеко не "чисто винда", да и сейчас попытки есть. Например, гугл выдает сходу: https://www.terraelectronica.ru/news/4076 и даже там автор слегка неправ, так как и ранее подобное уже было.
Не видеть Яву на мк странно, она там в куче мест... Имеет смысл поглядеть дальше вики. Или Вы имеете ввиду 8-битную мелочь?
Reflector
Поставщик валерьянки для Кота
Сообщения: 2089
Зарегистрирован: Вс июн 19, 2016 09:32:03

Re: Помогите пожалуйста с кодом С#

Сообщение Reflector »

[uquote="NStorm",url="/forum/viewtopic.php?p=3881541#p3881541"]Да, за счет байт-кода он гибкий, потом появился Mono. Но в целом тут как с Java. Которой я на МК что-то тоже не вижу (и не удивляюсь этому).[/uquote]
На мк можно наблюдать python/lua/js или даже очень шустро работающие интерпретаторы бейсика, как на "Color Maximite 2". А на C# можно было под STM32F1(с 64К RAM) писать еще 10 лет назад.

ps. Вот реальный пример использования 7-ми летней давности.
Demiurg
Это не хвост, это антенна
Сообщения: 1480
Зарегистрирован: Ср июн 25, 2008 15:19:44
Контактная информация:

Re: Помогите пожалуйста с кодом С#

Сообщение Demiurg »

[uquote="ARV",url="/forum/viewtopic.php?p=3881485#p3881485"]...[/uquote]
Смотрите в будущее, вдруг наши советы помогут выйти кому-нибудь на этом форуме на международный рынок. Лично мне, в свое время, подобные обсуждения помогали и неоднократно. Пусть не международном рынке, в работе... Намекаю, наполняйте форум контекстом,смыслом.
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18561
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Re: Помогите пожалуйста с кодом С#

Сообщение ARV »

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

Мой уютный бложик... заходите!
NStorm
Поставщик валерьянки для Кота
Сообщения: 1978
Зарегистрирован: Ср июл 17, 2013 13:55:57

Re: Помогите пожалуйста с кодом С#

Сообщение NStorm »

[uquote="Reflector",url="/forum/viewtopic.php?p=3881558#p3881558"]На мк можно наблюдать python/lua/js или даже очень шустро работающие интерпретаторы бейсика, как на "Color Maximite 2".[/uquote]
Это знаю. Но это интерпретаторы, а не виртуальная машина для байт-кода.

[uquote="Reflector",url="/forum/viewtopic.php?p=3881558#p3881558"]А на C# можно было под STM32F1(с 64К RAM) писать еще 10 лет назад.
ps. Вот реальный пример использования 7-ми летней давности.[/uquote]
По ссылке FEZ Panda 2. Там не STM32, а ARM7TDMI с 512 флэша и 96 рамы. Смотрю .NET Micro Framework только для ARM7, ARM9 и BlackFin вроде как анонсирован. И проект уже в архиве и не разивавается. Равно как и Panda эта. В общем видимо никому не нужно было.
Хотя я согласен, вы меня переубедили - был C# на МК в каком-то виде. Но видимо не особо это и нужно было, когда есть те же микропитоны и LUA с меньшими требованиями.
Не видеть Яву на мк странно, она там в куче мест... Имеет смысл поглядеть дальше вики. Или Вы имеете ввиду 8-битную мелочь?
Я имею в виду, что в реальности это почти нигде не используется. Ну слишком высокие накладные расходы для МК. Бессмыслица.
Хотя смотрите выше - меня переубедили примером, что C# на МК был.

PS: Хотя если вернуться к вопросу ТС темы - тема всё-равно не про C# была, ТС писал на C и не знал, что C# - это совсем другой язык.
Reflector
Поставщик валерьянки для Кота
Сообщения: 2089
Зарегистрирован: Вс июн 19, 2016 09:32:03

Re: Помогите пожалуйста с кодом С#

Сообщение Reflector »

[uquote="NStorm",url="/forum/viewtopic.php?p=3881585#p3881585"]Это знаю. Но это интерпретаторы, а не виртуальная машина для байт-кода.[/uquote]
Это все именно байт-код. (MicroPython includes a cross compiler which generates MicroPython bytecode (file extension .mpy). The Python code can be compiled into the bytecode either directly on a microcontroller or it can be precompiled elsewhere.)
По ссылке FEZ Panda 2. Там не STM32, а ARM7TDMI с 512 флэша и 96 рамы. Смотрю .NET Micro Framework только для ARM7, ARM9 и BlackFin вроде как анонсирован. И проект уже в архиве и не разивавается. Равно как и Panda эта.
.NET Micro Framework работает с STM32, даже на сайте ST есть документы, типа UM1676. На смену Micro пришел nanoFramework, работает на кортексах и ESP32.
Dimon456
Мудрый кот
Сообщения: 1849
Зарегистрирован: Вс дек 25, 2016 08:34:54

Re: Помогите пожалуйста с кодом С#

Сообщение Dimon456 »

Demiurg и ARV, речь не о вытаскивании пункта меню для его отображения, скорее просто эксперимент, как это работает и на что потом можно применить.
Demiurg
Это не хвост, это антенна
Сообщения: 1480
Зарегистрирован: Ср июн 25, 2008 15:19:44
Контактная информация:

Re: Помогите пожалуйста с кодом С#

Сообщение Demiurg »

Тоже вариант. Молодец, тянешь тему. :)
BlackKilkennyCat
Собутыльник Кота
Сообщения: 2905
Зарегистрирован: Ср ноя 29, 2017 06:58:50

Re: Помогите пожалуйста с кодом С#

Сообщение BlackKilkennyCat »

NStorm, да, путанье С и С# в последнее время почему-то часто происходит.
Ответить

Вернуться в «AVR»