Перейти к содержанию
    

В 05.01.2024 в 12:22, RusikOk сказал:

как можно это исправить?

добавить (NOLOAD) не в bss, а в те секции, которые не должны попасть в hex

  .SPIbufSection (NOLOAD): { *(.SPIbuf) } >Memory_B0
  .RxDecripSection (NOLOAD): { *(.RxDescripSection) } >Memory_B1
  .TxDescripSection (NOLOAD): { *(.TxDescripSection) } >Memory_B2
  .RxarraySection (NOLOAD): { *(.RxBUF) } >Memory_B3
  .TxarraySection (NOLOAD): { *(.TxBUF) } >Memory_B4 

Ну и вроде как звёздочки не хватает.

.SPIbufSection (NOLOAD): { *(.SPIbufSection*) } >Memory_B0

У меня так секция ОЗУ описана

/* Memories definition */
MEMORY
{
  CCMRAM    (xrw)    : ORIGIN = 0x10000000,   LENGTH = 64K
  RAM    (xrw)    : ORIGIN = 0x20000000,   LENGTH = 192K
  FLASH    (rx)    : ORIGIN = 0x8000000,   LENGTH = 1024K
  SDRAM (xrw)         : ORIGIN = 0xC0000000, LENGTH = 4M 
}

.....

  .ARM.attributes 0 : { *(.ARM.attributes) }
  
  /* External RAM section */
    .sdram (NOLOAD):
    {
          *(.sdram*);
    } >SDRAM

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

STM32CubeIDE. Есть структура, расположенная не в main.c, скажем, такая

typedef struct {
  uint8_t family;
  uint8_t code[MAXDEVICES_ON_THE_BUS];
  uint8_t crc;
} RomCode; //

В отладчике хочу посмотреть её содержание. Так понимаю, что в main.c её надо определить как глобальную. Вот тут у меня и затыка - не получается, с синтаксисом явно не дружу. А, может, вообще как то это надо решать по другому. Помогите, пожалуйста, бывшему депутату государственной думы. 

Изменено пользователем Юрий48

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

typedef struct {
  uint8_t family;
  uint8_t code[MAXDEVICES_ON_THE_BUS];
  uint8_t crc;
} RomCode; //

RomCode romCode;//можно проинициализировать вот так = {.family = 1, .crc = 0xCA};

void main(void)
{
  for(;;)
  {
    asm("nop");
  }
}

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

9 часов назад, Юрий48 сказал:

Есть структура, расположенная не в main.c

А где она расположена? И что вы понимаете под термином "расположена"? И что значит "есть структура"? В приведенном вами коде есть объявление типа. Ни объявления (declaration), ни определения (definition) переменной, способной хранить этот тип, мы не видим (https://www.cprogramming.com/declare_vs_define.html). 

9 часов назад, Юрий48 сказал:

с синтаксисом явно не дружу.

Откройте для себя заголовочные (header) файлы. Описание структуры вам нужно поместить в такой файл и включить этот файл в main.c и в тот файл, где определена переменная с типом этой структуры. Объявление переменной можно поместить либо в заголовочный файл либо в main.c.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

В 19.01.2024 в 10:11, Сергей Борщ сказал:

А где она расположена? И что вы понимаете под термином "расположена"? И что значит "есть структура"? В приведенном вами коде есть объявление типа. Ни объявления (declaration), ни определения (definition) переменной, способной хранить этот тип, мы не видим

Теперь понимаю, что вопросы совершенно резонные. Нашёл где дано определение или объявление (пока ещё не знаю как правильно) и в отладчике смог посмотреть что в них.  Спасибо за ссылки, буду постепенно разбираться, а то, конечно, стыдоба - и вопрос правильно задать не могу. Хотя если бы я мог задать его правильно, то и задавать бы его было не надо.

Изменено пользователем Юрий48

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Приветствую!

Использую  STM32CubeIDE ver.1.13.1

Сталкнулся с такой проблемой. Есть проектик, он нормально компилиться. 

Но при добавлении файла с кодом и его хидера (user_lib.c  и user_lib.h), начинает ругаться на совершенно другой хидер (extend_typedef.h)

extend_typedef.h добавляется в исходники:

main.c

stm32f1xx_it.c

program.c

и добавляемый файл:   user_lib.c

 

Файл user_lib.c :

#include "stm32f1xx_it.h"
#include "extend_typedef.h"

u32 beg_time, sdelay=0;
u8 bgtim_stat=0;

/*------------------------------------------------------------------------------------------------*/
/*	start software background timer (bgtimer)   */
/*  delay in ms  */
void start_bgtimer(u32 delay)
{
	beg_time=stCounter;
	sdelay = delay;
	bgtim_stat=1;
}

/*------------------------------------------------------------------------------------------------*/
/*	if program bgtimer not elapsed = 1  */
/*  else =0                         */
u8 check_bgtimer(void)
{
	if (bgtim_stat)	if ((stCounter - beg_time)>=sdelay )  bgtim_stat=0;
	return bgtim_stat;
}

Файл user_lib.h :

#ifndef USER_LIB_H_
#define USER_LIB_H_

void start_bgtimer(u32);
u8 check_bgtimer(void);

#endif /* USER_LIB_H_ */

 

Когда удаляю эти два файла из проекта, проблема исчезает.

Думаю может я чтото незнаю про использование структуры программы по куб ?   Кто что может подсказать ?

 

stm32cube_error.jpg

Изменено пользователем MaxiMuz

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...