реклама на сайте
подробности

 
 
> Динамическое выделение памяти в SDRAM, STM32F4
Atlantis-
сообщение Nov 19 2014, 12:52
Сообщение #1


Местный
***

Группа: Участник
Сообщений: 491
Регистрация: 18-05-11
Пользователь №: 65 102



Здравствуйте!
Можно ли динамически с помощью функции malloc() выделять память во внешней памяти SDRAM?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Atlantis-
сообщение Nov 21 2014, 08:15
Сообщение #2


Местный
***

Группа: Участник
Сообщений: 491
Регистрация: 18-05-11
Пользователь №: 65 102



адрес правильный возвращает, но при попытке инициализировать больше 2 050 000 элементов вылетает в хардфаулт
делаю так
Код
    uint32_t *p = NULL;
    uint32_t *p1 = NULL;
    uint32_t Test =0;

        p = malloc(8000000);//выделил 8 000 000 байт

        Test = (uint32_t)p;//адрес получается 0xD0000008

        for (int i=0; i < 2100000; i++)//улетает в хардфаулт, если i<2 050 000 то не улетает
        {
            p[i] = 4;
        }
Go to the top of the page
 
+Quote Post
scifi
сообщение Nov 21 2014, 08:21
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 3 020
Регистрация: 7-02-07
Пользователь №: 25 136



Цитата(Atlantis- @ Nov 21 2014, 11:15) *
адрес правильный возвращает, но при попытке инициализировать больше 2 050 000 элементов вылетает в хардфаулт

Что-то я не пойму, выход за границу массива - это так и задумано? Или вы просто не в курсе, что элемент с номером 2050000 - это байт с номером 8200000?
Go to the top of the page
 
+Quote Post
Atlantis-
сообщение Nov 21 2014, 08:55
Сообщение #4


Местный
***

Группа: Участник
Сообщений: 491
Регистрация: 18-05-11
Пользователь №: 65 102



Цитата(scifi @ Nov 21 2014, 11:21) *
Что-то я не пойму, выход за границу массива - это так и задумано? Или вы просто не в курсе, что элемент с номером 2050000 - это байт с номером 8200000?

не в курсе. теперь разобрался. из-за того что *p у меня uint32_t выделяется по 4 байта а не по одному

по теме - вот что на форуме my.st посоветовали по настройке heap
CODE

// STM32 Keil SDRAM HEAP STM32F429I-DISCO - sourcer32@gmail.com

// Use MicroLIB checked in options
// Use Scatter file in Linker options (not Memory Layout from Target Dialog)

/* heap.sct

LR_IROM1 0x08000000 0x00200000 { ; load region size_region
ER_IROM1 0x08000000 0x00200000 { ; load address = execution address
*.o (RESET, +First)
*(InRoot$$Sections)
.ANY (+RO)
}
RW_IRAM1 0x20000000 0x00030000 { ; Internal SRAM
.ANY (+RW +ZI)
}
RW_IRAM2 0x10000000 UNINIT 0x00010000 { ; Internal CCM SRAM
*(.ccm)
}
RW_RAM1 0xD0000000 UNINIT 0x00800000 { ; External SDRAM
*(HEAP)
}
}

*/

/* startup_stm32f429_439xx.s
...
Heap_Size EQU 0x00800000

AREA HEAP, NOINIT, READWRITE, ALIGN=3
__heap_base
Heap_Mem SPACE Heap_Size
__heap_limit
...
*/

#include <stdio.h>
#include <stdlib.h>

#include "stm32f429i_discovery.h"
#include "stm32f429i_discovery_sdram.h"

/********************************************************************************
******/

int main(void)
{
char *p;

/* Make sure to initialize the external memory, pins and buses before using them */

/* SDRAM Initialization */
SDRAM_Init();

/* Disable write protection */
FMC_SDRAMWriteProtectionConfig(FMC_Bank2_SDRAM,DISABLE);

p = malloc(0x1000);

printf("Allocation at %p\n", p);

free(p);

while(1); // Don't want to exit
}

//******************************************************************************
// Hosting of stdio functionality through SWV - Serial Wire Viewer
//******************************************************************************

#include <rt_misc.h>

#pragma import(__use_no_semihosting_swi)

struct __FILE { int handle; /* Add whatever you need here */ };
FILE __stdout;
FILE __stdin;

int fputc(int ch, FILE *f)
{
ITM_SendChar(ch);

return(ch);
}

int fgetc(FILE *f)
{
char ch;

ch = '?';

return((int)ch);
}

int ferror(FILE *f)
{
/* Your implementation of ferror */
return EOF;
}

void _ttywrch(int ch)
{
ITM_SendChar(ch);
}

void _sys_exit(int return_code)
{
label: goto label; /* endless loop */
}


#ifdef USE_FULL_ASSERT
/**
* @brief Reports the name of the source file and the source line number
* where the assert_param error has occurred.
* @param file: pointer to the source file name
* @param line: assert_param error line source number
* @retval None
*/
void assert_failed(uint8_t* file, uint32_t line)
{
/* User can add his own implementation to report the file name and line number,
ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */

/* Infinite loop */
while (1)
{
}
}
#endif


Сейчас вроде все работает. Большое спасибо Golikov A. за помощь!

Сообщение отредактировал Atlantis- - Nov 21 2014, 09:01
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Atlantis-   Динамическое выделение памяти в SDRAM   Nov 19 2014, 12:52
- - Golikov A.   можно если договоритесь с линкером там разместить ...   Nov 19 2014, 13:03
|- - Atlantis-   Цитата(Golikov A. @ Nov 19 2014, 16:03) м...   Nov 19 2014, 13:15
- - Golikov A.   вот выписка из их хелпа ЦитатаCreating the heap f...   Nov 19 2014, 15:05
|- - Atlantis-   то есть startup файл не трогать, а после настройки...   Nov 19 2014, 15:34
- - Golikov A.   вам надо сделать scater файл на закладе линкер ест...   Nov 19 2014, 15:55
- - Atlantis-   Если во вкладке Linker снять галочку Use Memory La...   Nov 20 2014, 07:31
- - Golikov A.   насколько я помню в стартап файле параметры кучи з...   Nov 20 2014, 07:47
- - Atlantis-   в стартапе вот что Код; <h> Heap Configura...   Nov 20 2014, 08:06
- - Golikov A.   ну то есть не победа. проверьте {} скобочки в ск...   Nov 20 2014, 08:49
|- - Atlantis-   Цитата(Golikov A. @ Nov 20 2014, 11:49) н...   Nov 20 2014, 09:54
- - Golikov A.   в хелпе было написано что в скатере надо определят...   Nov 20 2014, 12:33
|- - Atlantis-   Цитата(Golikov A. @ Nov 20 2014, 15:33) в...   Nov 20 2014, 13:17
- - Golikov A.   там написано что можно задать эти переменные в асм...   Nov 20 2014, 13:51
|- - Atlantis-   определил в стартапе Код;************************...   Nov 20 2014, 14:12
- - Golikov A.   Кодint *Pointer = 0; int A = 0; Pointer = malloc...   Nov 20 2014, 15:40
- - jcxz   Цитата(scifi @ Nov 21 2014, 14:21) Что-то...   Nov 21 2014, 08:39


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 6th September 2025 - 12:26
Рейтинг@Mail.ru


Страница сгенерированна за 0.01318 секунд с 7
ELECTRONIX ©2004-2016