сбой зависит от компилятора, который происходит до основного
Я работаю над проектом со встроенным устройством на базе процессора ARM. Я компилирую следующий код с GCC и RVCT5
С GCC у меня нет предупреждения компилятора и программа работает без проблем.
С RVCT5 у меня также нет предупреждения компилятора, но программа вылетает в цикле
Я изолировал аварию, но я не догадывался о ее разрешении.
RVCT5, похоже, не может разрешить адрес функции обратного вызова, которую мне нужно передать в качестве аргумента функции.
main.c
#include "net_test.h"
void main( int argc, char **argv )
{
printf("TASK1 %p \r\n",&msgTask1); //this is ok
//printf("TASK2 %p \r\n",&msgTask2); //this crashes
}
net.c
#include "net_test.h"
INT32 msgTask1(INT32 type, INT32 param1, INT32 param2)
{
//omissis
}
parser.c
#include "net_test.h"
INT32 msgTask2(INT32 type, INT32 param1, INT32 param2)
{
//omissis
}
net_test.h
INT32 msgTask1(INT32 type, INT32 param1, INT32 param2);
INT32 msgTask2(INT32 type, INT32 param1, INT32 param2);
Если в моем коде я раскомментирую строку, печатающую адрес msgTask2, программа не сможет даже запустить основной. Это может быть продемонстрировано как потому, что я не вижу строки для msgTask1, так и с помощью аппаратного отладчика ARM, приложение переходит к перехвату вектора, но указатель инструкции не ссылается на основной.
С моей точки зрения, есть некоторая ошибка при инициализации функции. Я кое-что прочитал о фиаско статического порядка инициализации, но не знаю, так ли это. Я объявляю функции внутри заголовка, который включен в оба исходных файла.
Я подумал, что это может быть проблемой, связанной с заполнением памяти, и попытался увеличить размер стека, доступного для приложения. Я также пытался закомментировать часть кода, чтобы достичь стабильного состояния, но ничего не получалось.
Любая подсказка о том, что я мог бы расследовать?
На данный вопрос пока никто не ответил
Посмотрите похожие вопросы:
Посмотрите другие вопросы по меткам c gcc arm embedded или Задайте вопрос