stm32 cubeide два инкремента не совместимы.

Кто любит RISC в жизни, заходим, не стесняемся.
Аватара пользователя
Аlex
Модератор
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля
Контактная информация:

Re: stm32 cubeide два инкремента не совместимы.

Сообщение Аlex »

tonyk, шутник. Какие ФриРтос с критическими секциями ? Посмотрите на посты человека и оцените его уровень :)
Реклама
tonyk
Это не хвост, это антенна
Сообщения: 1309
Зарегистрирован: Вт ноя 19, 2019 06:10:18

Re: stm32 cubeide два инкремента не совместимы.

Сообщение tonyk »

[uquote="Аlex",url="/forum/viewtopic.php?p=4163571#p4163571"]tonyk, шутник. Какие ФриРтос с критическими секциями ? Посмотрите на посты человека и оцените его уровень :)[/uquote]
FreeRTOS только для примера. Важен принцип. Его я и описал выше. Для синхронизации доступа ТС всё равно придётся делать критические секции, иначе будет долго ломать голову с проскакиванием через нуль и винить всех, кроме себя, неграмотного. Понимаю, что Дейкстру тут мало кто читал.

Добавлено after 3 minutes 3 seconds:
[uquote="ivan dimir",url="/forum/viewtopic.php?p=4163558#p4163558"]FreeRTOS. я не пользуюсь этой системой.А что это такое. ?Регистры знаю немного.

Добавлено after 1 minute 47 seconds:
Я думал меню создать на switch.Или я не так всё понял.Ну я ж не русский.[/uquote]

Ты чё, внатуре, по-русски не_понимашь? Я ж тебе написал:
Мораль сей басни такова: любое изменение переменной должно делаться только в одном потоке, а если нужно делать его из нескольких потоков или прерываний, то операция изменения должна обрамляться критической секцией. Иначе словишь двойной инкремент или декремент.
Реклама
ivan dimir
Мучитель микросхем
Сообщения: 440
Зарегистрирован: Вс дек 29, 2019 08:05:21

Re: stm32 cubeide два инкремента не совместимы.

Сообщение ivan dimir »

Буду изучать ,А насчёт swtch как можно подавить дребезг контактов оператором.?Приведите пример.

Добавлено after 5 minutes 18 seconds:
FreeRTOS как можно подключить к CubeIDE ? И как с ней работать что там за команды.Или операторы.как и с чем её кушать.?
Аватара пользователя
Аlex
Модератор
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля
Контактная информация:

Re: stm32 cubeide два инкремента не совместимы.

Сообщение Аlex »

ivan dimir писал(а):А насчёт swtch как можно подавить дребезг контактов оператором.?
Это шедевр :)))
Опертором switch не давят дребезг. Это оператор ветвления. Вы бы почитали, что ли, немного про него. Масса информации в интернете.
ivan dimir писал(а):FreeRTOS как можно подключить к CubeIDE ? И как с ней работать что там за команды.Или операторы.как и с чем её кушать.?
Не загружайтесь этим. Пока Вам рановато.
Реклама
Эиком - электронные компоненты и радиодетали
Dimon456
Мудрый кот
Сообщения: 1849
Зарегистрирован: Вс дек 25, 2016 08:34:54

Re: stm32 cubeide два инкремента не совместимы.

Сообщение Dimon456 »

ivan dimir, этот друг любит оператор switch, он имел ввиду заменить такого рода код
Спойлер

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

if(menu_en==1)
{

}
if(menu_en==2)
{

}
if(menu_en==3)
{

}
на что-то такое
Спойлер

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

switch (menu_en){
      case 1 : m_1(); break;
      case 2 : m_2(); break;
	  case 3 : m_3(); break;
      default : break;
	}  
	  
void m_1(void)
{

}

void m_2(void)
{

}

void m_3(void)
{

}
циферки в case не очень хорошо смотрятся, можно запутаться, можно заменить на что-то вроде такого
Спойлер

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

typedef enum{
	m_1,		 
	m_2,		
	m_3,		
} display;

display menu_en;

menu_en = m_1;

switch (menu_en){
      case m_1 : 	m_1(); break;
      case m_2 : 	m_2(); break;
	  case m_3 : 	m_3(); break;
      default : 	break;
}	  
	  
void m_1(void)
{

}

void m_2(void)
{

}

