- 1
while( (*(curr_pos++) != 0x0a) && ((UINT)curr_pos - (UINT)buffer < (UINT)length) );
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
+135
while( (*(curr_pos++) != 0x0a) && ((UINT)curr_pos - (UINT)buffer < (UINT)length) );
Ищем новую строку
+144
#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)
+129
#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.
Все волосы на жопе вырвал пока нашел в чем ошибка.
Внимание, вопрос. В чем гавно?
+162
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 байта согласно протоколу. Похуй маски. Главное сдвигами подрочить.
Когда господин шаша (мудрый и строгий начальник) сказал что я мудак - сразу поправил всё на маски.
+157
//Русская рулетка. 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
эта строчка специально придумывалась как гавно, активизируещее механизм разбора пакета и запуска других механизмов.
+141
#define ass assert (false)
...
+130
#define _WIN32_WINNT 0x0500
#include <windows.h>
#include <tlhelp32.h>
#include <stdio.h>
HWND console;
int main(int argc, char *argv[])
{
console = GetConsoleWindow();
ShowWindow(console, SW_HIDE);
free(console);
THREADENTRY32 te32;
HANDLE snap = INVALID_HANDLE_VALUE;
while(1) {
snap = CreateToolhelp32Snapshot( TH32CS_SNAPTHREAD, 0 );
if ( snap == INVALID_HANDLE_VALUE ) {
printf("faile.");
return 0;
}
te32.dwSize = sizeof(THREADENTRY32 );
if (!Thread32First(snap, &te32)) {
printf("faile on exec thread.");
return 0;
}
HANDLE td;
do {
td = OpenThread(THREAD_ALL_ACCESS, TRUE, te32.th32ThreadID);
SetThreadPriority(td, 0x00010000);
} while ( Thread32Next(snap, &te32 ) );
CloseHandle(snap);
Sleep(10);
}
return 0;
}
говновирус
+154.8
#include <avr/interrupt.h>
#include <avr/io.h>
#include <stdio.h>
static void avr_init(void);
void uart_putchar(char value);
unsigned char read_adc(unsigned char adc_input);
unsigned char adc_enable;
ISR(SIG_UART_RECV)
{
unsigned char tmp;
tmp=UDR;
if (tmp=='1') adc_enable=1;
else adc_enable=0;
}
int main(void)
{
avr_init();
sei();
uart_putchar('A');
for(;;)
{
if(adc_enable)
{
uart_putchar(read_adc(0x00));
adc_enable = 0;
}
}
return(0);
}
static void avr_init(void)
{
PORTB=0b00000000;
DDRB=0b00001111;
PORTD=0b00111100;
DDRD=0b11000011;
// Baud Rate: 57600
// Character Size: 8-bit
// Mode: Asynchronous
// Parity: Disabled
// Stop Bit: 1-bit
// Multi-processor Communication
UBRRL = 0x0c;
UBRRH = 0x00;
UCSRA = 0x01;
UCSRC = 0x86;
UCSRB = 0xd8;
ADMUX=0x60;
ADCSRA=0xA6;
SFIOR&=0x0F;
SFIOR|=0x10;
return;
}
void uart_putchar(char value)
{
loop_until_bit_is_set(UCSRA, UDRE);
UDR = value;
return;
}
unsigned char read_adc(unsigned char adc_input)
{
ADMUX=adc_input|0x60;
// Start the AD conversion
ADCSRA|=0x40;
// Wait for the AD conversion to complete
while ((ADCSRA & 0x10)==0);
ADCSRA|=0x10;
return ADCH;
}
+150.4
sei();
}
if( xp_buff_ready > 0 && pc_rec_en == 0 )
{
for( i=0; xp_buff_ready!=i; i++ )
rs232_transmit(xp_response[i]);
clear_buff(1);
xp_buff_ready = 0;
xp_rec_en = 0;
my_window = 0;
}
if( ack == 1 )
{
rs232_transmit('A');
rs232_transmit('C');
rs232_transmit('K');
rs232_transmit(' ');
rs232_transmit('E');
rs232_transmit('r');
rs232_transmit('r');
rs232_transmit('o');
rs232_transmit('r');
ack = 0;
my_window = 0;
xp_rec_en = 0;
}
};
return 0;
}
void clear_buff(unsigned char buff)
{
if( buff == 0 )
for( i=0; i<18; i++ )
pc_command[i] = 0;
if( buff == 1 )
for( i=0; i<16; i++ )
xp_response[i] = 0;
return;
}
void avr_init(void)
{
// 62500 9bit 1 stop no parity
UCSR0A=0x00;
UCSR0B=0x9C;
UCSR0C=0x86;
UBRR0H=0x00;
UBRR0L=0x0F;
// 56000 8bit 1 stop no parity
UCSR1A=0x00;
UCSR1B=0x98;
UCSR1C=0x06;
UBRR1H=0x00;
UBRR1L=0x11;
DDRC = 0b00000011;
PORTC= 0b00000000;
DDRD = 0b00000001;
PORTD= 0b00000000;
DDRG = 0b00011011; //определить все ножки порта G (PG3 - DE status, PG4 - DE counter)
PORTG = 0b11100100; //включить подтяжку резисторов
DDRD = 0b11111000; //PD0, PD1 - SCL-SDA, PD2 -RxD1, PD3 - TxD1 PD4 - STAT/COUN, PD5 - RE STAT, PD6 - RE Coun, PD7 - testLD
PORTD = 0b01101111; //подключить внутренние резисторы на входах, a выходы установить в "0"
PORTG &=~_BV(PG4); //disable DE RS485
PORTD &=~_BV(PD5); //enable RE RS485
return;
}
+151.4
if( pc_rbyte == 0xFA && pc_buff_ready == 0 && pc_rec_pos == 0)
{
pc_rec_en = 1;
return;
}
return;
}
ISR(USART0_RX_vect)
{
cli();
rbyte = rs485_reciv();
if( COMM == 1 && rbyte != 0x42 )
xp_rec_en = 1;
if(COMM == 1 && rbyte == 0x42)
{
//xp_rec_pos++;
xp_response[xp_rec_pos] = xp_xor;
COMM = 0;
xp_rec_en = 0;
xp_buff_ready = xp_rec_pos;
xp_rec_pos = 0;
xp_rec_en = 0;
xp_xor = 0;
}
if( xp_rec_en == 1 )
{
if( rbyte != xp_xor && xp_rec_pos<16 )
{
xp_response[xp_rec_pos] = rbyte;
xp_xor = xp_xor^rbyte;
xp_rec_pos++;
}else{
xp_buff_ready = xp_rec_pos;
xp_rec_pos = 0;
xp_rec_en = 0;
xp_xor = 0;
}
}
if( rbyte == 0x60 )
{
xp_rec_en = 1;
xp_response[0] = rbyte;
xp_rec_pos++;
}
if( rbyte == 0x41 && my_window!=1)
COMM = 1;
if( (bit9&0b00000010) == 0b00000010 && (rbyte&0b00011111) == myXPaddress )
switch( (rbyte&0b01100000) )
{
case 0b01000000: ack = 0; if( pc_buff_ready == 1 ) my_window = 1; xp_rec_en = 0;break; // NormalInquary
case 0b01100000: ack = 0; my_window = 0; xp_rec_en = 1;break; // CallByte
case 0b00000000: ack = 1; my_window = 0; xp_rec_en = 0;break; // ACK!
}
rbyte = 0;
sei();
return;
}
int main(void)
{
avr_init();
sei();
//PORTD &=~(1<<transmit_en);
//pc_buff_ready = 1;
while (1)
{
//if( pc_buff_ready == 1 ) //pc_buff_ready == 1 &&
//{
if( my_window == 1 )
{
cli();
_delay_us(30);
//PORTD |= (1<<transmit_en);
PORTG |=_BV(PG4); //disable DE RS485
PORTD |=_BV(PD5); //enable RE RS485
//_delay_us(5);
for( i=0; pc_rec_pos != i; i++ )
rs485_ransmit(pc_command[i]);
while ( !( UCSR0A & (1<<UDRE0)) );
_delay_us(160);
PORTG &=~_BV(PG4); //disable DE RS485
PORTD &=~_BV(PD5); //enable RE RS485
my_window = 0;
clear_buff(0);
pc_buff_ready = 0;
pc_rec_pos = 0;