LINUX.ORG.RU

Сообщения WRG

 

ноутбук не выходит из суспенда

Toshiba Satellite L20-157, установлен debian jessie. pm-suspend проходит нормально, а вот обратно проснуться не может, просто черный экран, с диска ничего не читается, помогает хард ресет. в /var/log/messages ничего не нашел, подскажите в какую сторону копать?

WRG
()

dmenu игнорирует PATH

Сабж. Что же он юзает для того чтобы поиметь список программ? У меня есть некоторые бинарники в ~/.bin чтобы не засирать систему, и этот ~/.bin прописан в PATH, т.е. из консольки эти программы можно запускать, не прописывая полный пусть, а вот из dmenu нет. Как запилить? Неохота пихать всякий хлам в /usr/bin.

 , ,

WRG
()

Помогите разобраться с uniq

Есть файл куда записаны хэши неких файлов. Хэши не должны повторяться, что я и пытаюсь проверить.

# считаем строки
user@PC1 ~ $ cat hash.conf | wc -l
269

# считаем строки исключая повторения
user@PC1 ~ $ uniq -u hash.conf | wc -l
269

# думаем, что повторений нет, грепаем по файлу и ...
user@PC1 ~ $ cat hash.conf | grep 7f2f4771
7f2f4771210f92b6d1ca8b3bae925c57
7f2f4771210f92b6d1ca8b3bae925c57
7f2f4771210f92b6d1ca8b3bae925c57
7f2f4771210f92b6d1ca8b3bae925c57
7f2f4771210f92b6d1ca8b3bae925c57
user@PC1 ~ $ 

# WTF?
WRG
()

Изображение вылазит за границы монитора

Debian Jessie, 3.16, nouveau

02:00.0 VGA compatible controller: NVIDIA Corporation NV31 [GeForce FX 5600XT] (rev a1)

xrandr говорит, что разрешение установлено верно, но изображение не влезает на экран, нижняя часть с панелькой не видна. Кнопка «auto» на мониторе не помогает, а вручную в настройках монитора можно менять только ширину изображения. До этого был debian wheezy с блобом 173-что-то-там-legacy, изображение было нормальным. На wheezy до установки блоба такая же фигня.

Screen 0: minimum 320 x 200, current 1024 x 768, maximum 4096 x 4096
VGA-1 connected 1024x768+0+0 (normal left inverted right x axis y axis) 338mm x 270mm
   1280x1024     60.02 +  75.02  
   1280x960      60.00  
   1152x864      75.00  
   1024x768      75.08    70.07    60.00* 
   832x624       74.55  
   800x600       72.19    75.00    60.32    56.25  
   640x480       75.00    72.81    66.67    60.00  
   720x400       70.08  
DVI-I-1 disconnected (normal left inverted right x axis y axis)
TV-1 disconnected (normal left inverted right x axis y axis)

 , , ,

WRG
()

Хочу освоить STM32

Посоветуйте, какой бы инструментарий лучше использовать начинающему, что почитать, желательно на русском, но осилю и английский. Т.к. Keil под онтопик нету, приходится довольствоваться штатными средствами. Скачал бинарники отсюда , распаковал все в /usr, вроде работает.

arm-none-eabi-gcc --version
arm-none-eabi-gcc (GNU Tools for ARM Embedded Processors) 4.8.4 20140725 (release) [ARM/embedded-4_8-branch revision 213147]
Copyright (C) 2013 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

собрал stlink из гита, тоже все работает, даже слил с платы оригинальную прошивку.

У меня есть отладочная плата STM32F3 Discovery, что мне еще нужно скачать, чтобы помигать светодиодом? До этого имел дело только с avr, там все просто как в детском саду и есть в репах. Что можно использовать вместо IDE, чтоб завелось на стабильном дебиане? Собрал stlink из гита, тоже все работает, даже слил с платы оригинальную прошивку. Прошивать смогу и из консольки. Ну и отладчик тоже могу из консольки, хотя интереснее будет в ide отлаживать. В общем насоветуйте всякого must have для разработки под указанную платку из-под онтопика, а то ставить чертов Keil под виндой уж очень не хочется.

WRG
()

Помогите завести Sapphire Radeon 9550