void m_3(void)
{

}
Под критической секцией он имеет ввиду Atomic block restorate.

А дребезг, предложили очень хороший кусочек кода, в этой теме, второе сообщение.
Реклама
tonyk
Это не хвост, это антенна
Сообщения: 1309
Зарегистрирован: Вт ноя 19, 2019 06:10:18

Re: stm32 cubeide два инкремента не совместимы.

Сообщение tonyk »

ivan dimir писал(а):А насчёт swtch как можно подавить дребезг контактов оператором.?
Аlex писал(а):Это шедевр
3.14здец... Вот почему я нифига не понял про дребезг. Я в аXYе, Аlex... После этого я себя таким имбицилом осчусчаю с этими критическими секциями и Дейкстрой...
Реклама
Аватара пользователя
Eddy_Em
Собутыльник Кота
Сообщения: 2516
Зарегистрирован: Пт июл 12, 2019 22:52:01
Контактная информация:

Re: stm32 cubeide два инкремента не совместимы.

Сообщение Eddy_Em »

ivan dimir, я ж писал уже, как избавиться от дребезга: достаточно не проверять состояние кнопки в течение 30..100мс после изменения состояния.
Я приводил ссылки на свой код: там все элементарно. SysTick отсчитывает условные миллисекунды, соответственно, конструкция вида

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

uint32_t T0 = 0;
...
if(T0 != Tms){ T0 = Tms; do_something();}
будет запускать функцию не чаще 1 раза в миллисекунду (Tms - глобальное "время").
Если сделать

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

if(T0 - Tms > X-1)
конструкция будет выполняться один раз в X миллисекунд. Впихиваешь во все свои конечные автоматы, где нужны задержки, такую конструкцию, и твой код получается неблокирующим.
Linux rules! Windows must die. Здравомыслящий человек добровольно будет пользоваться мастдаем лишь в двух случаях: под дулом автомата или под влиянием анального зонда.
Я на гитхабе, в ЖЖ
tonyk
Это не хвост, это антенна
Сообщения: 1309
Зарегистрирован: Вт ноя 19, 2019 06:10:18

Re: stm32 cubeide два инкремента не совместимы.

Сообщение tonyk »

Eddy_Em писал(а):ivan dimir, я ж писал уже, как избавиться от дребезга...
Eddy_Em, пардон меня, не заметил твой пост. Я описал этот же самый алгоритм.
Dimon456
Мудрый кот
Сообщения: 1849
Зарегистрирован: Вс дек 25, 2016 08:34:54

Re: stm32 cubeide два инкремента не совместимы.

Сообщение Dimon456 »

Eddy_Em, я за ТС вопрос задам, а это

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

do_something();
где взять?
Аватара пользователя
VladislavS
Собутыльник Кота
Сообщения: 2562
Зарегистрирован: Вт май 01, 2018 19:44:47

Re: stm32 cubeide два инкремента не совместимы.

Сообщение VladislavS »

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

void do_something(){}
Не благодари.
ivan dimir
Мучитель микросхем
Сообщения: 440
Зарегистрирован: Вс дек 29, 2019 08:05:21

Re: stm32 cubeide два инкремента не совместимы.

Сообщение ivan dimir »

[uquote="Eddy_Em",url="/forum/viewtopic.php?p=4163682#p4163682"]ivan dimir, я ж писал уже, как избавиться от дребезга: достаточно не проверять состояние кнопки в течение 30..100мс после изменения состояния.
Я приводил ссылки на свой код: там все элементарно. SysTick отсчитывает условные миллисекунды, соответственно, конструкция вида

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

uint32_t T0 = 0;
...
if(T0 != Tms){ T0 = Tms; do_something();}
будет запускать функцию не чаще 1 раза в миллисекунду (Tms - глобальное "время").
Если сделать

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

if(T0 - Tms > X-1)
конструкция будет выполняться один раз в X миллисекунд. Впихиваешь во все свои конечные автоматы, где нужны задержки, такую конструкцию, и твой код получается неблокирующим.[/uquote]
У меня системный таймер занят.Есть 4 таймера.Можно их задействовать?.

А кстати инкремент на нажатие кнопки и декремент на нажатие кнопки.Действуют в серии stm32f103 совсем по другому если в stm32f407 программа работает единственное подвесало.То в этой серии инкремент работает правильно сам ставлю - - .Всё в разнос..Буду рыть дальше.

