cpputest на STM8 не удалось из-за нескольких основных

Я хочу использовать cpputest на STM8 и установить все необходимые инструменты для него.
Я могу запустить cpputest на моем упрощенном коде.
в моем главном файле, который принадлежит аппаратному обеспечению, у меня есть, конечно, основная функция. Но в тестовой среде у меня есть главная функция и под AllTests.cpp. Когда я компилирую это, я получаю ошибку:

multiple definition of `main'

Еще одна проблема, с которой я сталкиваюсь: я компилирую код для 8-битного процессора и использую библиотеку. <stdint.h>, так что мой основной файл имеет строку uint8_t main(){ , Компилятору cpputest это совсем не нравится …

У кого-нибудь есть идеи как это исправить?

файлы:

blinky.h:

#ifndef BLINKY_H
#define BLINKY_H

#include "stm8l.h"#include <stdint.h>

uint16_t blink(void);

#endif

blinky.c

#include "blinky.h"

uint16_t blink(){
PD_DDR = 0x1;
PD_CR1 = 0x1;
return 1;
}
uint8_t main() {
// Configure pins
while(1){
// Loop
blink();
}
}

test.cpp:

#include "CppUTest/TestHarness.h"
extern "C"{
#include "blinky.h"}

TEST_GROUP(FirstTestGroup)
{
void setup()
{
}

void teardown()
{
}
};

TEST(FirstTestGroup, test1)
{
LONGS_EQUAL(1, blink());
}

AllTest.cpp:

#include "CppUTest/CommandLineTestRunner.h"
int main(int ac, char** av)
{
return CommandLineTestRunner::RunAllTests(ac, av);
}

Makefile:

#Set this to @ to keep the makefile quiet
SILENCE = @

#---- Outputs ----#
COMPONENT_NAME = blinky

#--- Inputs ----#
PROJECT_HOME_DIR = .
ifeq "$(CPPUTEST_HOME)" ""CPPUTEST_HOME = ~/tools/cpputest
endif

# --- SRC_FILES ---
# Use SRC_FILES to specifiy individual production
# code files.
# These files are compiled and put into the
# ProductionCode library and links with the test runner
SRC_FILES = src/blinky.c

# --- SRC_DIRS ---
# Use SRC_DIRS to specifiy production directories
# code files.
# These files are compiled and put into a the
# ProductionCode library and links with the test runner
SRC_DIRS = \
platform

# --- TEST_SRC_FILES ---
# TEST_SRC_FILES specifies individual test files to build.  Test
# files are always included in the build and they
# pull in production code from the library
TEST_SRC_FILES = \

# --- TEST_SRC_DIRS ---
# Like TEST_SRC_FILES, but biulds everyting in the directory
TEST_SRC_DIRS = \
tests \
#tests/blinky \
#tests/io-cppumock \
#tests/exploding-fakes \
#tests \
#tests/example-fff \
#tests/fff \
# --- MOCKS_SRC_DIRS ---
# MOCKS_SRC_DIRS specifies a directories where you can put your
# mocks, stubs and fakes.  You can also just put them
# in TEST_SRC_DIRS
MOCKS_SRC_DIRS = \

# Turn on CppUMock
CPPUTEST_USE_EXTENSIONS = Y

INCLUDE_DIRS =\
.\
$(CPPUTEST_HOME)/include/ \
$(CPPUTEST_HOME)/include/Platforms/Gcc \
platform \
src \
include \
#example-fff \
#test/exploding-fakes \
#tests/fff#STM8DIR

#SDCC_DIR :=$(CPPUTEST_HOME)/../sdcc/
#CC       :=@$(SDCC_DIR)/bin/sdcc
# --- CPPUTEST_OBJS_DIR ---
# if you have to use "../" to get to your source path
# the makefile will put the .o and .d files in surprising
# places.
# To make up for each level of "../", add place holder
# sub directories in CPPUTEST_OBJS_DIR
# each "../".  It is kind of a kludge, but it causes the
# .o and .d files to be put under objs.
# e.g. if you have "../../src", set to "test-objs/1/2"# This is set no "../" in the source path.
CPPUTEST_OBJS_DIR = test-obj

CPPUTEST_LIB_DIR = test-lib
CPPUTEST_WARNINGFLAGS += -Wall
CPPUTEST_WARNINGFLAGS += -Werror
CPPUTEST_WARNINGFLAGS += -Wswitch-default
CPPUTEST_WARNINGFLAGS += -Wfatal-errors
CPPUTEST_CXXFLAGS = -Wno-c++14-compat
CPPUTEST_CFLAGS = -std=c99
CPPUTEST_CXXFLAGS += $(CPPUTEST_PLATFORM_CXXFLAGS)
CPPUTEST_CFLAGS += -Wno-missing-prototypes
CPPUTEST_CXXFLAGS += -Wno-missing-variable-declarations
# --- LD_LIBRARIES -- Additional needed libraries can be added here.
# commented out example specifies math library
#LD_LIBRARIES += -lm

# Look at $(CPPUTEST_HOME)/build/MakefileWorker.mk for more controls

include $(CPPUTEST_HOME)/build/MakefileWorker.mk

0

Решение

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

Моя структура выглядит так:
main.c:
— содержит включения из прошивки (app.h) и main () с помощью run_app ()
app.c:
содержит все прошивки и протестирован с cpputest

0

Другие решения

Других решений пока нет …