manually merged with ARM version
This commit is contained in:
1
x502api-1.1.34/lib/lcspec/cvi/lcspec_pack_restore.h
Normal file
1
x502api-1.1.34/lib/lcspec/cvi/lcspec_pack_restore.h
Normal file
@ -0,0 +1 @@
|
||||
#pragma pack()
|
||||
1
x502api-1.1.34/lib/lcspec/cvi/lcspec_pack_start.h
Normal file
1
x502api-1.1.34/lib/lcspec/cvi/lcspec_pack_start.h
Normal file
@ -0,0 +1 @@
|
||||
#pragma pack(1)
|
||||
1
x502api-1.1.34/lib/lcspec/gcc/lcspec_align.h
Normal file
1
x502api-1.1.34/lib/lcspec/gcc/lcspec_align.h
Normal file
@ -0,0 +1 @@
|
||||
__attribute__ ((__aligned__ (LSPEC_ALIGNMENT)))
|
||||
1
x502api-1.1.34/lib/lcspec/gcc/lcspec_interrupt.h
Normal file
1
x502api-1.1.34/lib/lcspec/gcc/lcspec_interrupt.h
Normal file
@ -0,0 +1 @@
|
||||
__attribute__ ((__interrupt__))
|
||||
0
x502api-1.1.34/lib/lcspec/gcc/lcspec_pack_restore.h
Normal file
0
x502api-1.1.34/lib/lcspec/gcc/lcspec_pack_restore.h
Normal file
0
x502api-1.1.34/lib/lcspec/gcc/lcspec_pack_start.h
Normal file
0
x502api-1.1.34/lib/lcspec/gcc/lcspec_pack_start.h
Normal file
1
x502api-1.1.34/lib/lcspec/iar/lcspec_align.h
Normal file
1
x502api-1.1.34/lib/lcspec/iar/lcspec_align.h
Normal file
@ -0,0 +1 @@
|
||||
#pragma data_alignment=LSPEC_ALIGNMENT
|
||||
1
x502api-1.1.34/lib/lcspec/iar/lcspec_interrupt.h
Normal file
1
x502api-1.1.34/lib/lcspec/iar/lcspec_interrupt.h
Normal file
@ -0,0 +1 @@
|
||||
__irq
|
||||
1
x502api-1.1.34/lib/lcspec/iar/lcspec_pack_restore.h
Normal file
1
x502api-1.1.34/lib/lcspec/iar/lcspec_pack_restore.h
Normal file
@ -0,0 +1 @@
|
||||
#pragma pack(pop)
|
||||
1
x502api-1.1.34/lib/lcspec/iar/lcspec_pack_start.h
Normal file
1
x502api-1.1.34/lib/lcspec/iar/lcspec_pack_start.h
Normal file
@ -0,0 +1 @@
|
||||
#pragma pack(push, 1)
|
||||
22
x502api-1.1.34/lib/lcspec/lcspec.cmake
Normal file
22
x502api-1.1.34/lib/lcspec/lcspec.cmake
Normal file
@ -0,0 +1,22 @@
|
||||
# Файл для включения в проект на CMAKE.
|
||||
# Перед включением необходимо определить переменные
|
||||
# LCSPEC_DIR - путь к директории, где находится файлы lcspec (по умолчанию lib/lcspec)
|
||||
#
|
||||
# После включения будут добавлены в директории заголовков нужные для lcspec директории
|
||||
|
||||
|
||||
if (NOT LCSPEC_DIR)
|
||||
set(LCSPEC_DIR lib/lcspec)
|
||||
endif(NOT LCSPEC_DIR)
|
||||
|
||||
include_directories(${LCSPEC_DIR})
|
||||
|
||||
if(MSVC)
|
||||
include_directories(${LCSPEC_DIR}/msvc)
|
||||
elseif(CMAKE_COMPILER_IS_GNUCC)
|
||||
include_directories(${LCSPEC_DIR}/gcc)
|
||||
elseif(${CMAKE_C_COMPILER_ID} STREQUAL "Watcom")
|
||||
include_directories(${LCSPEC_DIR}/watcom)
|
||||
elseif(${CMAKE_C_COMPILER_ID} STREQUAL "Clang")
|
||||
include_directories(${LCSPEC_DIR}/gcc)
|
||||
endif()
|
||||
96
x502api-1.1.34/lib/lcspec/lcspec.h
Normal file
96
x502api-1.1.34/lib/lcspec/lcspec.h
Normal file
@ -0,0 +1,96 @@
|
||||
/***************************************************************************//**
|
||||
@file lcspec.h
|
||||
Файл вместе с файлами из подкаталога с именем компилятора определяет набор
|
||||
макросов и заголовочных файлов для выполнения действий, которые определяются
|
||||
специфичным для компилятора способом:
|
||||
- упаковка структур
|
||||
- выравнивание переменных
|
||||
- определение inline-функций
|
||||
|
||||
Для задания упаковки структур используются два файла lcspec_pack_start.h и
|
||||
lcspec_pack_restore.h для возможности указать упаковку через \#pragma.
|
||||
Кроме того используется определение #LATTRIBUTE_PACKED для определения
|
||||
упаковки с помощью атрибутов (как в gcc).
|
||||
Упакованная структура должна быть обявлена следующим образом :
|
||||
|
||||
@code
|
||||
#include "lcspec_pack_start.h"
|
||||
|
||||
struct struct_name {
|
||||
...
|
||||
} LATTRIBUTE_PACKED;
|
||||
typedef struct struct_name type_name;
|
||||
|
||||
...
|
||||
|
||||
#include "lcspec_pack_restore.h"
|
||||
@endcode
|
||||
|
||||
Выравнивание на n байт выполняется также через включение файла с предварительным
|
||||
определением границы выравнивания через LSPEC_ALIGNMENT.
|
||||
Ниже объявлены две переменные с выравниванием 128 байт:
|
||||
@code
|
||||
#define LSPEC_ALIGNMENT 128
|
||||
#include "lcspec_align.h"
|
||||
int v1;
|
||||
#include "lcspec_align.h"
|
||||
unsigned v2;
|
||||
#undef LSPEC_ALIGNMENT
|
||||
@endcode
|
||||
|
||||
Для встроенных функций определено определение #LINLINE, которое должно быть указано
|
||||
в начале определения функции перед типом возвращаемого значения
|
||||
(после слова static для статической функции)
|
||||
|
||||
На настоящий момент реализованы определения для GCC, IAR, MSVC, OpenWatcom и LabWindow/CVI.
|
||||
|
||||
@author Borisov Alexey <borisov@lcard.ru>
|
||||
@date 10.01.2011
|
||||
*******************************************************************************/
|
||||
|
||||
#ifndef LCSPEC_H_
|
||||
#define LCSPEC_H_
|
||||
|
||||
#if defined ( __GNUC__ )
|
||||
/*------------------------ определения GCC -------------------------------*/
|
||||
#define LINLINE inline
|
||||
#define LATTRIBUTE_PACKED __attribute__ ((packed))
|
||||
#elif defined ( _MSC_VER )
|
||||
/*------------------------ определения MSVC ------------------------------*/
|
||||
#define LINLINE __inline
|
||||
#define LATTRIBUTE_PACKED
|
||||
/*------------------------ Watcom/Open Watcom ----------------------------*/
|
||||
#elif defined ( _WATCOMC_ ) || defined (__WATCOMC__)
|
||||
#define LINLINE __inline
|
||||
#define LATTRIBUTE_PACKED
|
||||
#elif defined ( _CVI_ )
|
||||
/*------------------- определения для LabWindow/CVI ----------------------*/
|
||||
#define LINLINE inline
|
||||
#define LATTRIBUTE_PACKED
|
||||
#elif defined ( __CC_ARM )
|
||||
#error "cc arm compiler spec. is't defined"
|
||||
#elif defined ( __ICCARM__ )
|
||||
#define LINLINE inline
|
||||
#define LATTRIBUTE_PACKED
|
||||
#elif defined ( __TASKING__ )
|
||||
#error "tasking compiler spec. is't defined"
|
||||
#else
|
||||
#error "compiler is't specified"
|
||||
|
||||
|
||||
/** Определение встраиваемой (inline) функции */
|
||||
#define LINLINE inline
|
||||
/** Определение упакованной структуры через атрибут в конце структуры (как в GCC).
|
||||
Если не используется, то этот макрос должен быть определен как пустой. */
|
||||
#define LATTRIBUTE_PACKED __attribute__ ((packed))
|
||||
#endif
|
||||
|
||||
|
||||
/* теперь вместо определения содержимого\#pragma используются include-файлы
|
||||
* (так как предыдущий вариант работал не на всех компиляторах) */
|
||||
#define LPRAGMA_PACKED error: you must use new syntax for packed structs
|
||||
#define LPRAGMA_PACK_RESTORE error: you must use new syntax for packed structs
|
||||
#define LALIGN error: you must use new syntax for aligned variables
|
||||
|
||||
|
||||
#endif /* LCSPEC_H_ */
|
||||
1
x502api-1.1.34/lib/lcspec/msvc/lcspec_align.h
Normal file
1
x502api-1.1.34/lib/lcspec/msvc/lcspec_align.h
Normal file
@ -0,0 +1 @@
|
||||
__declspec( align( LSPEC_ALIGNMENT ) )
|
||||
1
x502api-1.1.34/lib/lcspec/msvc/lcspec_pack_restore.h
Normal file
1
x502api-1.1.34/lib/lcspec/msvc/lcspec_pack_restore.h
Normal file
@ -0,0 +1 @@
|
||||
#pragma pack(pop)
|
||||
2
x502api-1.1.34/lib/lcspec/msvc/lcspec_pack_start.h
Normal file
2
x502api-1.1.34/lib/lcspec/msvc/lcspec_pack_start.h
Normal file
@ -0,0 +1,2 @@
|
||||
#pragma warning(disable : 4103)
|
||||
#pragma pack(push, 1)
|
||||
1
x502api-1.1.34/lib/lcspec/watcom/lcspec_pack_restore.h
Normal file
1
x502api-1.1.34/lib/lcspec/watcom/lcspec_pack_restore.h
Normal file
@ -0,0 +1 @@
|
||||
#pragma pack()
|
||||
1
x502api-1.1.34/lib/lcspec/watcom/lcspec_pack_start.h
Normal file
1
x502api-1.1.34/lib/lcspec/watcom/lcspec_pack_start.h
Normal file
@ -0,0 +1 @@
|
||||
#pragma pack(1)
|
||||
Reference in New Issue
Block a user