VladislavS 29 8 января, 2020 Опубликовано 8 января, 2020 · Жалоба У ТС там плата Nucleo. Светодиод у неё на PA5 висит. Кнопки на PA0-PA2 можно повесить. Тогда 95% курсовика будут вот так выглядеть. Осталось только в стартап вставить. RCC->AHBENR |= RCC_AHBENR_GPIOAEN; using KEY_A = PA_0; using KEY_B = PA_1; using KEY_C = PA_2; using LED = PA_5; ConfigList<PinMode::PushPull_LowSpeed<0>, LED, // светодиод PinMode::Input_PullUp, KEY_A, KEY_B, KEY_C, // Кнопки на GND PinMode::AF_PushPull_LowSpeed_PullUp<0x0>, PA_13, // PA13=SWDIO PinMode::AF_PushPull_LowSpeed_PullDown<0x0>, PA_14, // PA14=SWCLK PinMode::Input_Floating, CfgCmd::AllUnusedPins >::pwr_config(); LED Y; for(;;) { auto kyes = PinList<KEY_C, KEY_B, KEY_A>::read(); bool A = kyes&1 ? false : true; bool B = kyes&2 ? false : true; bool C = kyes&4 ? false : true; Y = (!A)*C + (!B)*(!C) + A*(!C); } Листинг //RCC->AHBENR |= RCC_AHBENR_GPIOAEN; LDR.N R0,??main_0 ;; 0x40021014 LDR R1,[R0, #+0] ORR R1,R1,#0x20000 STR R1,[R0, #+0] //ConfigList<PinMode::PushPull_LowSpeed<0>, LED, // светодиод // PinMode::Input_PullUp, KEY_A, KEY_B, KEY_C, // Кнопки на GND // PinMode::AF_PushPull_LowSpeed_PullUp<0x0>, PA_13, // PA13=SWDIO // PinMode::AF_PushPull_LowSpeed_PullDown<0x0>, PA_14, // PA14=SWCLK // PinMode::Input_Floating, CfgCmd::AllUnusedPins >::pwr_config(); MOV R0,#+1207959552 LDR.N R1,??main_0+0x4 ;; 0x28000400 LDR.N R2,??main_0+0x8 ;; 0x24000015 STR R1,[R0, #+0] STR R2,[R0, #+12] B.N ??main_1 //PA_5 Y; //for(;;) //{ // auto kyes = PinList<PA_2, PA_1, PA_0>::read(); // bool A = kyes&1 ? false : true; // bool B = kyes&2 ? false : true; // bool C = kyes&4 ? false : true; // Y = (!A)*C + (!B)*(!C) + A*(!C); ??main_2: LSRS R1,R1,#+2 AND R1,R1,#0x1 EOR R1,R1,#0x1 EOR R2,R2,#0x1 ANDS R2,R1,R2 EOR R1,R1,#0x1 ANDS R1,R3,R1 ORRS R1,R1,R2 ITE EQ MOVEQ R1,#+2097152 MOVNE R1,#+2097184 STR R1,[R0, #+24] ??main_1: LDR R1,[R0, #+16] AND R2,R1,#0x1 EOR R2,R2,#0x1 LSLS R3,R1,#+30 ITE MI MOVMI R3,#+1 MOVPL R3,R2 B.N ??main_2 DATA ??main_0: DATA32 DC32 0x40021014 DC32 0x28000400 DC32 0x24000015 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 187 8 января, 2020 Опубликовано 8 января, 2020 · Жалоба 6 минут назад, VladislavS сказал: У ТС там плата Nucleo. Светодиод у неё на PA5 висит. Кнопки на PA0-PA2 можно повесить. Тогда 90% курсовика будут вот так выглядеть. Осталось только в стартап вставить. ...Вот так и появляются потом неучи с дипломом. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
VladislavS 29 8 января, 2020 Опубликовано 8 января, 2020 · Жалоба Меньше конкуренции будет. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 187 8 января, 2020 Опубликовано 8 января, 2020 · Жалоба 12 минут назад, VladislavS сказал: Меньше конкуренции будет. Надеюсь, что препод тоже читает эту конфу. Тогда помогу ему с дополнительными вопросами по полученному исходнику: 1. Как модифицировать код, если нужно обеспечить его потокобезопасную работу? 2. Как модифицировать код, если нужно обеспечить атомарность чтений всех кнопок (при условии что они находятся на разных портах) и модификации Y? И как сделать это без использования запретов прерываний? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
VladislavS 29 8 января, 2020 Опубликовано 8 января, 2020 · Жалоба 3 минуты назад, jcxz сказал: Надеюсь, что препод тоже читает эту конфу. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
x893 35 8 января, 2020 Опубликовано 8 января, 2020 · Жалоба 6 minutes ago, jcxz said: Надеюсь, что препод тоже читает эту конфу. Тогда помогу ему с дополнительными вопросами по полученному исходнику: 1. Как модифицировать код, если нужно обеспечить его потокобезопасную работу? 2. Как модифицировать код, если нужно обеспечить атомарность чтений всех кнопок (при условии что они находятся на разных портах) и модификации Y? И как сделать это без использования запретов прерываний? И все изменения сохоанять в базе данных (на той же Nucleo) И что бы ещё при этом пела и танцевала народный танец Жок Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
VladislavS 29 8 января, 2020 Опубликовано 8 января, 2020 · Жалоба Чтобы задавать такие вопросы надо сначала этому научить. Судя по постановке задачи там этим и близко не пахнет. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
HardEgor 66 8 января, 2020 Опубликовано 8 января, 2020 · Жалоба 7 минут назад, VladislavS сказал: Чтобы задавать такие вопросы надо сначала этому научить. Судя по постановке задачи там этим и близко не пахнет. Нормальная постановка задачи. Тот кто учился и что-то пытается сделать идёт с вопросами к преподу или пишет на форум "а почему здесь так, а тут не так?" А остальные пишут по форумам "помогите ничего не понимаю". Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 187 8 января, 2020 Опубликовано 8 января, 2020 · Жалоба 3 часа назад, VladislavS сказал: Чтобы задавать такие вопросы надо сначала этому научить. Судя по постановке задачи там этим и близко не пахнет. Или студень накопил хвостов за весь семестр, и это задание - из начала семестра. А в конце уже дошли до многопоточности. А на защите лабораторных препод может задавать вопросы сразу по всему курсу за весь семестр. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
VladislavS 29 8 января, 2020 Опубликовано 8 января, 2020 · Жалоба 2 часа назад, jcxz сказал: Или студень накопил хвостов за весь семестр, и это задание - из начала семестра Это надо было вообще ни разу не появиться на занятиях, чтобы не знать какая у них там среда разработки. На самом деле, если разберётся в том что я там "напсевдокодил" уже плюс. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Obam 31 8 января, 2020 Опубликовано 8 января, 2020 · Жалоба Три входных переменных ==> восемь состояний ==> сдвиг 0x5B вправо на n, где n == ABC, даст в младшем разряде значение бита Y. Правильный "преп" от данного решения будет писать кипятком ;-) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Forger 17 8 января, 2020 Опубликовано 8 января, 2020 · Жалоба 33 minutes ago, Obam said: даст в младшем разряде значение бита Y. STM32F4 слабоват для такой задачи Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Сергей Борщ 120 8 января, 2020 Опубликовано 8 января, 2020 · Жалоба Ладно, хватит глумиться. Ivanyshka, как вы уже поняли, здесь не любят ленивых студентов. Попробуйте разместить свое задание в разделе "предлагаю работу", но шансов мало. 1 час назад, Obam сказал: сдвиг 0x5B вправо на n еще формулу запихнуть в макрос и расчет этого значения возложить на компилятор - будет шедевр и по форме и по содержанию. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
VladislavS 29 9 января, 2020 Опубликовано 9 января, 2020 · Жалоба Да, при удачном выборе пинов вообще кода с гулькин нос получается. constexpr bool Y(const uint8_t abc) { bool A = (abc&4) ? false : true; bool B = (abc&2) ? false : true; bool C = (abc&1) ? false : true; return (!A)*C + (!B)*(!C) + A*(!C); } constexpr uint8_t CalcShiftConst() { uint8_t ret=0; for(uint8_t i=0; i<8; i++) ret |= Y(i)<<i; return ret; } int main() { RCC->AHB1ENR = RCC_AHB1ENR_GPIOAEN; using KEY_A = PA_2; using KEY_B = PA_1; using KEY_C = PA_0; using LED = PA_5; LED Y; ConfigList<PinMode::PushPull_LowSpeed<0>, LED, // светодиод PinMode::Input_PullUp, KEY_A, KEY_B, KEY_C, // Кнопки на GND PinMode::AF_PushPull_LowSpeed_PullUp<0x0>, PA_13, // PA13=SWDIO PinMode::AF_PushPull_LowSpeed_PullDown<0x0>, PA_14, // PA14=SWCLK PinMode::Input_Floating, CfgCmd::AllUnusedPins >::pwr_config(); for(;;) { auto keys = PinList<KEY_A, KEY_B, KEY_C>::read(); Y = (CalcShiftConst() >> keys)&1; } } Листинг //RCC->AHB1ENR = RCC_AHB1ENR_GPIOAEN; LDR.N R1,??main_0 ;; 0x40023830 MOVS R0,#+1 STR R0,[R1, #+0] //ConfigList<PinMode::PushPull_LowSpeed<0>, LED, // светодиод // PinMode::Input_PullUp, KEY_A, KEY_B, KEY_C, // Кнопки на GND // PinMode::AF_PushPull_LowSpeed_PullUp<0x0>, PA_13, // PA13=SWDIO // PinMode::AF_PushPull_LowSpeed_PullDown<0x0>, PA_14, // PA14=SWCLK // PinMode::Input_Floating, CfgCmd::AllUnusedPins >::pwr_config(); LDR.N R0,??main_0+0x4 ;; 0x40020000 LDR.N R2,??main_0+0x8 ;; 0x28000400 LDR.N R1,??main_0+0xC ;; 0x24000015 STR R2,[R0, #+0] STR R1,[R0, #+12] MOVS R1,#+218 //for(;;) //{ // auto keys = PinList<KEY_A, KEY_B, KEY_C>::read(); ??main_1: LDR R2,[R0, #+16] AND R2,R2,#0x7 // Y = (CalcShiftConst() >> keys)&1; LSR R3,R1,R2 LSLS R2,R3,#+31 ITE PL MOVPL R2,#+2097152 MOVMI R2,#+2097184 STR R2,[R0, #+24] //} B.N ??main_1 DATA ??main_0: DATA32 DC32 0x40023830 DC32 0x40020000 DC32 0x28000400 DC32 0x24000015 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Ivanyshka 0 9 января, 2020 Опубликовано 9 января, 2020 · Жалоба В 08.01.2020 в 06:58, haker_fox сказал: Скажите, пожалуйста, а раз вам дают такие задания, разве не обучали работе с инструментарием? Мы все выполняли это задание на PIC в среде proteus , но я взял дополнительное задание с STM ,для решения которого ищу информацию Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться