Jump to content

    

VladislavS

Свой
  • Content Count

    695
  • Joined

  • Last visited

Community Reputation

0 Обычный

About VladislavS

  • Rank
    Знающий
  • Birthday 05/07/1976

Контакты

  • Сайт
    http://vsagunovs@gmail.com
  • ICQ
    0

Информация

  • Город
    Москва

Recent Profile Visitors

2487 profile views
  1. Scatter файл. Настройка доп. секции.

    А можно написать алгоритм прошивки в /dev/null и в Debug ветке выбрать его для прошивки внешней флэшь. :)
  2. А без танцев с бубнами в XXI веке можно? Просто пользоваться возможностями файловой системы. Я много хочу?
  3. Создание проекта на assembler в STM32F4

    Автор, а нам рассказать, сдался, не сдался, на чём валили? Хотя бы в качестве благодарности. Хрен с ним с этим спасибо, на хлеб его не мазнёшь.
  4. Создание проекта на assembler в STM32F4

    ТС пишет, что выбрал Keil для проекта. Посмотрим, поможет ли это ему :) Пусть хотя бы разберётся и то польза будет. AREA STACK, NOINIT, READWRITE, ALIGN=3 Stack_Mem SPACE 0x00000100 __initial_sp ; Vector Table AREA RESET, DATA, READONLY __Vectors DCD __initial_sp ; Top of Stack DCD Reset_Handler ; Reset Handler data_0 DCD 0x40023830 DCD 0x40020000 DCD 0x28000400 DCD 0x24000015 THUMB AREA |.text|, CODE, READONLY ; Reset handler Reset_Handler PROC ; RCC->AHB1ENR = RCC_AHB1ENR_GPIOAEN; LDR R1, data_0 MOVS R0,#+1 STR R0,[R1, #+0] ; Pins Config LDR R0,data_0+0x4 ;; 0x40020000 LDR R2,data_0+0x8 ;; 0x28000400 LDR R1,data_0+0xC ;; 0x24000015 STR R2,[R0, #+0] STR R1,[R0, #+12] MOVS R1,#+218 main_loop ; Read A=PA2, B=PA1, C=PA0 LDR R2,[R0, #+16] AND R2,R2,#0x7 ; PA5 = Y = (!A)*C + (!B)*(!C) + A*(!C); LSR R3,R1,R2 LSLS R2,R3,#+31 ITE PL MOVPL R2,#+2097152 MOVMI R2,#+2097184 STR R2,[R0, #+24] B main_loop ENDP END
  5. Создание проекта на assembler в STM32F4

    В ВУЗах софт обычно лицензионный - производитель подсаживает на свой продукт. Соответственно и выбора на чём делать у стьЮдентов особо и нет.
  6. Создание проекта на assembler в STM32F4

    Да, при удачном выборе пинов вообще кода с гулькин нос получается. 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
  7. Создание проекта на assembler в STM32F4

    Это надо было вообще ни разу не появиться на занятиях, чтобы не знать какая у них там среда разработки. На самом деле, если разберётся в том что я там "напсевдокодил" уже плюс.
  8. Создание проекта на assembler в STM32F4

    Чтобы задавать такие вопросы надо сначала этому научить. Судя по постановке задачи там этим и близко не пахнет.
  9. Создание проекта на assembler в STM32F4

    Меньше конкуренции будет.
  10. Создание проекта на assembler в STM32F4

    У ТС там плата 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
  11. Создание проекта на assembler в STM32F4

    Это если сильно неоптимально писать. Пины то могут быть на одном порту и тупо лишних чтений порта не надо делать.
  12. Создание проекта на assembler в STM32F4

    Берём С++ и лёгким движением руки получаем половину курсовика :) Осталось вставить это в стандартный стартап, включить тактирование портов и настроить Y на выход. bool A = PA_0::read(); bool B = PB_0::read(); bool C = PC_0::read(); PD_0 Y; Y = (!A)*C + (!B)*(!C) + A*(!C); // Листинг //bool A = PA_0::read(); LDR.N R2,??main_0 ;; 0x48000010 LDR R3,[R2, #+0] //bool B = PB_0::read(); LDR R4,[R2, #+1024] //bool C = PC_0::read(); LDR R5,[R2, #+2048] //PD_0 Y; //Y = (!A)*C + (!B)*(!C) + A*(!C); AND R6,R3,#0x1 AND R4,R4,#0x1 AND R0,R5,#0x1 EOR R6,R6,#0x1 AND R1,R5,#0x1 ORRS R4,R0,R4 AND R5,R5,#0x1 ANDS R6,R1,R6 EOR R4,R4,#0x1 AND R3,R3,#0x1 EOR R5,R5,#0x1 ORRS R4,R4,R6 ANDS R3,R5,R3 ORRS R3,R3,R4 ITE NE MOVNE R0,#+65537 MOVEQ R0,#+65536 STR R0,[R2, #+3080] Замечу лишь, что выбор других пинов под A,B,C,Y меняют код полностью. Это делает написание подобного кода на асме дурной работой.
  13. IAR 8.2 STM32 Breakpoint

    Объясните цель, зачем это в вашем случае нужно? Для отладки можно просто скомпилировать код в RAM и не использовать flash совсем. Для прошивки flash из кода достаточно пометить функцию-прошивальщик как __ramfunc. Чего вы добиваетесь копированием почти всего кода в RAM? В микроконтроллерах STM32 код из flash выполняется ни чуть не хуже. Разве что с целью экономить энергию отключением тактирования flash, но что-то мне подсказывает, что это не ваш случай.
  14. IAR 8.2 STM32 Breakpoint

    Ну потому что это глупость. Нужно либо просто ROM_region прописать по адресам RAM, либо сделать place in RAM_region { readonly , readwrite }; Загружать код в RAM будет либо отладчик для отладки, либо загрузчик в штатном режиме. И вообще, для отладки один icf, для релиза другой.