Jump to content

    

Создание проекта на assembler в STM32F4

добрый вечер, не знаю с чего начать создание проекта STM32F401 на ассемблере. Необходимо реализовать функцию матлогики Y=(!A)*C+(!B)*(!C)+ A*(!C) , где в качестве выходного сигнала выступает сигнал Y (светодиод) и входныесигналы А, В, С (подключаемые кнопки ) 

93EEA387-2BB4-41CF-B3F9-23057F6843EE.jpeg

Share this post


Link to post
Share on other sites
27 minutes ago, Ivanyshka said:

 начать создание проекта STM32F401 на ассемблере.

На этом и закончить или пишите на С/С++.

Share this post


Link to post
Share on other sites
1 minute ago, Ivanyshka said:

В ТЗ сказано, что надо на  ассемблерЕ

 

Курсач? Типак?

Share this post


Link to post
Share on other sites

Пишите на С, потом компилятор сделает ассемблерный код.

Share this post


Link to post
Share on other sites
6 hours ago, Ivanyshka said:

добрый вечер, не знаю с чего начать создание проекта STM32F401 на ассемблере.

Скажите, пожалуйста, а раз вам дают такие задания, разве не обучали работе с инструментарием?

Ну вот, поглядите)

Share this post


Link to post
Share on other sites

Это стандартное задание, во все времена это было на разных камнях. Там никто не будет ничего проверять и чего-то загружать, надо просто сделать инициализацию, написать эту формулу на ассемблере, суметь объяснить почему, как, куда и всего делов.

Share this post


Link to post
Share on other sites
2 hours ago, s_gary said:

Там никто не будет ничего проверять

Вот сие и есть плохо... то, что это стандартный пример - понятно. Но потом такой соискатель придёт на реальную работу, и... ничего сделать не сможет) Хотя, может быть я слишком категоричен)

Share this post


Link to post
Share on other sites
18 минут назад, haker_fox сказал:

Вот сие и есть плохо... то, что это стандартный пример - понятно. Но потом такой соискатель придёт на реальную работу, и... ничего сделать не сможет)

...и станет вашим начальником. Потому что сам разрабатывать не умеет, значит пойдёт руководить.  :yes3:

Share this post


Link to post
Share on other sites
9 minutes ago, jcxz said:

 Потому что сам разрабатывать не умеет, значит пойдёт руководить.  :yes3:

На кой нужен такой руководитесь, если даже для такой примитивной задачи не может найти исполнителя :don-t_mention:

Share this post


Link to post
Share on other sites

Берём С++ и лёгким движением руки получаем половину курсовика :) Осталось вставить это в стандартный стартап, включить тактирование портов и настроить 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 меняют код полностью. Это делает написание подобного кода на асме дурной работой. 

 

Share this post


Link to post
Share on other sites
2 часа назад, VladislavS сказал:

Замечу лишь, что выбор других пинов под A,B,C,Y меняют код полностью. Это делает написание подобного кода на асме дурной работой. 

Если делать с умом да с использованием макросов (а например в IAR-овском ассемблере макроязык богаче си-шного), то ничего страшного. И можно написать код, который скорей всего никак не будет меняться со сменой пинов.

Share this post


Link to post
Share on other sites
8 минут назад, jcxz сказал:

И можно написать код, который скорей всего никак не будет меняться со сменой пинов.

Это если сильно неоптимально писать. Пины то могут быть на одном порту и тупо лишних чтений порта не надо делать.

Share this post


Link to post
Share on other sites

Тупо вообще не надо делать.

Share this post


Link to post
Share on other sites
7 минут назад, VladislavS сказал:

Это если сильно неоптимально писать. Пины то могут быть на одном порту и тупо лишних чтений порта не надо делать.

И это тоже можно в макросе предусмотреть и не делать лишних чтений если порт совпадает, а использовать старое значение из регистра.

Хотя для студенческого задания это уже избыточно будет.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now