- 
        
        
                +135        
        
                            - 01
 - 02
 - 03
 - 04
 - 05
 - 06
 - 07
 - 08
 - 09
 - 10
 - 11
 - 12
 - 13
 - 14
 
                        #define atfl_calc_opcode_(op) \
((op) == (ATFL_OP_PAGE_STORE|ATFL_BUF1|ATFL_PAGE_ERASE) ? 0x83 : (\
	(op) == (ATFL_OP_PAGE_STORE|ATFL_BUF2|ATFL_PAGE_ERASE) ? 0x86 : (\
	(op) == (ATFL_OP_PAGE_STORE|ATFL_BUF1|ATFL_PAGE_NO_ERASE) ? 0x88 : (\
	(op) == (ATFL_OP_PAGE_STORE|ATFL_BUF2|ATFL_PAGE_NO_ERASE) ? 0x89 : (\
	(op) == (ATFL_OP_PAGE_LOAD|ATFL_BUF1) ? 0x53 : (\
	(op) == (ATFL_OP_PAGE_LOAD|ATFL_BUF2) ? 0x55 : (\
	(op) == (ATFL_OP_BUF_READ|ATFL_BUF1) ? 0xD4 : (\
	(op) == (ATFL_OP_BUF_READ|ATFL_BUF2) ? 0xD6 : (\
	(op) == (ATFL_OP_BUF_WRITE|ATFL_BUF1) ? 0x84 : (\
	(op) == (ATFL_OP_BUF_WRITE|ATFL_BUF2) ? 0x87 : (\
	(op) == (ATFL_OP_PAGE_ERASE) ? 0x81 : (\
	(op) == (ATFL_OP_PAGE_ERASE|ATFL_PAGE_ERASE) ? 0x81 : (\
	0)))))))))))))
                                     
        
            Угадайте зачем.
        
        
            
 dmzlj.livejournal.com,
            07 Мая 2010
        
        
        
         
        - 
        
        
                +143        
        
                            - 01
 - 02
 - 03
 - 04
 - 05
 - 06
 - 07
 - 08
 - 09
 - 10
 - 11
 - 12
 - 13
 - 14
 - 15
 - 16
 - 17
 - 18
 - 19
 - 20
 - 21
 - 22
 - 23
 - 24
 - 25
 - 26
 - 27
 - 28
 - 29
 - 30
 - 31
 - 32
 - 33
 - 34
 - 35
 - 36
 - 37
 - 38
 - 39
 - 40
 - 41
 - 42
 - 43
 - 44
 - 45
 - 46
 - 47
 - 48
 
                        // народ на протяжении 5+ лет жаловался что постоянно что-то в этой библиотеке Х
// криво потому что часто (с их слов) попытки вызова ее функций просто обламываются:
int module_main_function()
{
  int rc = 0;
  // ...
  rc = libX_do_work( ... )
  if (rc != OK) {
    // error!!!
  }
  // ...
}
// теперь заглянем в инициализацию этого модуля:
int module_init()
{
   int rc; 
   // ... кучи дежурного копи-паста для инициализации скипнуты ...
   rc = libZ_init();
   if (rc != OK)
   {
     /* error handling */
   }
   rc = libY_init();
   if (rc != OK)
   {
     /* error handling */
   }
   libX_init();   /* лопата */
   if (rc != OK)
   {
     /* error handling */
   }
   rc = libA_init();
   if (rc != OK)
   {
     /* error handling */
   }
   // ... и т.д. и т.п.
}
                                     
        
            меня жалобы одного отдела начали потиху доставать что наша библиотека (назовем ее libX) у них в модуле постоянно не работает и шо ваабще за херня. как встроили ее - так и не работает. иногда. в 80+ модулях работает как часы - ни один другой отдел не жалуется - а вот в ихнем очень специальном модуле нет.
ну я к ним подвалил. они меня сразу в рабочую функцию тыкать стали - вот тут дескать не работает. я им методично: покаж где инициализация. я когда в инициализацию заглянул, почти сразу начал роготять (давно так не смеялся, наболело за годы).
им минут пять понадобилось что бы в своем копи-паст параде рассмотреть эту глюку.
ЗЫ ответ: на строке с лопатой, не хватает "rc = ". у библиотеки есть внешняя конфигурация на отсутствии коей она у них обламывалась постоянно. и исправить скрипты свои что бы чужая конфигурация не убивалясь им похоже религия не позволяет.
        
        
            
 Dummy00001,
            04 Мая 2010
        
        
        
         
        - 
        
        
                +124        
        
                            - 01
 - 02
 - 03
 - 04
 - 05
 - 06
 - 07
 - 08
 - 09
 - 10
 - 11
 - 12
 - 13
 - 14
 - 15
 - 16
 
                        void f()
{
char d[14] = "Hello, error!";
}
void h()
{
char d[14];
std::cout<<d;
}
int main()
{
f();
h();
}
                                     
        
            Кто отгадает, что делает этот код(а еще лучше почему он вобще работает) тому ни чего не будет.
        
        
            
 hromjo,
            02 Мая 2010
        
        
        
         
        - 
        
        
                +136        
        
                            - 1
 - 2
 - 3
 - 4
 - 5
 
                        memset( fc->key, 0, KEY_LEN+1);
