Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Лабораторная 3

.docx
Скачиваний:
0
Добавлен:
15.12.2025
Размер:
431.23 Кб
Скачать

Министерство науки и высшего образования Российской Федерации

Федеральное государственное автономное образовательное учреждение высшего образования

ТОМСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ СИСТЕМ УПРАВЛЕНИЯ И РАДИОЭЛЕКТРОННИКИ (ТУСУР)

Кафедра комплексной информационной безопасности электронно-вычислительных систем (КИБЭВС)

ОСНОВЫ СБОРКИ ПРОЕКТА

Отчет по лабораторной работе №3

по дисциплине «Основы программирования микроконтроллеров»

Студенты гр. 712-2: ___________ Л.С. Болтушкин

___________ Н.А. Рыбин

___________ Д.В. Шабанова __________

Руководитель Старший преподаватель кафедры КИБЭВС

_______ __________ Д.С. Беляков

__________

Томск 2025

Введение

Целью данной лабораторной работы является углубленное изучение архитектуры ARM на примере микроконтроллера STM32F103RBT6, знакомство с основами сборки проекта под ядро Cortex-M3, исследование и модификация содержимого startupи ld-файлов, разработка make-скрипта для автоматической генерации файла прошивки.

1 ХОД РАБОТЫ

На рисунке 1.1 представлены все файлы, которые были использованы в процессе выполнения лабораторной работы.

Рисунок 1.1 – Файлы архива

Листинг файла «stm_f103.ld» представлен в Приложении А.

Далее был написан код на «С» по варианту №5 - Функция operate() выводит разницу между первым и последним числом массива. Результаты работы программы представлен на рисунке 1.2.

Листинг кода представлен в Приложении Б.

Рисунок 1.2 – Результат работы программы

На рисунке 1.3 представлен Makefile.

Рисунок 1.3 – Makefile

На рисунке 1.4 представлено сравнение итоговой сборки с разным ld-файлами.

Рисунок 1.4 – Сравнение итоговых сборок

Заключение

В ходе выполнения данной лабораторной работы было проведено углубленное изучение архитектуры ARM на примере микроконтроллера STM32F103RBT6, знакомство с основами сборки проекта под ядро Cortex-M3, исследование и модификация содержимого startup- и ld-файлов, разработка make-скрипта для автоматической генерации файла прошивки.

Приложение А

(обязательное)

Листинг файла «stm_f103.ld»

ENTRY(Reset_Handler)

_estack = 0x20004FFF; /* STM32F103RB имеет 20 КБ RAM */

_Min_Heap_Size = 0x200;

_Min_Stack_Size = 0x400;

MEMORY

{

FLASH (rx) : ORIGIN = 0x08000000, LENGTH = 128K

RAM (xrw) : ORIGIN = 0x20000000, LENGTH = 20K

}

SECTIONS

{

.isr_vector :

{

. = ALIGN(4);

KEEP(*(.isr_vector))

. = ALIGN(4);

} >FLASH

.text :

{

. = ALIGN(4);

*(.text)

*(.text*)

KEEP(*(.init))

KEEP(*(.fini))

. = ALIGN(4);

_etext = .;

/* <<< отступ ровно 100 байт после кода >>> */

. = . + 100;

} >FLASH

/* конец .text + 100 байт пустоты */

.rodata :

{

. = ALIGN(4);

*(.rodata)

*(.rodata*)

. = ALIGN(4);

} >FLASH

_sidata = LOADADDR(.data);

.data :

{

. = ALIGN(4);

_sdata = .;

*(.data)

*(.data*)

. = ALIGN(4);

_edata = .;

} >RAM AT>FLASH

.bss :

{

. = ALIGN(4);

_sbss = .;

bss_start = _sbss;

*(.bss)

*(.bss*)

*(COMMON)

. = ALIGN(4);

_ebss = .;

bss_end = _ebss;

} >RAM

._user_heap_stack :

{

. = ALIGN(8);

PROVIDE(end = .);

PROVIDE(_end = .);

. = . + _Min_Heap_Size;

. = . + _Min_Stack_Size;

. = ALIGN(8);

} >RAM

/DISCARD/ :

{

libc.a ( * )

libm.a ( * )

libgcc.a ( * )

}

}

Приложение Б

(обязательное)

Листинг файла «lab3_f103.c»

#include <stddef.h>

#include <stdio.h>

void operate(int* buff_in, size_t len_in)

{

// Проверка входных данных

if (!buff_in) {

fprintf(stderr, "Ошибка: входной массив равно NULL\n");

return;

}

int first = buff_in[0];

int last = buff_in[len_in-1];

int res = first-last;

printf(": ");

printf("%d", res);

}