Дистрибутив Debian Jessie

01:05.0 VGA compatible controller: Advanced Micro Devices, Inc. [AMD/ATI] RV350 [Radeon 9550]

выхлоп dmesg такой

ololot@workstation:~$ dmesg | grep radeon
[    8.420932] [drm] radeon kernel modesetting enabled.
[    8.424698] radeon 0000:01:05.0: putting AGP V3 device into 8x mode
[    8.424715] radeon 0000:01:05.0: GTT: 64M 0xF8000000 - 0xFBFFFFFF
[    8.424725] radeon 0000:01:05.0: VRAM: 128M 0x00000000E8000000 - 0x00000000EFFFFFFF (128M used)
[    8.424943] [drm] radeon: 128M of VRAM memory ready
[    8.424946] [drm] radeon: 64M of GTT memory ready.
[    8.425008] [drm] radeon: 1 quad pipes, 1 Z pipes initialized.
[    8.426407] radeon 0000:01:05.0: WB disabled
[    8.426420] radeon 0000:01:05.0: fence driver on ring 0 use gpu addr 0x00000000f8000000 and cpu addr 0xf820c000
[    8.426465] [drm] radeon: irq initialized.
[    8.527895] radeon 0000:01:05.0: firmware: direct-loading firmware radeon/R300_cp.bin
[    8.528793] [drm] radeon: ring at 0x00000000F8001000
[    8.707551] [drm:r100_ring_test] *ERROR* radeon: ring test failed (scratch(0x15E4)=0xCAFEDEAD)
[    8.707624] [drm:r100_cp_init] *ERROR* radeon: cp isn't working (-22).
[    8.707683] radeon 0000:01:05.0: failed initializing CP (-22).
[    8.707735] radeon 0000:01:05.0: Disabling GPU acceleration
[    9.054403] [drm] radeon: cp finalized
[    9.054465] radeon 0000:01:05.0: (r300_asic_reset:389) RBBM_STATUS=0x80110140
[    9.555647] radeon 0000:01:05.0: (r300_asic_reset:408) RBBM_STATUS=0x80010140
[   10.052802] radeon 0000:01:05.0: (r300_asic_reset:420) RBBM_STATUS=0x00000140
[   10.052838] radeon 0000:01:05.0: GPU reset succeed
[   10.052867] [drm] radeon: cp finalized
[   10.054242] [drm] radeon: ttm finalized
[   10.057429] radeon 0000:01:05.0: VRAM: 128M 0x00000000E8000000 - 0x00000000EFFFFFFF (128M used)
[   10.057435] radeon 0000:01:05.0: GTT: 512M 0x00000000C8000000 - 0x00000000E7FFFFFF
[   10.057706] [drm] radeon: 128M of VRAM memory ready
[   10.057711] [drm] radeon: 512M of GTT memory ready.
[   10.062241] [drm] radeon: 1 quad pipes, 1 Z pipes initialized.
[   10.065203] radeon 0000:01:05.0: WB enabled
[   10.065219] radeon 0000:01:05.0: fence driver on ring 0 use gpu addr 0x00000000c8000000 and cpu addr 0xf4e97000
[   10.065265] [drm] radeon: irq initialized.
[   10.065704] [drm] radeon: ring at 0x00000000C8001000
[   10.242436] [drm:r100_ring_test] *ERROR* radeon: ring test failed (scratch(0x15E4)=0xCAFEDEAD)
[   10.242509] [drm:r100_cp_init] *ERROR* radeon: cp isn't working (-22).
[   10.242569] radeon 0000:01:05.0: failed initializing CP (-22).
[   10.242621] radeon 0000:01:05.0: Disabling GPU acceleration
[   10.416348] [drm] radeon: cp finalized
[   10.560955] fbcon: radeondrmfb (fb0) is primary device
[   10.865428] radeon 0000:01:05.0: fb0: radeondrmfb frame buffer device
[   10.865435] radeon 0000:01:05.0: registered panic notifier
[   10.876120] [drm] Initialized radeon 2.39.0 20080528 for 0000:01:05.0 on minor 0

а в Xorg.0.log после загрузки есть такое

ololo@workstation:~$ cat /var/log/Xorg.0.log | grep EE
	(WW) warning, (EE) error, (NI) not implemented, (??) unknown.
