Пт май 08, 2020 09:40:06
Пт май 08, 2020 09:45:10
у меня зависимость от версии по минимуму, т.е. ниже определенной версии не будет поддержки __flash, а значит, и мои файлы не соберутся. но AVR Toolchain давно имеет соответствующую версию! почему у вас не собралось - не понимаю: я тестировал у себя от версии 4.9.2 и до 9.2.0Demiurg писал(а):Попробовал запустить в AVR Toolchain, оказывается у вас зависимость от версии.
это ваша личная хотелка - смотрите на WiseLord, он буквально за 5 минут запустил и на своем AVR (я тестировал на меге8, а он на меге328), и на stm32, и никаких скомпилированных проектов ему не потребовалось. я предоставил полностью готовые примеры с готовыми makefile для atmega8, в комплекте с протеусом - хоть собирайте сами, хоть тестируйте готовое! а остальное - "за свой счет"Demiurg писал(а):Это не моя личная хотелка.
самая порочная практика из всех, что я встречал - игнорировать рекомендации даташита, полагаясь на какие-то задержки. я так не делал, и не буду делать. и вам не советуюDemiurg писал(а):при этом без опроса флага готовности
Пт май 08, 2020 10:48:58
Пт май 08, 2020 12:39:50
Пт май 08, 2020 12:47:52
Пт май 08, 2020 13:01:35
А что тогда вместо него предпочитаете? SVN?ARV писал(а):у меня как-то с GIT не складывается
Всё эти файлы avr_fmenu.* - это файлы проекта, чтобы открыть код в QtCreator. По сути, они не нужны для сборки. Достаточно только в PATH иметь make и компилятор (avr-gcc и arm-none-eabi-gcc соответственно).ARV писал(а):даже несколько удивлен количеству "лишних" файлов
Пт май 08, 2020 13:02:01
вы будете смеяться: внешний дискWiseLord писал(а):А что тогда вместо него предпочитаете?
Пт май 08, 2020 13:20:40
А я пользуюсь QtCreator, в котором тоже есть поддержка разных систем контроля версий, но я эти функционалом не пользуюсь.ARV писал(а):я использую Eclipse, и много раз хотел как-то приспособить либо встроенную в него возможность контроля версий, либо при помощи плагинов что-то подключить... но так и не уразумел, как всем этим добром пользоваться
Пт май 08, 2020 13:25:32
да не вы первый мне это советуете... но я очень ленивый: это ж надо консоль открывать, команды вбивать... еще помнить их... не, мне или "кнопочку", или уж по-старинке - на внешний диск Total Commander-омWiseLord писал(а):я бы посоветовал изучить эти несколько команд консольного git
Пт май 08, 2020 14:18:59
git init - создать в некотором рабочем каталоге git репозиторий
git add <относительный путь> - добавить текущие изменения в файл(ах)/каталогу в список для индексации
gid commit - зафиксировать список для индексации (создать коммит в истории с текущим состоянием дерева проекта)
git log - посмотреть историю коммитов
git show <хэш коммита> - посмотреть изменения, сделанные в этом комите.
git push - отправить текущее состояние (последний коммит со всей историей) на удалённый сервер
git pull - забрать последние изменения с сервера (если, к примеру, работали на другой машине и пушили раньше оттуда на сервер)
Пт май 08, 2020 14:31:12
Ср авг 19, 2020 21:38:57
typedef const struct Menu_Item {
const struct Menu_Item *Next; /**< Указатель на следующий пункт меню этого пункта меню */
const struct Menu_Item *Previous; /**< Указатель на предыдущий пункт меню этого пункта меню */
const struct Menu_Item *Parent; /**< Указатель на родительский пункт меню этого пункта меню */
const struct Menu_Item *Child; /**< Указатель на дочерний пункт меню этого пункта меню */
const char id;
} Menu_Item_t;
#define MENU_ITEM(Name, Next, Previous, Parent, Child, id) \
extern Menu_Item_t const Next; \
extern Menu_Item_t const Previous; \
extern Menu_Item_t const Parent; \
extern Menu_Item_t const Child; \
Menu_Item_t const Name = {&Next, &Previous, &Parent, &Child, id}
#define MENU_PARENT (Menu_GetCurrentMenu()->Parent)
#define MENU_CHILD (Menu_GetCurrentMenu()->Child)
#define MENU_NEXT (Menu_GetCurrentMenu()->Next)
#define MENU_PREVIOUS (Menu_GetCurrentMenu()->Previous)
extern Menu_Item_t NULL_MENU;
Menu_Item_t NULL_MENU = {0};
static void (*MenuWriteFunc)(const char* Text) = NULL;
static Menu_Item_t* CurrentMenuItem = &NULL_MENU;
Menu_Item_t* Menu_GetCurrentMenu(void)
{
return CurrentMenuItem;
}
void Menu_Navigate(Menu_Item_t* const NewMenu)
{
if ((NewMenu == &NULL_MENU) || (NewMenu == NULL))
return;
CurrentMenuItem = NewMenu;
}
MENU_ITEM(Menu_1, Menu_2, NULL_MENU, NULL_MENU, NULL_MENU, SETTING_ENTER); // Settings
MENU_ITEM(Menu_2, Menu_2_1, Menu_1, Menu_5, NULL_MENU, CALIBRATIONS_DEVICES); // Calibrations Devices
MENU_ITEM(Menu_2_1, Menu_2_1_1, Menu_2, Menu_2_2, Menu_2_1, CALIBRATION_VOLTMETER); // Calibration of the voltmeter
MENU_ITEM(Menu_2_2, Menu_2_2_1, Menu_2, Menu_2_2, Menu_2_1, CALIBRATION_AMMETER); // Calibration of the ammeter
MENU_ITEM(Menu_2_1_1, Menu_2_1_2, Menu_2_1, NULL_MENU, NULL_MENU, VOLTMETER_1); //
MENU_ITEM(Menu_2_1_2, Menu_2_1_1, Menu_2_1, NULL_MENU, NULL_MENU, VOLTMETER_2); //
Menu_Navigate(MENU_NEXT);
Menu_Navigate(MENU_PREVIOUS);
Menu_Navigate(MENU_CHILD);
Menu_Navigate(MENU_PARENT);
STATE ( NOT, NULL ),
STATE (SETTING_ENTER, settings_enter ),
STATE (CALIBRATIONS_DEVICES, Calibrations_Devices ),
STATE (CALIBRATION_VOLTMETER, Calibration_Voltmeter ),
STATE (VOLTMETER_1, Voltmeter_1 ),
STATE (VOLTMETER_2, Voltmeter_2 ),
volatile Menu_Item_t* menu = &NULL_MENU;
menu = Menu_GetCurrentMenu();
id = menu->id;
if(id) proc_device(id);
void proc_device (char id)
{
_proc_device = id;
proc_fsm_func (proc_device_func, _proc_device);
}
void proc_fsm_func (FUNC __flash *ptr_func, unsigned char s)
{
ptr_func [s] ();
}
const FUNC proc_device_func [PROC_DEVICE_STATES] =
{
#define STATE(name, func) func
#include "func.h"
#undef STATE
};
// Menus function
void settings_enter(void)
{
lcd_gotoxy (4,0);
lcd_putstring ("Settings");
}
void Calibrations_Devices(void)
{
lcd_gotoxy (0,0);
lcd_putstring ("Calibrations");
lcd_gotoxy (0,1);
lcd_putstring ("Devices");
}
typedef enum{
standard_screen, //0 стандартный екран
setting_enter, // меню настроек
calibrations_devices, //
calibration_voltmeter, //
voltmeter_1, //
voltmeter_2, //
} display;
switch(id)
{
case setting_enter:
settings_enter();
break;
case calibrations_devices:
Calibrations_Devices();
break;
case calibration_voltmeter:
Calibration_Voltmeter();
break;
Ср авг 19, 2020 22:12:36
Чт авг 20, 2020 05:20:23
// Menus Name | Next | Prev | Parent | Child | SelectFunction
MENU_ITEM(Menu_5_1_1, NULL_MENU, Menu_5_1, NULL_MENU, NULL_MENU, T_VOLTAGES); ///
if (button == BTN_SHRT4) {
lcd_clear();//очистка LCD и перевод курсора в 0.0
Menu_Navigate(MENU_NEXT);
if(id == T_VOLTAGES) { if(table_u++ == U_33) table_u = U_33; }
}
if (button == BTN_SHRT3) {
lcd_clear();//очистка LCD и перевод курсора в 0.0
Menu_Navigate(MENU_PREVIOUS);
}
if (button == BTN_SHRT2) {
switch(id)
{
case CALIBRATIONS_DEVICES:
case CALIBRATION_TABLE:
case CALIBRATION_VOLTMETER:
case CALIBRATION_AMMETER:
case TABLE_VOLTAGES:
case TABLE_CURRENT:
lcd_clear();//очистка LCD и перевод курсора в 0.0
Menu_Navigate(MENU_CHILD);
break;
default: break;
}
if(id == T_VOLTAGES) {variable[table_u].U_table--; variable[table_u].U_table = normalize (((int16_t)variable[table_u].U_table), ((int16_t)(0)), ((int16_t)(UImax_pwm)));}
}
if (button == BTN_SHRT1) {
switch(id)
{
case CALIBRATIONS_DEVICES:
case CALIBRATION_TABLE:
case CALIBRATION_VOLTMETER:
case CALIBRATION_AMMETER:
case TABLE_VOLTAGES:
case TABLE_CURRENT:
lcd_clear();//очистка LCD и перевод курсора в 0.0
Menu_Navigate(MENU_PARENT);
break;
default: break;
}
if(id == T_VOLTAGES) {variable[table_u].U_table++; variable[table_u].U_table = normalize (((int16_t)variable[table_u].U_table), ((int16_t)(0)), ((int16_t)(UImax_pwm)));}
}
void T_voltages (void)
{
lcd_gotoxy (0, 0);
lcd_putstring("Set");
lcd_gotoxy (13, 0);
sprintf (string_out,"%02dV",(uint8_t)table_u);
lcd_putstring (string_out);
lcd_gotoxy (0, 1);
sprintf (string_out,"DAC=%04d",variable[table_u].U_table);
lcd_putstring (string_out);
lcd_gotoxy (9,1);
sprintf (string_out,"\"%2d.%02d\"", x_u_izm/100, (x_u_izm)%100);
lcd_putstring (string_out);
}
if((millis() - previousMillis) > 500){
previousMillis = millis();
blink = !blink;
}
lcd_gotoxy (0,1);
if (blink) lcd_putchar(0x22); else lcd_putchar(0x20);
lcd_gotoxy (1, 1);
sprintf (string_out,"%04d",Imax_adc);
lcd_putstring_flash (string_out);
lcd_gotoxy (5,1);
if (blink) lcd_putchar(0x22); else lcd_putchar(0x20);
Чт авг 20, 2020 09:16:43
???????????Dimon456 писал(а):запятую поставьте там где мне надо
Чт авг 20, 2020 13:36:01
Чт авг 20, 2020 14:04:52
отнюдь.Dimon456 писал(а):все равно
Пт авг 21, 2020 08:54:21
самая порочная практика из всех, что я встречал - игнорировать рекомендации даташита, полагаясь на какие-то задержки. я так не делал, и не буду делать. и вам не советуюDemiurg писал(а):при этом без опроса флага готовности
Пт авг 21, 2020 09:56:46
Пт авг 21, 2020 12:09:41
STATE (STANDARD_SCREEN, standard_screen ), //
STATE (MODE_BP, standard_screen ), //
STATE (POWER, standard_screen ), //
STATE (CHARGE, standard_screen ), //
STATE (OPERATION, standard_screen ), //
STATE (TIMING, standard_screen ), //
// Menus Name | Next | Prev | Parent | Child | SelectFunction
MENU_ITEM(Menu_0, Menu_0_2, NULL_MENU, NULL_MENU, NULL_MENU, STANDARD_SCREEN); //
MENU_ITEM(Menu_0_2, Menu_0_3, NULL_MENU, NULL_MENU, NULL_MENU, MODE_BP); //
MENU_ITEM(Menu_0_3, Menu_0_4, NULL_MENU, NULL_MENU, NULL_MENU, POWER); //
MENU_ITEM(Menu_0_4, Menu_0_5, NULL_MENU, NULL_MENU, NULL_MENU, CHARGE); //
MENU_ITEM(Menu_0_5, Menu_0_6, NULL_MENU, NULL_MENU, NULL_MENU, OPERATION); //
MENU_ITEM(Menu_0_6, Menu_0, NULL_MENU, NULL_MENU, NULL_MENU, TIMING); //
void standard_screen (void)
{
lcd_gotoxy (0,0);
sprintf (string_out,...;
lcd_putstring (string_out);
lcd_gotoxy (9,0);
sprintf (string_out,...;
lcd_putstring (string_out);
lcd_gotoxy (0,1);
sprintf (string_out,...;
lcd_putstring (string_out);
//дополнительная информация
lcd_gotoxy (9, 1);
if(id==STANDARD_SCREEN){ //
sprintf (string_out,...;
lcd_putstring (string_out);
}
if(id==MODE_BP){ //
sprintf (string_out,...;
lcd_putstring (string_out);
}
if(id==POWER){ //
sprintf (string_out,...;
lcd_putstring (string_out);
}
if(id==CHARGE){ //
sprintf (string_out,...;
lcd_putstring (string_out);
}
if(id==OPERATION){ //
sprintf (string_out,...;
lcd_putstring (string_out);
}
if(id==TIMING){ //
sprintf (string_out,...;
lcd_putstring (string_out);
}
}