Отговори на тема  [ 18 мнения ]  Отиди на страница Предишна  1, 2
int short long 
Автор Съобщение
Ранг: Почетен член
Ранг: Почетен член

Регистриран на: Съб Окт 13, 2007 12:12 pm
Мнения: 712
Мнение Re: int short long
Вземи да се дообразоваш и тогава почни да даваш оценки и съвети! Това е добронамерен съвет! :)


Сря Окт 05, 2011 7:31 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Пет Фев 25, 2005 1:58 pm
Мнения: 4585
Местоположение: US
Мнение Re: int short long
npelov написа:
те нали с това се биеха в гърдите микрочип, че 18-ките били оптимизирани за C - може би са имали в предвид extended режима и индиректното индексиране с WREG офсет.
А глупавият им компилатор дори не следи банките - за всяко присвояване прави movlb ... да не говорим че за access RAM-a прави movlb 0 ... за какви оптимизации говорим ....
Аз за това се бъхтех на асемблер, но от известно време се опитвам да ги вържа двете и се получава. Прекъсванията ми са на асемблер и няколко по-дребни функции, а останалото е на C. Малко е досадно да сравняваш на асемблер и да ползваш ROM таблици (масиви) ...


Extended режима няма нищо общо със C-то, кода генериран в Extended е дори по-тромав. Дали компилатора е глупав или не е предмет на спор - не следи банките демо-верЕсията. Компилатора си е читав, не си спомням кога последно съм писал на асемблер... май беше когато през 2008 си направих bootloader за PIC18. Дори за прекъсвания не ми се е налагало да минавам на асемблер.

За размерите, не само, че int не е винаги 2 байта, но и char не е задължително да е 1 байт ( примерно DSP-тата на TI няма размер на променлива 1 байт, така че char при тях е 2 байта ). За да не стават недоразумения или използваш файл като този който kiid ти показа, или си правиш нещо такова ( както аз правя ):
Код:
#ifndef __Integers_h
#define __Integers_h

#ifdef __18CXX         // PIC18
   #define _access   0
   #define _bsr   1

   typedef enum _bool { false = 0, true } bool;
   typedef signed char int8;
   typedef unsigned char uint8;
   typedef int int16;
   typedef unsigned int uint16;
   typedef short long int24;
   typedef unsigned short long uint24;
   typedef signed long int32;
   typedef unsigned long uint32;

   #define TMR1 (*(uint16 *)(&TMR1L))

#elif defined __C30__   // PIC24, dsPIC30, dsPIC33

   typedef enum _bool { false = 0, true } bool;
   typedef char int8;
   typedef unsigned char uint8;
   typedef short int   int16;
   typedef unsigned short int uint16;
   typedef signed long int32;
   typedef unsigned long uint32;
   typedef signed long long int64;
   typedef unsigned long long uint64;
   typedef float   float32;
   typedef long double   double64;

#elif defined __PIC32MX__   // PIC32

   typedef enum _bool { false = 0, true } bool;
   typedef char int8;
   typedef unsigned char uint8;
   typedef short int   int16;
   typedef unsigned short int uint16;
   typedef signed int int32;
   typedef unsigned int uint32;
   typedef signed long long int64;
   typedef unsigned long long uint64;
   typedef float   float32;
   typedef double   double64;

#elif defined __TMS320__   // TMS320LF240x
   // 'enum' is represented as signed 16-bit value ( int16 )
   typedef enum _bool { false = 0, true } bool;
   // 'char', 'short' and 'int' are equivalent types and are represented as 16-bit binary values
   // typedef char int8;
   // typedef unsigned char uint8;
   // typedef short int   int16;
   // typedef unsigned short int uint16;
   typedef signed int int16;
   typedef unsigned int uint16;
   // long - 32-bit binary values. Stored in memory with the least significant word at
   // the lower address.
   typedef signed long int32;
   typedef unsigned long uint32;
   // 'float','double' and 'long double' are equivalent and are represented in 32-bit floating point format
   // Stored in memory with the least significant word at the lower address.
   typedef float   float32;
   typedef double   double32;
   // Note:
   // TMS320C2x/C2xx/C5x Byte Is 16 Bits. So sizeof (int) = = 1 (not 2) !   
#endif

#endif // __Integers_h


Цецо написа:
Пиковете просто не са мислени за C програмиране, затова и компилаторите за тях са извратени. Колкото и да са нови и лъскави, всичките носят в себе си онова ядро на 16C54 с всичките му щурави концепции вътре. Прекрасни са за много неща, ама не и за писане на ANSI С компилатор. Чак MIPS-овия е нещо по различно.


Очевадно е, че не си пипал 24/30/33, иначе щеше да знаеш разликите ;-)

Между другото, ANSI C, та ANSI C, това се повтаря почти непрекъснато. Кой за кога е настройвал използваните от него компилатори да генерират само ANSI C код ??? Щото не помня това да ми е причинявало кой знае какво неудобство.

_________________
Ето аз дишам, работя, живея и програми пиша тъй както умея, с проца под вежди се гледаме строго и боря се с него доколкото мога....


Вто Окт 18, 2011 9:58 pm
Профил WWW
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Вто Окт 11, 2011 11:53 pm
Мнения: 4582
Местоположение: Brussels / Пловдив
Мнение Re: int short long
#include <stdint.h>

uint16_t var;

_________________
Мразя да мразя ...


Чет Окт 20, 2011 4:53 pm
Профил
Покажи мненията от миналия:  Сортирай по  
Отговори на тема   [ 18 мнения ]  Отиди на страница Предишна  1, 2

Кой е на линия

Потребители разглеждащи този форум: 0 регистрирани и 5 госта


Вие не можете да пускате нови теми
Вие не можете да отговаряте на теми
Вие не можете да променяте собственото си мнение
Вие не можете да изтривате собствените си мнения
Вие не можете да прикачвате файл

Търсене:
Иди на:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group.
Designed by ST Software for PTF.
Хостинг и Домейни