- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
/* Infinite loop */
/* USER CODE BEGIN WHILE */
while (1)
{
Master_Slave_Check();
if (CtrlBrd_Mode == 1) //MasterMode
{
SSPC_Check_Proc();
Read_ADC();
Logic();
RS_Enable();
Obmen_RS();
//CAN_Enable();
//Obmen_CAN();
//if (SoftFlag.Flag1.bit.History_Wr_Req)
//{
// SoftFlag.Flag1.bit.History_Wr_Req = 0;
// Write_History();
//}
HAL_IWDG_Refresh(&hiwdg); //Dog reset
Migalka(); //Working LED blink
}
else if (CtrlBrd_Mode == 0) //SlaveMode
{
Slave_DeInit();
while(1)
{
Master_Slave_Check();
if (CtrlBrd_Mode == 1) //если плата снова стала мастером, когда сдох основной мастер,
HW_RESET(); //делаем аппаратный сброс для перезапуска (нога выставляется в 1, отпирает транзюк VT9, который садит на землю вход управления тракой)
HAL_IWDG_Refresh(&hiwdg); //Dog reset
Migalka();
}
}
}
/* USER CODE END WHILE */
}
Так реализовал параллельную работу двух одинаковых плат управления, одна из которых висит в режиме ожидания.
SteadfastTinCock 10.07.2019 14:15 # −4
3oJIoTou_xyu 10.07.2019 14:36 # 0
SteadfastTinCock 10.07.2019 14:47 # −4
3oJIoTou_xyu 10.07.2019 15:57 # +3
guest8 10.07.2019 17:24 # −999
SteadfastTinCock 10.07.2019 17:29 # −2
guest8 10.07.2019 17:39 # −999
Louie_Louie 11.07.2019 11:21 # 0
BoeHHblu_nemyx 10.07.2019 22:29 # 0
Steve_Brown 10.07.2019 15:42 # +2
bormand 10.07.2019 15:56 # 0
Steve_Brown 10.07.2019 16:16 # +2
HW_RESET(); //делаем аппаратный сброс для перезапуска (нога выставляется в 1, отпирает транзюк VT9, который садит на землю вход управления тракой)
Неужели только так можно перезагрузить контроллер? Вот x86, помнится, перезагружался через контроллер клавиатуры, но тут вроде бы должна быть соответствующая инструкция... ну или через while(1); // Укуси меня собака
(на x86 WDT не перезагружает процессор, а выдает сигнал на соответствующий выход, и если на плате он не разведен на Reset, то рестарт становится нетривиальной задачей...)
bormand 10.07.2019 16:27 # +2
ykypeHHbIu_nemyx 10.07.2019 17:02 # +1
{
if ((Discrete1_State == 1) && ((Discrete2_State == 1) || (Discrete3_State == 1)))
CtrlBrd_Mode = 1;
if ((Discrete1_State == 0) && ((Discrete2_State == 1) || (Discrete3_State == 1)))
CtrlBrd_Mode = 0;
if ((Discrete1_State == 0) && ((Discrete2_State == 0) || (Discrete3_State == 0)))
CtrlBrd_Mode = 1;
}
//первый вход - просто перемычка, я сам задаю, кто мастер, а кто слэйв. Другие два входа нюхают выходы со второй платы.
//Не очень надежно, но другого пока не высрал)
bormand 10.07.2019 17:32 # 0
Есть шанс, что после включения основной платы она сразу же станет мастером, а резервная плата узнает об этом только на следующей итерации.
bormand 10.07.2019 18:22 # 0
> перемычка
1 - основная плата, 0 - резервная?
> выходы со второй платы
Единичка выставляется на эти выходы при старте контроллера и никогда не убирается. Ноль - обрыв провода или сдох контроллер?
Я правильно понял логику?
З.Ы. Что лежит в CtrlBrd_Mode изначально?
ykypeHHbIu_nemyx 11.07.2019 10:15 # 0
ykypeHHbIu_nemyx 11.07.2019 10:17 # 0
bormand 11.07.2019 13:24 # 0
ykypeHHbIu_nemyx 11.07.2019 17:40 # 0
bormand 11.07.2019 17:40 # 0
Louie_Louie 11.07.2019 11:45 # +2
Ккй бгр )))
SteadfastTinCock 10.07.2019 16:18 # +95
bormand 10.07.2019 17:03 # +94
Steve_Brown 10.07.2019 19:52 # +2
2) Приоритет определяется адресом: при передаче адреса происходит одновременный мониторинг шины, несовпадение переданного бита означает присутствие на шине устройства с бóльшим приоритетом.
3) Сражаются, пока один не отгрызет пенис другого
4) При возникновении коллизии запускается алгоритм определения (например, CSMA/CD: генерируется сигнал помехи, чтобы партнер тоже перешел в режим определения, затем после [квази]случайной задержки и отсутствии приема происходит повтор передачи)
guest8 10.07.2019 16:55 # −999
guest8 11.07.2019 02:48 # −999
TOPT 11.07.2019 03:01 # 0
ykypeHHbIu_nemyx 11.07.2019 10:12 # 0
bormand 11.07.2019 13:18 # 0
Дык ардуина - это и есть атмега. Просто распаянная на плату и с готовыми железными и софтовыми модулями.
3_14zda 11.07.2019 13:20 # 0
TEH3OPHblu_nemyx 11.07.2019 13:26 # +2
http://rw6ase.narod.ru/00/rk1/mrk2_8.jpg
guest8 11.07.2019 13:27 # −999
3oJIoTou_xyu 11.07.2019 13:40 # +2
bormand 11.07.2019 13:26 # 0
Под них сложно мозг вывернуть... Но да, большинство практических задач они решают даже без кобенаторов.
bormand 11.07.2019 17:48 # 0
Блин, на deathworld marathon пиздец какой-то. Начальные ресурсы прямо в упор к зергушатникам. Полчаса ныкался в ближайшем лесу. Отресёрчил турельки, построил парочку. С радости добавил ещё пару майнеров. Набежало штук 50 местных обитателей, кровь-кишки-гейм-овер. Какие тут логические цепи...
bormand 12.07.2019 00:57 # 0
TEH3OPHblu_nemyx 12.07.2019 01:00 # 0
guest8 11.07.2019 03:32 # −999
guest8 11.07.2019 03:50 # −999
guest8 11.07.2019 03:53 # −999
guest8 11.07.2019 04:07 # −999
guest8 11.07.2019 04:14 # −999
guest8 11.07.2019 04:30 # −999
guest8 11.07.2019 04:34 # −999
ykypeHHbIu_nemyx 11.07.2019 10:09 # 0
всегда так писал, проблем не было.
& - указывает на адрес объекта в памяти МК. Только так можно передавать структуру или массив в функцию и наоборот.
Вообще, это какие-то HAL-овские заморочки, в кококоторые я до конца не въехал. Начал осваивать данный МК месяц назад, ранее кокококодил под TI TMS320F280x и Миландровские камни.
SteadfastTinCock 11.07.2019 10:11 # −1
ykypeHHbIu_nemyx 11.07.2019 10:40 # 0
SteadfastTinCock 11.07.2019 10:56 # 0
guest8 11.07.2019 12:39 # −999
Louie_Louie 11.07.2019 11:28 # 0
guest8 11.07.2019 11:32 # −999
Louie_Louie 11.07.2019 11:41 # 0
guest8 11.07.2019 12:39 # −999
ykypeHHbIu_nemyx 11.07.2019 17:45 # 0
* ISO C Standard: 7.16 Boolean type and values <stdbool.h>
*/
#ifndef _STDBOOL_H
#define _STDBOOL_H
#ifndef __cplusplus
#define bool _Bool
#define true 1
#define false 0
#else /* __cplusplus */
/* Supporting <stdbool.h> in C++ is a GCC extension. */
#define _Bool bool
#define bool bool
#define false false
#define true true
#endif /* __cplusplus */
/* Signal that all the definitions are present. */
#define __bool_true_false_are_defined 1
#endif /* stdbool.h */
guest8 11.07.2019 17:48 # −999
Louie_Louie 12.07.2019 09:35 # +2
guest8 12.07.2019 22:44 # −999
guest8 12.07.2019 04:22 # −999
guest8 12.07.2019 04:37 # −999
ykypeHHbIu_nemyx 11.07.2019 10:13 # 0
Louie_Louie 11.07.2019 11:42 # 0
ykypeHHbIu_nemyx 11.07.2019 17:43 # 0
guest8 12.07.2019 22:50 # −999
TEH3OPHblu_nemyx 14.07.2019 09:18 # 0
guest8 11.07.2019 11:56 # −999
ykypeHHbIu_nemyx 11.07.2019 17:43 # 0
TEH3OPHblu_nemyx 12.07.2019 22:37 # 0
BoeHHblu_nemyx 12.07.2019 22:44 # 0
TEH3OPHblu_nemyx 12.07.2019 22:50 # 0