Добавлено after 1 minute 42 seconds:
А отдельно работают.
Аватара пользователя
Eddy_Em
Собутыльник Кота
Сообщения: 2516
Зарегистрирован: Пт июл 12, 2019 22:52:01
Контактная информация:

Re: stm32 cubeide два инкремента не совместимы.

Сообщение Eddy_Em »

У меня системный таймер занят
Чем? Если ты на нем сделал дебильную функцию delay, то предлагаю более вменяемую реализацию:

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

void delay(uint8_t ms){
  uint32_t T = Tms;
  while(Tms - T < (uint32_t)ms){}
}
А волатильную переменную Tms инкрементируй в прерывании SysTick каждую миллисекунду.
Linux rules! Windows must die. Здравомыслящий человек добровольно будет пользоваться мастдаем лишь в двух случаях: под дулом автомата или под влиянием анального зонда.
Я на гитхабе, в ЖЖ
ivan dimir
Мучитель микросхем
Сообщения: 440
Зарегистрирован: Вс дек 29, 2019 08:05:21

Re: stm32 cubeide два инкремента не совместимы.

Сообщение ivan dimir »

[uquote="Eddy_Em",url="/forum/viewtopic.php?p=4163829#p4163829"]
У меня системный таймер занят
Чем? Если ты на нем сделал дебильную функцию delay, то предлагаю более вменяемую реализацию:

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

void delay(uint8_t ms){
  uint32_t T = Tms;
  while(Tms - T < (uint32_t)ms){}
}
А волатильную переменную Tms инкрементируй в прерывании SysTick каждую миллисекунду.[/uquote]
Это не мои функции.А вашу нужно проверить?

Добавлено after 9 hours 43 minutes 26 seconds:
Проблема в плате или в схеме потому что включаю PB4 и PB3 .Значения в минусах идут .А включил PB9 и PB4.Всё в норме кто может объяснить .Почему некоторые пины не можно так использовать контролер идёт в разнос.?
Аватара пользователя
AlanDrakes
Прорезались зубы
Сообщения: 236
Зарегистрирован: Пн июл 04, 2016 16:51:22
Откуда: Россия, Омск

Re: stm32 cubeide два инкремента не совместимы.

Сообщение AlanDrakes »

[uquote="ivan dimir",url="/forum/viewtopic.php?p=4163836#p4163836"]Проблема в плате или в схеме потому что включаю PB4 и PB3 .Значения в минусах идут .А включил PB9 и PB4.Всё в норме кто может объяснить .Почему некоторые пины не можно так использовать контролер идёт в разнос.?[/uquote]

Наводки на пинах, нет стабильного состояния. Состояние пина хаотично меняется и возникают ложные срабатывания.
Добавьте резисторы-подтяжки к пинам на неактивный уровень (который должен быть, чтобы кнопка не считалась нажатой), либо включите подтяжки на уровне GPIO:
Здесь - слабая подтяжка пинов к нулевому уровню.

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

GPIOC->PUPDR = (0x02 << 6) | (0x02 << 8) | (0x02 << 18);
И всегда проверяйте, что переменная переходит через ноль.

*поправил смещения битов
ivan dimir
Мучитель микросхем
Сообщения: 440
Зарегистрирован: Вс дек 29, 2019 08:05:21

Re: stm32 cubeide два инкремента не совместимы.

Сообщение ivan dimir »

[uquote="AlanDrakes",url="/forum/viewtopic.php?p=4163927#p4163927"][uquote="ivan dimir",url="/forum/viewtopic.php?p=4163836#p4163836"]Проблема в плате или в схеме потому что включаю PB4 и PB3 .Значения в минусах идут .А включил PB9 и PB4.Всё в норме кто может объяснить .Почему некоторые пины не можно так использовать контролер идёт в разнос.?[/uquote]

Наводки на пинах, нет стабильного состояния. Состояние пина хаотично меняется и возникают ложные срабатывания.
Добавьте резисторы-подтяжки к пинам на неактивный уровень (который должен быть, чтобы кнопка не считалась нажатой), либо включите подтяжки на уровне GPIO:
Здесь - слабая подтяжка пинов к нулевому уровню.

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

GPIOC->PUPDR = (0x02 << 2) | (0x02 << 3) | (0x02 << 8);
И всегда проверяйте, что переменная переходит через ноль.[/uquote]
На плате stm32f103C8t висит SWO шина на которой я прошиваю я посмотрел по схеме а на stm32f407vt такого нет.