[    15.968] (EE) AIGLX: reverting to software rendering
[    16.883] (EE) RADEON(0): drmmode_do_crtc_dpms cannot get last vblank counter

Перемещено leave из development

 , ,

WRG
()

ARM Toolchain в Debian Jessie

Есть ли сабж в репах тестинга? А то пытался поставить всё это по интрукции в вики, но она протухла, и не учитывает, что binutils-arm-linux-gnueabi требует libc6 версии 2.14 и выше, а в stable 2.13. Пробовал стащить libc6 из jessie, а он дофига вещей сразу притащить хочет. Может мне проще сам тестиг уже накатить?

 ,

WRG
()

Расшифруйте SMART пожалуйтса

Сабж. Стоит ли мне запасаться новым диском?

=== START OF INFORMATION SECTION ===
Device Model:     ST750LM022 HN-M750MBB
Serial Number:    S2RRJ9AC503282
LU WWN Device Id: 5 0004cf 2076ce274
Firmware Version: 2AR10002
User Capacity:    750 156 374 016 bytes [750 GB]
Sector Sizes:     512 bytes logical, 4096 bytes physical
Device is:        Not in smartctl database [for details use: -P showall]
ATA Version is:   8
ATA Standard is:  ATA-8-ACS revision 6
Local Time is:    Wed Oct  8 11:15:00 2014 YEKT
SMART support is: Available - device has SMART capability.
SMART support is: Enabled

ID# ATTRIBUTE_NAME          FLAG     VALUE WORST THRESH TYPE      UPDATED  WHEN_FAILED RAW_VALUE
  1 Raw_Read_Error_Rate     0x002f   100   100   051    Pre-fail  Always       -       603
  2 Throughput_Performance  0x0026   252   252   000    Old_age   Always       -       0
  3 Spin_Up_Time            0x0023   089   089   025    Pre-fail  Always       -       3455
  4 Start_Stop_Count        0x0032   097   097   000    Old_age   Always       -       3066
  5 Reallocated_Sector_Ct   0x0033   252   252   010    Pre-fail  Always       -       0
  7 Seek_Error_Rate         0x002e   252   252   051    Old_age   Always       -       0
  8 Seek_Time_Performance   0x0024   252   252   015    Old_age   Offline      -       0
  9 Power_On_Hours          0x0032   100   100   000    Old_age   Always       -       4735
 10 Spin_Retry_Count        0x0032   252   252   051    Old_age   Always       -       0
 11 Calibration_Retry_Count 0x0032   100   100   000    Old_age   Always       -       68
 12 Power_Cycle_Count       0x0032   099   099   000    Old_age   Always       -       1125
191 G-Sense_Error_Rate      0x0022   100   100   000    Old_age   Always       -       18
192 Power-Off_Retract_Count 0x0022   252   252   000    Old_age   Always       -       0
194 Temperature_Celsius     0x0002   064   042   000    Old_age   Always       -       36 (Min/Max 14/58)
195 Hardware_ECC_Recovered  0x003a   100   100   000    Old_age   Always       -       0
196 Reallocated_Event_Count 0x0032   252   252   000    Old_age   Always       -       0
197 Current_Pending_Sector  0x0032   252   252   000    Old_age   Always       -       0
198 Offline_Uncorrectable   0x0030   252   252   000    Old_age   Offline      -       0
199 UDMA_CRC_Error_Count    0x0036   200   200   000    Old_age   Always       -       0
200 Multi_Zone_Error_Rate   0x002a   100   100   000    Old_age   Always       -       12535
223 Load_Retry_Count        0x0032   100   100   000    Old_age   Always       -       68
225 Load_Cycle_Count        0x0032   099   099   000    Old_age   Always       -       14879

Обратил на него внимание, потому что ос (что онтопик, что оффтопик) стали загружаться по полчаса, причем далеко не всегда с первого раза, при этом почти постоянно горит индикатор дисковой активности.

WRG
()

Запуск слота только один раз