memset( fc->value, 0, VALUE_LEN+1);
strncpy(fc->key, key, strlen( key) + 1);
strncpy(fc->value, value,strlen( value) + 1);
                                     
        
            совершенное непонимание работы ф-ии strncpy
        
        
            
 benderlog,
            30 Апреля 2010
        
        
        
         
        - 
        
        
                +135        
        
                            - 1
 
                        while( (*(curr_pos++) != 0x0a) && ((UINT)curr_pos - (UINT)buffer < (UINT)length) );
                                     
        
            Ищем новую строку
        
        
            
 dokonvog,
            30 Апреля 2010
        
        
        
         
        - 
        
        
                +144        
        
                            - 01
 - 02
 - 03
 - 04
 - 05
 - 06
 - 07
 - 08
 - 09
 - 10
 - 11
 - 12
 - 13
 - 14
 - 15
 - 16
 - 17
 - 18
 - 19
 - 20
 - 21
 - 22
 - 23
 - 24
 - 25
 - 26
 - 27
 - 28
 - 29
 - 30
 - 31
 - 32
 - 33
 - 34
 - 35
 - 36
 - 37
 - 38
 - 39
 - 40
 - 41
 - 42
 - 43
 - 44
 - 45
 - 46
 - 47
 - 48
 - 49
 - 50
 - 51
 - 52
 - 53
 - 54
 - 55
 - 56
 - 57
 - 58
 - 59
 - 60
 - 61
 - 62
 
                        #include <stdio.h>
int
predicat
(
int
i
)
{
    return
    i
    ==
    2
    ;
}
int 
main
(
)
{
    int
    boolean
    =
    0
    ;
    for
    (
    int
    i
    =
    0
    ;
    i
    <
    3
    &&
    !
    (
    boolean
    =
    predicat
    (
    i
    )
    )
    ;
    ++
    i
    )
    ;
    printf
    (
    "%i"
    ,
    boolean
    )
    ;
    return
    0
    ;
}
                                     
        
            Есть мнение что этот код идеален - максимальная экономия горизонтального простанства. Компилируется (-std=C99)
        
        
            
 idkravitz,
            29 Апреля 2010
        
        
        
         
        - 
        
        
                +129        
        
                            - 01
 - 02
 - 03
 - 04
 - 05
 - 06
 - 07
 - 08
 - 09
 - 10
 - 11
 - 12
 - 13
 - 14
 - 15
 - 16
 - 17
 - 18
 - 19
 
                        #define SPI_BUF_SIZE                                0x400
#define SDRAM_SPI_0_BUF_MISO           (void*)0x100000
#define SDRAM_SPI_0_BUF_MOSI           SDRAM_SPI_0_BUF_MISO - SPI_BUF_SIZE
#define SDRAM_SPI_1_BUF_MISO           SDRAM_SPI_0_BUF_MOSI - SPI_BUF_SIZE
#define SDRAM_SPI_1_BUF_MOSI           SDRAM_SPI_1_BUF_MISO - SPI_BUF_SIZE
#define SDRAM_SPI_2_BUF_MISO           SDRAM_SPI_1_BUF_MOSI - SPI_BUF_SIZE
#define SDRAM_SPI_2_BUF_MOSI           SDRAM_SPI_2_BUF_MISO - SPI_BUF_SIZE
#define SDRAM_SPI_3_BUF_MISO           SDRAM_SPI_2_BUF_MOSI - SPI_BUF_SIZE
#define SDRAM_SPI_3_BUF_MOSI           SDRAM_SPI_3_BUF_MISO - SPI_BUF_SIZE
void test()
{
void *buf = SDRAM_SPI_3_BUF_MOSI;
void *buf1 = (void*)0x100000 - 0x400*7;
*buf = *buf1 = 0xAA;
printf("buf=%.2x \tbuf1=%.2x\n ",*buf, buf1);
return;
}
                                     
        
            Расскажу преамбулу. Код писался под проц atmel at91sam7x
В этом процессоре есть звено SPI (serial pereferial interface). Но так как звено было спроектировано с небольшим косячком (который кстати в эррате был явно описан) буффер для каждой линии нужно было выделять в сдраме.
Сказано - сделано. Выделили. а так как средства отладки только DBGU и JTAG.
Все волосы на жопе вырвал пока нашел в чем ошибка.
Внимание, вопрос. В чем гавно?
        
        
            
 ursus,
            29 Апреля 2010
        
        
        
         
        - 
        
        
                +162        
        
                            - 1
 - 2
 - 3
 - 4
 - 5
 - 6
 - 7
 - 8
 - 9
 
                        char pack_LOF_OBJ(LOF_OBJ *pobj, char* pdata)
{
        *pdata  =(unsigned char) (pobj->value << 16);
        *(pdata + 1)  = (unsigned char)(pobj->value << 8 >> 16 << 8);
        *(pdata + 2) = (unsigned char)(pobj->value >> 16 << 16);
        return 0x01;
};
                                     
        
            тоже писал я. Умрите в мучениях, человеки.
Упакуем 4 байта согласно протоколу. Похуй маски. Главное сдвигами подрочить.
Когда господин шаша (мудрый и строгий начальник) сказал что я мудак - сразу поправил всё на маски.
        
        
            
 ursus,
            23 Апреля 2010
        
        
        
         
        - 
        
        
                +157        
        
                            - 1
 - 2
 - 3
 - 4
 - 5
 
                        //Русская рулетка. 7 газовых, один боевой.
 act_rx_session_104(&apdu);
//      printf ("recv I\n");
result =        (*((COLLECTORHDLR*)((collector_cfg.pFILLHDL + (unsigned char)apdu.asdu.type)->pHandler)))
((HEAD_ASDU_60870*) &apdu.asdu);
                                     
        
            Как то писал под OS Rtems 4.6 протокол 60870-5-104
эта строчка специально придумывалась как гавно, активизируещее механизм разбора пакета и запуска других механизмов.
        
        
            
 ursus,
            23 Апреля 2010
        
        
        
         
        - 
        
        
                +141        
        
                            - 1
 
                        #define ass assert (false)
                                     
        
            ...
        
        
            
 XAKEP,
            22 Апреля 2010