Добавлено after 14 minutes 58 seconds: /*
* main.c
*
* Created on: 5 груд. 2021 р.
* Author: Admin
*/
#include "main.h"
#include <stdio.h>
#define SYSCLOCK 72000000U
__IO uint32_t tmpreg;
__IO uint32_t SysTick_CNT = 0;
unsigned char menu_lcd;
unsigned short int a;
struct
{
volatile unsigned char a1;
volatile unsigned char a2;
volatile unsigned char b1;
volatile unsigned char b2;
volatile unsigned char c1;
volatile unsigned char c2;
volatile unsigned char d1;
volatile unsigned char d2;
unsigned short int a;
volatile unsigned short int b;
volatile unsigned short int c;
volatile unsigned short int d;
unsigned short int result_a;
unsigned short int result_b;
unsigned short int result_c;
unsigned short int result_d;
}danie;
struct
{
unsigned char menu_btn;
unsigned char menu_lcd;
char buf[50];
char buf1[50];
char buf2[50];
char buf3[50];
char buf4[50];
char buf5[50];
char buf6[50];
char buf7[50];
char buf8[50];
volatile unsigned char flag;
volatile unsigned char flag2;
volatile unsigned short int pauza;
volatile unsigned short int pauza1;
}nastroyki;
void TIM1_UP_IRQHandler(void)
{
//pauza->t1=0;
if(TIM1->SR & TIM_SR_UIF)
{
TIM1->SR &= ~ TIM_SR_UIF;
nastroyki.pauza1++;
}

}
void TIM2_IRQHandler (void)
{
if(TIM2->SR & TIM_SR_UIF)
{
TIM2->SR &= ~ TIM_SR_UIF;
if(nastroyki.flag==1)
{
nastroyki.pauza++;
}



}
}

void SysTick_Handler(void)
{
if(SysTick_CNT > 0) SysTick_CNT--;
}
void init_systimer(void)
{
MODIFY_REG(SysTick->LOAD,SysTick_LOAD_RELOAD_Msk,SYSCLOCK / 1000 - 1);

CLEAR_BIT(SysTick->VAL, SysTick_VAL_CURRENT_Msk);
SET_BIT(SysTick->CTRL, SysTick_CTRL_CLKSOURCE_Msk | SysTick_CTRL_ENABLE_Msk | SysTick_CTRL_TICKINT_Msk);

}

void delay(__IO uint32_t tck)
{
while(tck)
{
tck--;
}
}
//----------------------------------------------------------
void delay_ms(uint32_t ms)
{
MODIFY_REG(SysTick->VAL,SysTick_VAL_CURRENT_Msk,SYSCLOCK / 1000 - 1);
SysTick_CNT = ms;
while(SysTick_CNT) {}
}
void NMI_Handler(void)
{
if((RCC->CIR & RCC_CIR_CSSF) != 0) // HSE fail
{
RCC->CIR |= RCC_CIR_CSSC; // Clear CSSF flag

}
}
void RCC_init(void);