Есть такая конструкция. Реализован класс-обертка для QFtp. При создания объекта этого класса я дергаю у него метод openConnection(), который пытается подключиться к ftp серверу и отправляет сигнал sigConnectResult(bool) с результатом подключения. Проблема следующая. sigConnectResult(bool) соединен со слотом, который меняет флаг isOnline и запускает загрузку файлов на сервер. Перед загрузкой мне необходимо только один раз скачать файл с этого ftp сервера, т.е. только при запуске программы и успешном подключении, последующие подключения этого класса-обертки к серверу надо игнорировать. Для этого я хочу добавить еще слот, который соединю с sigConnectResult(bool), а внутри него вызову

disconnect(this->uploader, SIGNAL(sigConnectResult(bool)), this, SLOT([этот_слот_который_хочу_реализовать]))
, чтобы он отработал один раз, отсоединился и больше сигнал не получал. Будет ли это правильной реализацией, или можно сделать это как-то иначе?

 

WRG
()

Регулировка яркости подсветки Samsung NP355V4C

Сабж + открытые дрова, ядро 3.14. пробовал

GRUB_CMDLINE_LINUX_DEFAULT="nosplash acpi_osi=Linux acpi_backlight=vendor"
но не взлетело. вот карточки
00:01.0 VGA compatible controller: Advanced Micro Devices, Inc. [AMD/ATI] Trinity [Radeon HD 7660G]
01:00.0 VGA compatible controller: Advanced Micro Devices, Inc. [AMD/ATI] Thames [Radeon HD 7500M/7600M Series] (rev ff)
cast ecko

 , ,

WRG
()

Проблемы с nm-applet

Debian Wheezy, установлен i3, network-manager и network-manager-gnome. nm-applet запускается из .xsessionrc. При попытке создать любое подключение в нем, кнопка сохранить недоступна. Тоже самое если запустить nm-connection-editor от рута. Пользователь есть в группах

cdrom 
floppy 
sudo 
audio 
dip 
video 
plugdev 
netdev 
scanner 
bluetooth

WRG
()

PID регулятор

Накидал простенький ПИД-регулятор для того чтобы поддерживать заданную скорость робота с двумя ведущими колесами. Формулы брал тут. Он вроде бы и работает, но я не могу его никак подобрать ему коэффициенты, постоянно то с места сдвинуться не может, то едет рывками, то разгоняется за несколько секунд до максимальных оборотов. Гляньте пожалуйста, мб я где нибудь глупую ошибку допустил в коде.

// main.c
#include "asuro.h"
#include "def.h"
#include "pid.h"

extern uint16_t left_speed = 16;
extern uint16_t right_speed = 16;
extern uint8_t pid_enable = 1;

int main(void)
{
    Init();
    
    EncoderInit();
    EncoderStart();
    
    // main loop
	while(1) {
		process_pid();
	}
    
    return 0;
}
// def.h
#ifndef DEF_H
#define DEF_H

// PID regulator coefficients
#define kP 		5
#define kI		0
#define kD		0

// PID regulator settings
#define PID_INTERVAL 		100
#define MOTOR_MAX_SPEED 	255
#define MOTOR_MIN_SPEED 	0

#endif // DEF_H
// pid.h
#ifndef PID_H
#define PID_H

#include "asuro.h"
#include "def.h"

uint16_t left_speed = 0;
uint16_t right_speed = 0;

uint8_t pid_enable = 0;
static uint32_t prev_pid_time = 0;

static uint16_t left_prev_error = 1;
static uint16_t right_prev_error = 1;
static float left_prev_i = 1;
static float right_prev_i = 1;

void process_pid(void);
static uint8_t pid_compute(int current, int must_be, uint16_t *prev_error, float *prev_i);

#endif	// PID_H
// pid.c
#include "pid.h"

void process_pid(void)
{
	if(!pid_enable) return;
	
	if(Gettime() > prev_pid_time){
		if(Gettime() - prev_pid_time >= PID_INTERVAL){
			uint8_t l_pwm = pid_compute(encoder[LEFT], left_speed, &left_prev_error, &left_prev_i);
			uint8_t r_pwm = pid_compute(encoder[RIGHT], right_speed, &right_prev_error, &right_prev_i);
			MotorSpeed(l_pwm, r_pwm);
			encoder[LEFT] = 0;
			encoder[RIGHT] = 0;
			prev_pid_time = Gettime();
		}
	} else {
		if(0xFF - prev_pid_time + Gettime() + 1 >= PID_INTERVAL){
			uint8_t l_pwm = pid_compute(encoder[LEFT], left_speed, &left_prev_error, &left_prev_i);
			uint8_t r_pwm = pid_compute(encoder[RIGHT], right_speed, &right_prev_error, &right_prev_i);
			MotorSpeed(l_pwm, r_pwm);
			encoder[LEFT] = 0;
			encoder[RIGHT] = 0;
			prev_pid_time = Gettime();
		}
	}
}

