1) Why would you want to do so
2) Looking at your code, I can see a lot of misinformation and
gotchas
3) Start with either programming in assembler or programming in C.
Calling assembler from C is something, that is rarely needed.
But calling a C function from assembler is something you will not
want to do.
4) you cannot include a C-code file into assembler. The assembler
translates assembler code. Translating C-code files is the job
of the compiler, not the assembler. The output of both independent
jobs is then linked together to form the entire executable.
5) One calls functions, not files.
Your function is named 'main', not 'test_c'
6) If you want to mix assembler with C, you have to play by the
rules. The rules are made by the compiler, not by yourself.
So you have to take care about things like register usage and
stack calling conventions.
7) If, as a C programmer, you feel the need to do something in
assembler, step back and look again.
While there are sometimes things, that should be done in assembler
for speed reasons, those things are seldome necessary but often
show a lack of C or algorithmic knowledge. Those reasons often
circle around pushing/poping registers in ISR-functions. Other
then that, there seldom is a need for writing something in assembler
when writing C programs.
But when you do, it is most of the time: C calls assembler and
not the other way round.
8) If you feel the need, that you have to do things before main starts,
(in avr-gcc) there are documented functions you can inherit, which
are called during the C-runtime startup process and which are the
correct places you can hook into the startup process.