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

 
 
> Инициализация указателей
Tolas
сообщение Dec 11 2014, 09:10
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 53
Регистрация: 14-11-10
Пользователь №: 60 881



Здравствуйте.
Имеется следующий код:
Код
void a(void)
{
    printf("a");
}
typedef void function(void);
function *ptr_funca = a;
int main(void)
{
    if (a != ptr_funca)
    {
               printf("!");
    }
}


Данный код, скомпилированный под архитектуру i386, не печатает восклицательный знак, а под архитектуру Cortex-M3 "печатает".
Если сделать указатель на функцию или саму функцию статичными, то всё становится нормально. Под i386 компиляция происходит чистым gcc, под Cortex - arm-none-eabi-gcc. В чём может быть подвох?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Tolas
сообщение Dec 15 2014, 14:11
Сообщение #2


Участник
*

Группа: Участник
Сообщений: 53
Регистрация: 14-11-10
Пользователь №: 60 881



Сократив ld-скрипт до вида
CODE

MEMORY
{
RAM (xrw) : ORIGIN = 0x20000000, LENGTH = 20K
FLASH (rx) : ORIGIN = 0x08000000, LENGTH = 128K
}

_estack = ORIGIN(RAM) + LENGTH(RAM);

ENTRY(Reset_Handler)

SECTIONS
{
.isr_vector :
{
. = ALIGN(4);
KEEP(*(.isr_vector)) /* Interrupt vectors */

KEEP(*(.cfmconfig)) /* Freescale configuration words */

*(.after_vectors .after_vectors.*) /* Startup code and ISR */

. = ALIGN(4);
} >FLASH

.text : { *(.text*) } > FLASH
.bss : { *(.bss*) } > RAM
}


Указатели стали работать верно. Reset_Handler выглядит

CODE

void __attribute__ ((section(".after_vectors"),naked))
Reset_Handler(void)
{
asm volatile
(
" b main \n"
:
:
:
);
}


Цитата
Вообще-то для начала неплохо было бы посмотреть на адреса, хранящиеся в этих указателях.

Единственное что можно сказать что этот указатель не NULL и не указывает на функцию.

Цитата
Такая проблема только с указателями, или и с другими глобальными переменными?

Со всеми глобальными переменными.
Go to the top of the page
 
+Quote Post



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

 


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


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