static uint8_t pid_compute(int current, int must_be, uint16_t *prev_error, float *prev_i)
{
	float p, i, d;
	uint8_t output;
	int16_t error = must_be - current;
	
	p = kP * error;
	
	i = *prev_i + (kI * error);
	
	d = kD * (current - *prev_error);
	
	output = p + i + d;
	
	if(output > MOTOR_MAX_SPEED) output = MOTOR_MAX_SPEED;
	if(output < MOTOR_MIN_SPEED) output = MOTOR_MIN_SPEED;
	
	*prev_i = i;
	*prev_error = error;
	
	return output;
}

 ,

WRG
()

размер бинарников avr-gcc

Есть такой говнокод

//main.c
#include "asuro.h"

int main()
{
    Init();
    while(1);

    return 0;
}

при сборке с помощью такого makefile

# WinAVR Sample makefile written by Eric B. Weddington, Jörg Wunsch, et al.
# Released to the Public Domain
# Please read the make user manual!
#
#
# On command line:
#
# make all = Make software.
#
# make clean = Clean out built project files.
#
# make coff = Convert ELF to AVR COFF (for use with AVR Studio 3.x or VMLAB).
#
# make extcoff = Convert ELF to AVR Extended COFF (for use with AVR Studio
#                4.07 or greater).
#
# make program = Download the hex file to the device, using avrdude.  Please
#                customize the avrdude settings below first!
#
# make filename.s = Just compile filename.c into the assembler code only
#
# To rebuild project do "make clean" then "make all".
#


# MCU name
MCU = atmega8

# Output format. (can be srec, ihex, binary)
FORMAT = ihex

# Target file name (without extension).
TARGET = main

# Optimization level, can be [0, 1, 2, 3, s]. 0 turns off optimization.
# (Note: 3 is not always the best optimization level. See avr-libc FAQ.)
OPT = s

# sources directory
SRC_DIR = src

# binary files directory
BIN_DIR = bin


# List C source files here. (C dependencies are automatically generated.)
SRC = $(SRC_DIR)/$(TARGET).c

# If there is more than one source file, append them above, or adjust and
# uncomment the following:
SRC += $(SRC_DIR)/asuro.c

# You can also wrap lines by appending a backslash to the end of the line:
#SRC += baz.c \
#xyzzy.c



# List Assembler source files here.
# Make them always end in a capital .S.  Files ending in a lowercase .s
# will not be considered source files but generated files (assembler
# output from the compiler), and will be deleted upon "make clean"!
# Even though the DOS/Win* filesystem matches both .s and .S the same,
# it will preserve the spelling of the filenames, and gcc itself does
# care about how the name is spelled on its command-line.
ASRC = 




# Optional compiler flags.
#  -g:        generate debugging information (for GDB, or for COFF conversion)
#  -O*:       optimization level
#  -f...:     tuning, see gcc manual and avr-libc documentation
#  -Wall...:  warning level
#  -Wa,...:   tell GCC to pass this to the assembler.
#    -ahlms:  create assembler listing
CFLAGS = -g -O$(OPT) \
	-funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums \
	-Wall -Wstrict-prototypes \
	-Wa,-ahlms=$(<:.c=.lst)



# Optional assembler flags.
#  -Wa,...:   tell GCC to pass this to the assembler.
#  -ahlms:    create listing
#  -gstabs:   have the assembler create line number information; note that
#             for use in COFF files, additional information about filenames
#             and function names needs to be present in the assembler source
#             files -- see avr-libc docs [FIXME: not yet described there]
ASFLAGS = -Wa,-ahlms=$(<:.S=.lst),-gstabs 