int main(void)
{
nastroyki.pauza=0;
nastroyki.pauza1=0;
nastroyki.menu_btn=0;
nastroyki.menu_lcd=0;
RCC_init();
init_systimer();
//IWDT_init();
APB_init();
GPIO_init();
timer1_init();
timer2_init();
I2C1_Init();
LCD_ini();
LCD_Clear();
while(1)
{
if((GPIOB->IDR&GPIO_IDR_IDR5)==0)
{
nastroyki.flag=1;
}
if(nastroyki.flag==1&&GPIOB->IDR&GPIO_IDR_IDR5&&nastroyki.pauza>10)
{
nastroyki.flag=0;
nastroyki.pauza=0;
nastroyki.menu_btn++;nastroyki.menu_lcd++;
}
// LCD_SetPos(0,0);
// LCD_String("Bobr_stm32");
switch (nastroyki.menu_btn)
{
case 0:
break;
case 1:
if((GPIOB->IDR&GPIO_IDR_IDR4)==0)
{
if(nastroyki.pauza1>3)
{
nastroyki.pauza1=0;
if (danie.a==4095)
{
danie.a=0;
} // }
danie.a++;
}

}

if((GPIOB->IDR&GPIO_IDR_IDR8)==0)
{

if(nastroyki.pauza1>3)
{
nastroyki.pauza1=0;
if (danie.a==0)
{
danie.a=4095;
} // }
danie.a--;
}
}


break;
case 2:
if((GPIOB->IDR&GPIO_IDR_IDR4)==0)
{

if(nastroyki.pauza1>3)
{
nastroyki.pauza1=0;
if ( danie.b==4095)
{
danie.b=0;
}
danie.b++;
}
}
if((GPIOB->IDR&GPIO_IDR_IDR8)==0)
{

if(nastroyki.pauza1>3)
{
nastroyki.pauza1=0;
if (danie.b==0)
{
danie.b=4095;
} // }
danie.b--;
}

}
break;
case 3:
if((GPIOB->IDR&GPIO_IDR_IDR4)==0)
{
if(nastroyki.pauza1>3)
{
nastroyki.pauza1=0;
if (danie.c ==4095)
{
danie.c=0;
}
danie.c++;
}
}
if((GPIOB->IDR&GPIO_IDR_IDR8)==0)
{
if(nastroyki.pauza1>3)
{
nastroyki.pauza1=0;
if (danie.c==0)
{
danie.c=4095;
} // }
danie.c--;

}
}
break;
case 4:
if((GPIOB->IDR&GPIO_IDR_IDR4)==0)
{
if(nastroyki.pauza1>3)
{
nastroyki.pauza1=0;
if ( danie.d ==4095)
{
danie.d=0;
}
danie.d++;
}
}
if((GPIOB->IDR&GPIO_IDR_IDR8)==0)
{
if(nastroyki.pauza1>3)
{
nastroyki.pauza1=0;
if ( danie.d==0)
{
danie.d=1023;
} // }
danie.d--;
}

}
break;
case 5:
nastroyki.menu_btn=0;
break;
}



switch(nastroyki.menu_lcd)
{
case 0:
LCD_SetPos(0,0);
LCD_String("Bobr_stm32");
break;
case 1: sprintf(nastroyki.buf,"a=%2d ",danie.a);
LCD_SetPos(0,0);
LCD_String(nastroyki.buf);

break;
case 2:
sprintf( nastroyki.buf2,"b=%2d ",danie.b );
LCD_SetPos(0,0);
LCD_String(nastroyki.buf2);
break;
case 3:
sprintf(nastroyki.buf4,"c=%2d ",danie.c );
LCD_SetPos(0,0);
LCD_String(nastroyki.buf4);
break;
case 4:

sprintf(nastroyki.buf6,"d=%2d ",danie.d);
LCD_SetPos(0,0);
LCD_String(nastroyki.buf6);
break;
case 5:
nastroyki.menu_lcd=0;
break;
}
}
}

Вот всё и заработало в таком плане проблеиа решена.
Аватара пользователя
AlanDrakes
Прорезались зубы
Сообщения: 236
Зарегистрирован: Пн июл 04, 2016 16:51:22
Откуда: Россия, Омск

Re: stm32 cubeide два инкремента не совместимы.

Сообщение AlanDrakes »

[uquote="ivan dimir",url="/forum/viewtopic.php?p=4163957#p4163957"]На плате stm32f103C8t висит SWO шина на которой я прошиваю я посмотрел по схеме а на stm32f407vt такого нет.[/uquote]

Открываете Datasheet на процессор, переходите в раздел 3 - Pinouts ans pin description, находите таблицу 7 - Table 7. STM32F40x pin and ball definitions, ищете по строке SWO. И данная функция находится на пине PB3.
Если не получается использовать вывод трассировки через данный пин, используйте любой USB-UART конвертор и терминал типа того же Putty, и выводите отладочные сообщения в UART. У данного кристалла их до 6 штук.

--------------------------
Чтож. Не буду вас переубеждать, или снова рекомендовать писать код НЕ макарошками, или хотя бы обрабатывать кнопки в функции - это всё не моё дело. Хотя порекомендую хотя бы задуматься об этом, поскольку данный код масштабируется довольно сложно. Как минимум, если возникнет нужда добавить ещё несколько пунктов меню, или поменять их местами, то это может оказаться нетривиальной задачей.

Плюс, вагную предупреждение компилятора на этой строке:
if(nastroyki.flag==1 && GPIOB->IDR & GPIO_IDR_IDR5 && nastroyki.pauza>10)
ivan dimir
Мучитель микросхем
Сообщения: 440
Зарегистрирован: Вс дек 29, 2019 08:05:21

