-
+135
- 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
void permutate(int a[10], int n) {
// God bless mr. Donald E. Knuth;
// Tons of oil to English bell ringers!
// WARNING: It's dangerous to go alone, take this^H read this shit
int c[10], o[10], j, s, q;
for (j = 1; j <= n; j++) {
c[j] = 0;
o[j] = 1;
}
while (1) {
check(a, n);
j = n;
s = 0;
while (1) {
do {
q = c[j] + o[j];
if (q < 0) { o[j] = -o[j]; --j; }
} while (q < 0);
if (q == j) {
if (j == 1) return; else ++s;
o[j] = -o[j];
--j;
continue;
}
int t = a[j - c[j] + s];
a[j - c[j] + s] = a[j - q + s];
a[j - q + s] = t;
c[j] = q;
break;
}
}
}
Реализация алгоратма "простых изменений" по описанию из Кнута (т4. Комбинаторный поиск, генерация всех перестановок).
Напрашивающиеся goto раздражают, было бы приятно увидеть менее пахучие реализации. Не смог нагуглить, забугорного названия этого алгоритма не знаю, а про "простые изменения" тинай вики молчит.
vistefan,
13 Декабря 2013
-
+139
- 1
- 2
byteL = (length & (0x00ff));
byteH = (length - byteL)>>BITS_IN_BYTE;
Вдруг биты справа полезут прямо из компьютера, давайте вычтем!
Макрос BITS_IN_BYTE особенно радует!
sermp,
04 Декабря 2013
-
+130
- 1
http://ithappens.ru/story/11670
TarasB,
28 Ноября 2013
-
+139
- 1
- 2
- 3
- 4
- 5
- 6
- 7
// drivers/usb/serial/cp210x.c
static void cp210x_close(struct usb_serial_port *port)
{
usb_serial_generic_close(port);
cp210x_set_config_single(port, CP210X_IFC_ENABLE, UART_DISABLE);
}
Дело было так.
На прошлой неделе, по просьбе одного знакомого, я сел писать прошивку для attiny2313, которая должна принять по RS-232 строчку и исполнить соответствующую команду. Потратив несколько минут на раскур даташита, а именно главы, посвященной USART, я набросал тупейший код на сях, залил его на чип, и затестил через миником. Все работало нормально, ничто не предвещало беды...
Но когда я попробовал послать команду через echo, меня ждал облом. Она не выполнилась. На 10 раз проверил код - все ок, в миникоме пашет идеально, через echo - куй. Под виндой та же ересь. Чем отличается echo от миникома? Правильно, тем, что оно отправляет символы подряд, без пауз. Контроллер тактировался от внутренного генератора, поэтому я подумал, что оный хреново откалиброван, и что надо бы его настроить... Вечер ушел на написание прошивки для калибровки... Оказалось, что частота действительно уплыла на 2% от расчетной, что некритично. Ну да пофиг, откалибровался до +-0.5%. Запустил echo - куй. Послал все нахрен, и пошел спать...
(Продолжение в комменте ниже)
bormand,
26 Ноября 2013
-
+135
- 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
static int
wl_iw_get_country(
struct net_device *dev,
struct iw_request_info *info,
union iwreq_data *wrqu,
char *extra
)
{
char *ccode;
int current_channels;
WL_TRACE(("%s\n", __FUNCTION__));
ccode = dhd_bus_country_get(dev);
if(ccode){
if(0 == strcmp(ccode, "Q2"))
current_channels = 11;
else if(0 == strcmp(ccode, "EU"))
current_channels = 13;
else if(0 == strcmp(ccode, "JP"))
current_channels = 14;
}
sprintf(extra, "Scan-Channels = %d", current_channels);
printk("Get Channels return %d,(country code = %s)\n",current_channels, ccode);
return 0;
}
На этот раз отличился броадком.
Подсказка: Пользователи с кантри-кодом RU должны СТРАДАТЬ!
Necromant,
25 Ноября 2013
-
+136
- 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
- 63
/*
* Just a wifi driver hooker.
*
* Yongle Lai @ 2009-05-10 @ Rockchip
*/
#include <linux/init.h>
#include <linux/module.h>
#include <linux/kernel.h>
MODULE_LICENSE("Dual BSD/GPL");
#ifdef CONFIG_MODVERSIONS
#define MODVERSIONS
#include <linux/modversions.h>
#endif
//#define OLD_WIFI_IFACE
#ifdef OLD_WIFI_IFACE
extern int mv88w8686_if_sdio_init_module(void);
extern void mv88w8686_if_sdio_exit_module(void);
#else
extern int rockchip_wifi_init_module(void);
extern void rockchip_wifi_exit_module(void);
#endif
static int wifi_launcher_init(void)
{
int ret;
printk("=======================================================\n");
printk("==== Launching Wi-Fi driver! (Powered by Rockchip) ====\n");
printk("=======================================================\n");
#ifdef OLD_WIFI_IFACE
ret = mv88w8686_if_sdio_init_module();
if (ret) /* Try again */
ret = mv88w8686_if_sdio_init_module();
#else
ret = rockchip_wifi_init_module();
//if (ret) /* Try again */
// ret = rockchip_wifi_init_module();
#endif
return ret;
}
static void wifi_launcher_exit(void)
{
printk("=======================================================\n");
printk("== Dis-launching Wi-Fi driver! (Powered by Rockchip) ==\n");
printk("=======================================================\n");
#ifdef OLD_WIFI_IFACE
mv88w8686_if_sdio_exit_module();
#else
rockchip_wifi_exit_module();
#endif
}
module_init(wifi_launcher_init);
module_exit(wifi_launcher_exit);
Вот так вот, просто и незатейливо на RK3188 включается и выключается вайфай.
Necromant,
25 Ноября 2013
-
+136
- 1
- 2
- 3
- 4
- 5
int rkwifi_set_country_code(char *code)
{
sprintf(code, "%s", "EU");
return 0;
}
Где-то в сырцах драйвера вайфая от RK3188...
Necromant,
25 Ноября 2013
-
+115
- 1
- 2
- 3
#define TEN 10
#define TEEN 100
#define TEEEN 1000
glook,
15 Ноября 2013
-
+137
- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
int memcmp (const void* v1, const void* v2, size_t n)
{
uint32_t *s1;
uint32_t *s2;
size_t i;
s1 = (uint32_t*) v1;
s2 = (uint32_t*) v2;
for (i = 0; i < n; i++) {
if (*s1 != *s2) {
return *(const uint32_t *)s1 >
*(const uint32_t *)s2 ? 1 : -1;
}
s1++;
s2++;
}
return 0;
}
Реализация memcmp в библиотеке одной малоизвестной "учебной" ОС реального времени. Учебной в том смысле, что по этой системе разве что доклады, презентации и статьи делали, где-то реально она вряд ли использовалась.
Для интересующихся http://pok.safety-critical.net/
WGH,
14 Ноября 2013
-
+143
- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
VariableValue *locVars;
locVars = new VariableValue;
locVars->variable = "r";
locVars->value = mTaskParameters.rNodes[0]; //x_low;
locVars->link = new VariableValue;
locVars->link->variable = "theta";
locVars->link->value = mTaskParameters.thetaNodes[0]; //y_low;
locVars->link->link = new VariableValue;
locVars->link->link->variable = "r_min";
locVars->link->link->value = mTaskParameters.rNodes[0]; //this->x_low;
locVars->link->link->link = new VariableValue;
locVars->link->link->link->variable = "r_max";
locVars->link->link->link->value = mTaskParameters.rNodes[mTaskParameters.rNodes.size()-1]; //this->x_high;
locVars->link->link->link->link = NULL;
Построение связного списка
xredor,
12 Ноября 2013