# Optional linker flags.
#  -Wl,...:   tell GCC to pass this to linker.
#  -Map:      create map file
#  --cref:    add cross reference to  map file
LDFLAGS = -Wl,-Map=$(TARGET).map,--cref



# Additional libraries
#
# Minimalistic printf version
#LDFLAGS += -Wl,-u,vfprintf -lprintf_min
#
# Floating point printf version (requires -lm below)
#LDFLAGS +=  -Wl,-u,vfprintf -lprintf_flt
#
# -lm = math library
LDFLAGS += -lm



# ---------------------------------------------------------------------------

# Define directories, if needed.
DIRAVR = c:/winavr
DIRAVRBIN = $(DIRAVR)/bin
DIRAVRUTILS = $(DIRAVR)/utils/bin
DIRINC = .
DIRLIB = $(DIRAVR)/avr/lib


# Define programs and commands.
SHELL = sh

CC = avr-gcc

OBJCOPY = avr-objcopy
OBJDUMP = avr-objdump
SIZE = avr-size

REMOVE = rm -f
COPY = cp

HEXSIZE = $(SIZE) --target=$(FORMAT) $(TARGET).hex
ELFSIZE = $(SIZE) -A $(TARGET).elf

FINISH = echo Errors: none
BEGIN = echo -------- begin --------
END = echo --------  end  --------




# Define all object files.
OBJ = $(SRC:.c=.o) $(ASRC:.S=.o) 

# Define all listing files.
LST = $(ASRC:.S=.lst) $(SRC:.c=.lst)

# Combine all necessary flags and optional flags.
# Add target processor to flags.
ALL_CFLAGS = -mmcu=$(MCU) -I. $(CFLAGS)
ALL_ASFLAGS = -mmcu=$(MCU) -I. -x assembler-with-cpp $(ASFLAGS)



# Default target.
all: begin gccversion sizebefore $(TARGET).elf $(TARGET).hex $(TARGET).eep \
	$(TARGET).lss sizeafter finished end


# Eye candy.
# AVR Studio 3.x does not check make's exit code but relies on
# the following magic strings to be generated by the compile job.
begin:
	@$(BEGIN)

finished:
	@$(FINISH)

end:
	@$(END)


# Display size of file.
sizebefore:
	@if [ -f $(TARGET).elf ]; then echo Size before:; $(ELFSIZE);fi

sizeafter:
	@if [ -f $(TARGET).elf ]; then echo Size after:; $(ELFSIZE);fi



# Display compiler version information.
gccversion : 
	$(CC) --version




# Convert ELF to COFF for use in debugging / simulating in
# AVR Studio or VMLAB.
COFFCONVERT=$(OBJCOPY) --debugging \
	--change-section-address .data-0x800000 \
	--change-section-address .bss-0x800000 \
	--change-section-address .noinit-0x800000 \
	--change-section-address .eeprom-0x810000 


coff: $(TARGET).elf
	$(COFFCONVERT) -O coff-avr $< $(TARGET).cof


extcoff: $(TARGET).elf
	$(COFFCONVERT) -O coff-ext-avr $< $(TARGET).cof

# Create final output files (.hex, .eep) from ELF output file.
%.hex: %.elf
	$(OBJCOPY) -O $(FORMAT) -R .eeprom $< $@

%.eep: %.elf
	-$(OBJCOPY) -j .eeprom --set-section-flags=.eeprom="alloc,load" \
	--change-section-lma .eeprom=0 -O $(FORMAT) $< $@

# Create extended listing file from ELF output file.
%.lss: %.elf
	$(OBJDUMP) -h -S $< > $@



# Link: create ELF output file from object files.
.SECONDARY : $(TARGET).elf
.PRECIOUS : $(OBJ)
%.elf: $(OBJ)
	$(CC) $(ALL_CFLAGS) $(OBJ) --output $@ $(LDFLAGS)


# Compile: create object files from C source files.
%.o : %.c
	$(CC) -c $(ALL_CFLAGS) $< -o $@


# Compile: create assembler files from C source files.
%.s : %.c
	$(CC) -S $(ALL_CFLAGS) $< -o $@


# Assemble: create object files from assembler source files.
%.o : %.S
	$(CC) -c $(ALL_ASFLAGS) $< -o $@