Re: stm32 cubeide два инкремента не совместимы.

Сообщение ivan dimir »

[uquote="AlanDrakes",url="/forum/viewtopic.php?p=4163964#p4163964"][uquote="ivan dimir",url="/forum/viewtopic.php?p=4163957#p4163957"]На плате stm32f103C8t висит SWO шина на которой я прошиваю я посмотрел по схеме а на stm32f407vt такого нет.[/uquote]

Открываете Datasheet на процессор, переходите в раздел 3 - Pinouts ans pin description, находите таблицу 7 - Table 7. STM32F40x pin and ball definitions, ищете по строке SWO. И данная функция находится на пине PB3.
Если не получается использовать вывод трассировки через данный пин, используйте любой USB-UART конвертор и терминал типа того же Putty, и выводите отладочные сообщения в UART. У данного кристалла их до 6 штук.

----------
Чтож. Не буду вас переубеждать, или снова рекомендовать писать код НЕ макарошками, или хотя бы обрабатывать кнопки в функции - это всё не моё дело. Хотя порекомендую хотя бы задуматься об этом, поскольку данный код масштабируется довольно сложно. Как минимум, если возникнет нужда добавить ещё несколько пунктов меню, или поменять их местами, то это может оказаться нетривиальной задачей.

Плюс, вагную предупреждение компилятора на этой строке:
if(nastroyki.flag==1 && GPIOB->IDR & GPIO_IDR_IDR5 && nastroyki.pauza>10)[/uquote]
А чем писать код? И чем вас смущает эта строка.Нажимаю кнопку выставляется флаг.Когда выставляется флаг в обработчике прерываний по таймеру начинает счёт переменная.При отжатии кнопки если флаг установлен 1и посчитало 10 единиц переключается меню. Да при отжатии кнопки флаг как и пауза(тик) устанавливаются в ноль.Этот вариант не проходит когда записуешь в EEPROM.На AVR не проходит.А в чём вопрос.?

Добавлено after 26 minutes 19 seconds:
Покажите хоть пример.Кусочек кода моего .Так как нужно писать .Пожайлуста профи.
Аватара пользователя
Eddy_Em
Собутыльник Кота
Сообщения: 2516
Зарегистрирован: Пт июл 12, 2019 22:52:01
Контактная информация:

Re: stm32 cubeide два инкремента не совместимы.

Сообщение Eddy_Em »

[uquote="ivan dimir",url="/forum/viewtopic.php?p=4163836#p4163836"]Это не мои функции.[/uquote]
Зачем тогда их использовать, если непонятно, что они делают?
Linux rules! Windows must die. Здравомыслящий человек добровольно будет пользоваться мастдаем лишь в двух случаях: под дулом автомата или под влиянием анального зонда.
Я на гитхабе, в ЖЖ
ivan dimir
Мучитель микросхем
Сообщения: 440
Зарегистрирован: Вс дек 29, 2019 08:05:21

Re: stm32 cubeide два инкремента не совместимы.

Сообщение ivan dimir »

[uquote="Eddy_Em",url="/forum/viewtopic.php?p=4164000#p4164000"][uquote="ivan dimir",url="/forum/viewtopic.php?p=4163836#p4163836"]Это не мои функции.[/uquote]
Зачем тогда их использовать, если непонятно, что они делают?[/uquote]
Библиотека дисплея не моя при ней идут функции задержек на системном таймере они использованы для LCD.А программа моя топорная правда.Переношу проект с avr на stm32
Аватара пользователя
Eddy_Em
Собутыльник Кота
Сообщения: 2516
Зарегистрирован: Пт июл 12, 2019 22:52:01
Контактная информация:

Re: stm32 cubeide два инкремента не совместимы.

Сообщение Eddy_Em »

Рекомендую индусокод выбросить и начать с нуля писать.
Но для этого понадобится сначала научиться общей культуре программирования. Пока что у тебя выходит адов спагетти-код, в котором ты и сам через год не разберешься!
Linux rules! Windows must die. Здравомыслящий человек добровольно будет пользоваться мастдаем лишь в двух случаях: под дулом автомата или под влиянием анального зонда.
Я на гитхабе, в ЖЖ
Ответить

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