# Target: clean project.
clean: begin clean_list finished end

clean_list :
	$(REMOVE) $(TARGET).hex
	$(REMOVE) $(TARGET).eep
	$(REMOVE) $(TARGET).obj
	$(REMOVE) $(TARGET).cof
	$(REMOVE) $(TARGET).elf
	$(REMOVE) $(TARGET).map
	$(REMOVE) $(TARGET).obj
	$(REMOVE) $(TARGET).a90
	$(REMOVE) $(TARGET).sym
	$(REMOVE) $(TARGET).lnk
	$(REMOVE) $(TARGET).lss
	$(REMOVE) $(OBJ)
	$(REMOVE) $(LST)
	$(REMOVE) $(SRC:.c=.s)
	$(REMOVE) $(SRC:.c=.d)


# Automatically generate C source code dependencies. 
# (Code originally taken from the GNU make user manual and modified 
# (See README.txt Credits).)
#
# Note that this will work with sh (bash) and sed that is shipped with WinAVR
# (see the SHELL variable defined above).
# This may not work with other shells or other seds.
#
%.d: %.c
	set -e; $(CC) -MM $(ALL_CFLAGS) $< \
	| sed 's,\(.*\)\.o[ :]*,\1.o \1.d : ,g' > $@; \
	[ -s $@ ] || rm -f $@


# Remove the '-' if you want to see the dependency files generated.
-include $(SRC:.c=.d)



# Listing of phony targets.
.PHONY : all begin finish end sizebefore sizeafter gccversion coff extcoff \
	clean clean_list program

размер elf файла такой

text    data     bss     dec     hex filename
1680       0       1    1681     691 main.elf
Я создал пустой проект avr в codeblocks, добавил в main.c этот же код, добавил в проект asuro.h и asuro.c, и собрал (сборка не отладочная). Получилось вот что
text    data     bss     dec     hex filename
3866       8       1    3875     f23 asuro.elf
как так?

 ,

WRG
()

HP LaserJet P1005 как работает под онтопиком?

Интересуют истории успеха или неуспеха о использовании данного принтера под онтопиком, ну и вобще как он? Хочу взять такой БУ только для печати печатных плат для ЛУТ. Может изредка документ какой напечатаю еще.

 ,

WRG
()

Как правильно удалять данные из модели данных Qt?

Есть некоторые данные в таком виде

QList <Task> tasks;

Модель для этих данных

// taskmodel.h
#ifndef TASKSMODEL_H
#define TASKSMODEL_H

#include <QAbstractListModel>
#include "def.h"

// реализация модели задач

class TasksModel : public QAbstractListModel
{
    Q_OBJECT
    QList <Task> tasks;
public:
    explicit TasksModel(QObject *parent = 0);

    int rowCount(const QModelIndex &parent = QModelIndex()) const;
    QVariant data(const QModelIndex &index, int role) const;

    void resetData(const QList<Task> &taskslist);

    Task getItem(const QModelIndex &index);
    
signals:
    
public slots:
    
};

#endif // TASKSMODEL_H

// taskmodel.cpp
#include "tasksmodel.h"

TasksModel::TasksModel(QObject *parent) :
    QAbstractListModel(parent)
{
}

int TasksModel::rowCount(const QModelIndex &parent) const
{
    return this->tasks.count();
}

QVariant TasksModel::data(const QModelIndex &index, int role) const
{
    // проверяем на валидность и на выход из диапазона
    if(!index.isValid() or index.row() >= this->tasks.count())
        return QVariant();

    // возвращаем то, что нужно
    switch(role){
    case Qt::DisplayRole:
        return this->tasks.at(index.row()).title;
        break;

    case Qt::ToolTipRole:
        return this->tasks.at(index.row()).details;
        break;

    default:
        return QVariant();
        break;
    }
}

void TasksModel::resetData(const QList<Task> &taskslist)
{
    this->beginResetModel();
    this->tasks.clear();
    this->tasks = taskslist;
    this->endResetModel();
}

Task TasksModel::getItem(const QModelIndex &index)
{
    return this->tasks.at(index.row());
}

и к ней прокси модель для отображения на QListView с фильтром по дате

// taskproxymodel.h
#ifndef TASKSPROXYMODEL_H
#define TASKSPROXYMODEL_H

#include <QSortFilterProxyModel>
#include <QDate>
#include "tasksmodel.h"
#include "def.h"
#include <QDebug>

class TasksProxyModel : public QSortFilterProxyModel
{
    QDate filter;
public:
    TasksProxyModel();
    void setFilter(const QDate &filter);
    const QDate getFilter() const;

protected:
    bool filterAcceptsRow(int source_row, const QModelIndex &source_parent) const;
};

#endif // TASKSPROXYMODEL_H

// taskproxymodel.cpp
#include "tasksproxymodel.h"

TasksProxyModel::TasksProxyModel()
{
}

void TasksProxyModel::setFilter(const QDate &filter)
{
    this->filter = filter;
    this->filterChanged();
}

const QDate TasksProxyModel::getFilter() const
{
    return this->filter;
}

bool TasksProxyModel::filterAcceptsRow(int source_row, const QModelIndex &source_parent) const
{
    TasksModel *model = (TasksModel *)this->sourceModel();
    Task rec = model->getItem(model->index(source_row, 0, source_parent));
    // если подходит под фильтр, то true
    return rec.date == this->filter ? true : false;
}

Собственно вопрос: как же правильно удалить одну запись из списка, из модели и из проксимодели? пробовал вот так

    // получаем индекс элемента в исходной модели
    QModelIndex index = this->tasksProxyModel.mapToSource(this->ui->lv_tasks->currentIndex());
    // удаляем элемент из прокси модели
    this->tasksProxyModel.removeRow(this->ui->lv_tasks->currentIndex().row());
    // удаляем элемент из исходной модели
    this->tasksModel.removeRow(index.row());
    // удаляем элемент из списка по полученному индексу
    this->tasks.removeAt(index.row());
но из списка QListView не исчезает. зато работает вот так
    // получаем индекс элемента в исходной модели
    QModelIndex index = this->tasksProxyModel.mapToSource(this->ui->lv_tasks->currentIndex());
    // удаляем элемент из списка по полученному индексу
    this->tasks.removeAt(index.row());
    this->tasksModel.resetData(this->tasks);
но не думаю, что это хорошее решение, особенно если записей много, перестраивать модель заново каждый раз после удаления чего нибудь

 ,

WRG
()

Удалить сохраненный FTP пароль в Dolphin

SUBJ. Как это сделать? Где он их хранит?

 ,

WRG
()

Радиолюбителям: навесной монтаж

Какие проводки любите использовать монтаже радиодеталей навесом, на макетке например? Посоветуйте что-нибудь доступное и недорогое. Сейчас юзаю МГТФ 0.12, его без горелки толком не зачистишь, а ножом можно жилки повредить. А из плюсов у него термостойкая изоляция, можно паять не опасаясь ее расплавить.

 

WRG
()

Помогите разобраться с подключением библиотеки libxml++

Debian Wheezy x64, установлена libxml++2.6-dev. Файлы этой библиотеки лежат в /usr/include/libxml++-2.6/libxml++. Я создал пустой Plain C++ Project (using cmake) в QtCreator'e, заинклюдил вот так

#include <libxml++-2.6/libxml++/libxml++.h>

а при попытке сборки получаю вот что

/usr/include/libxml2/libxml/tree.h:16:31: fatal error: libxml/xmlversion.h: Нет такого файла или каталога

как и куда правильно прописать пути к библиотекам? есть подозрение, что это задача cmake? ткните носом пожалуйста.

libxml2-dev установлен естественно.

 , , ,

WRG
()

авиапочта и Li-Ion

Слышал, что пересылать Li-Ion авиапочтой нельзя, т.е. из Китая теперь нельзя заказать пачку 18650?

 ,

WRG
()

Парковка головок при работе от батареи

Есть ноут с диском ST750LM022. В /etc/rc.local добавлено

hdparm -S 0 -B 255 /dev/sda
Это ничуть не мешает головкам парковаться по нескольку раз в минуту. что еще можно попробовать? Фризы во время раскрутки раздражжают, да и на ресурсе сказывается. При работе от сети головки не паркуются.

 ,

WRG
()

RSS подписка на новые темы