1-wire -> ПК реализация
-
Мастер Ломастер
- Поставщик валерьянки для Кота
- Сообщения: 1995
- Зарегистрирован: Ср май 11, 2011 21:37:45
- Откуда: Цветочный город
- Контактная информация:
Re: 1-wire -> ПК реализация
мысли есть.
1. никогда не используйте никакую иную оптимизацию, кроме -Os
2. обязательно добавьте в опции компилятора -ffunction-sections
3. обязательно добавьте в опции линкера -Wl,-gc-sections (п.2 и 3 добавлять точно так, как здесь написано, без малейшей отсебятины)
4. разберитесь с типом параметров функций, типом возвращаемых ими значений - где нет нужды, не используйте int и другие типы со знаком.
5. не пишите бессмысленные и лишние команды и операторы "на всякий случай"
6. все функции, которые "больше никому не нужны", делайте static
ну, как-то так, для начала.
1. никогда не используйте никакую иную оптимизацию, кроме -Os
2. обязательно добавьте в опции компилятора -ffunction-sections
3. обязательно добавьте в опции линкера -Wl,-gc-sections (п.2 и 3 добавлять точно так, как здесь написано, без малейшей отсебятины)
4. разберитесь с типом параметров функций, типом возвращаемых ими значений - где нет нужды, не используйте int и другие типы со знаком.
5. не пишите бессмысленные и лишние команды и операторы "на всякий случай"
6. все функции, которые "больше никому не нужны", делайте static
ну, как-то так, для начала.
битва с дураками проиграна, победители торжествуют. слава победителям!
- Реклама
- danger3466
- Встал на лапы
- Сообщения: 135
- Зарегистрирован: Ср дек 21, 2011 12:18:39
Re: 1-wire -> ПК реализация
OWI_Send_1 и OWI_Send_0 совместил в одну функцию, так добавилось еще 10 кб 
- danger3466
- Встал на лапы
- Сообщения: 135
- Зарегистрирован: Ср дек 21, 2011 12:18:39
Re: 1-wire -> ПК реализация
OWI_Send_1 и OWI_Send_0 убрал как функции, они только из одного места выполсялись
Теперь 22кб нужно отваевать 
- danger3466
- Встал на лапы
- Сообщения: 135
- Зарегистрирован: Ср дек 21, 2011 12:18:39
Re: 1-wire -> ПК реализация
Код: Выделить всё
1. никогда не используйте никакую иную оптимизацию, кроме -OsКод: Выделить всё
2. обязательно добавьте в опции компилятора -ffunction-sectionsКод: Выделить всё
3. обязательно добавьте в опции линкера -Wl,-gc-sectionsКод: Выделить всё
4. разберитесь с типом параметров функций, типом возвращаемых ими значений - где нет нужды, не используйте int и другие типы со знаком.Код: Выделить всё
5. не пишите бессмысленные и лишние команды и операторы "на всякий случай"Код: Выделить всё
6. все функции, которые "больше никому не нужны", делайте static Ну в общем пока еще и место осталось, пройдусь ка по функциям внимательно...
-
Мастер Ломастер
- Поставщик валерьянки для Кота
- Сообщения: 1995
- Зарегистрирован: Ср май 11, 2011 21:37:45
- Откуда: Цветочный город
- Контактная информация:
Re: 1-wire -> ПК реализация
-ffunction-sections работает в паре с -Wl,-gc-sections и никак иначе, поотдельности эти опции бесполезны. вторая иногда помогает и сама по себе, но в паре лучше.
в другой теме я вам уже давал ответ по поводу БИТОВОГО типа - потрудитесь прочесть хотя бы его, если уж на чтение справочника по языку Си вас не хватает.
по поводу static - см. выше: букварь по Си вам поможет. нельзя писать программы, не удосужившись даже разобраться с языком, на котором пишите. во всяком случае по поводу ключевых слов языка надо не на форуме спрашивать, а сразу в справочник лезть.
что касается знаковых типов, то char и unsigned char одного размера, но вот некоторые математические операции с ними будут порождать совершенно разный объем кода. еще хуже с int и unsigned int может быть ситуация
в другой теме я вам уже давал ответ по поводу БИТОВОГО типа - потрудитесь прочесть хотя бы его, если уж на чтение справочника по языку Си вас не хватает.
по поводу static - см. выше: букварь по Си вам поможет. нельзя писать программы, не удосужившись даже разобраться с языком, на котором пишите. во всяком случае по поводу ключевых слов языка надо не на форуме спрашивать, а сразу в справочник лезть.
что касается знаковых типов, то char и unsigned char одного размера, но вот некоторые математические операции с ними будут порождать совершенно разный объем кода. еще хуже с int и unsigned int может быть ситуация
битва с дураками проиграна, победители торжествуют. слава победителям!
- Реклама
- danger3466
- Встал на лапы
- Сообщения: 135
- Зарегистрирован: Ср дек 21, 2011 12:18:39
Re: 1-wire -> ПК реализация
Про бит уже видил, и книжку листаю, только она кажись так себе, дезинформирует 
Мда, опыт великая штука...
Отжал 200байт
Статик я так думал это для переменных, что бы создать переменную глобально, но только для данной функции, как оно влияет на функцию? Функция итак объявляется в глобальном окружении... Будем искать еще мануалы
Мда, опыт великая штука...
Отжал 200байт
Статик я так думал это для переменных, что бы создать переменную глобально, но только для данной функции, как оно влияет на функцию? Функция итак объявляется в глобальном окружении... Будем искать еще мануалы
- danger3466
- Встал на лапы
- Сообщения: 135
- Зарегистрирован: Ср дек 21, 2011 12:18:39
Re: 1-wire -> ПК реализация
От статик размер увеличивается
Компилятор ругается что я main объявил как void, коме он результат передать пытается?
Фиг с ним или вернуть?
Компилятор ругается что я main объявил как void, коме он результат передать пытается?
Фиг с ним или вернуть?
Последний раз редактировалось danger3466 Вт дек 27, 2011 09:51:47, всего редактировалось 1 раз.
-
Мастер Ломастер
- Поставщик валерьянки для Кота
- Сообщения: 1995
- Зарегистрирован: Ср май 11, 2011 21:37:45
- Откуда: Цветочный город
- Контактная информация:
Re: 1-wire -> ПК реализация
последний раз вам напоминаю: все данные ранее советы надо применять одновременно. один вычеркните - и результат будет не тот. есть еще некоторые советы по оптимизации, но покуда из этого вы не научитесь выжимать все возможное - смысла рассказывать о них нет.
битва с дураками проиграна, победители торжествуют. слава победителям!
- danger3466
- Встал на лапы
- Сообщения: 135
- Зарегистрирован: Ср дек 21, 2011 12:18:39
Re: 1-wire -> ПК реализация
Так я все сделал! Делал по порядку и смотрел на эффект и так до конца дошел где статик, но эффект после статик обратныйМастер Ломастер писал(а):последний раз вам напоминаю: все данные ранее советы надо применять одновременно. один вычеркните - и результат будет не тот. есть еще некоторые советы по оптимизации, но покуда из этого вы не научитесь выжимать все возможное - смысла рассказывать о них нет.
- danger3466
- Встал на лапы
- Сообщения: 135
- Зарегистрирован: Ср дек 21, 2011 12:18:39
Re: 1-wire -> ПК реализация
Makefile дать в доказательство? 
- danger3466
- Встал на лапы
- Сообщения: 135
- Зарегистрирован: Ср дек 21, 2011 12:18:39
Re: 1-wire -> ПК реализация
Имеется в виду если функция используется всего один раз?
-
Мастер Ломастер
- Поставщик валерьянки для Кота
- Сообщения: 1995
- Зарегистрирован: Ср май 11, 2011 21:37:45
- Откуда: Цветочный город
- Контактная информация:
Re: 1-wire -> ПК реализация
че у вас за кодировка в файлах - русские комменты кракозямбами и не могу понять, какую кодировку выбрать...
битва с дураками проиграна, победители торжествуют. слава победителям!
- danger3466
- Встал на лапы
- Сообщения: 135
- Зарегистрирован: Ср дек 21, 2011 12:18:39
Re: 1-wire -> ПК реализация
UTF8Мастер Ломастер писал(а):че у вас за кодировка в файлах - русские комменты кракозямбами и не могу понять, какую кодировку выбрать...
Я думал успел удалить сообщение, давай дам исходники, посмотрите, уже башка болит, в стимуляторе все вроде верно работает в железе читает сплошь 1, сначала думал что информация поступает, оказалось у функции скобки не поставил и он мне адрес функции читал
Там есть проект для VMLAB, только в исходниках я комментировал задержку в 800мс, что бы в стимуляторе долго не ждать
- Вложения
-
- ATtiny2313.zip
- (4.4 КБ) 142 скачивания
-
Мастер Ломастер
- Поставщик валерьянки для Кота
- Сообщения: 1995
- Зарегистрирован: Ср май 11, 2011 21:37:45
- Откуда: Цветочный город
- Контактная информация:
Re: 1-wire -> ПК реализация
показалось (или на самом деле?), что у вас в функции передачи бита перед тем, как установить уровень имеется задержка аж 10 микросекунд?! это зачем такое? передача бита должна делаться так:
1. давим линию в 0
2. ждем 1 мкс
3. устанавливаем в линии НУЖНЫЙ уровень
4. ждем дальше до конца тайм-слота
чтение чуть иначе.
но похоже, чтение верно сделано или близко к тому. позже посмотрю внимательнее
1. давим линию в 0
2. ждем 1 мкс
3. устанавливаем в линии НУЖНЫЙ уровень
4. ждем дальше до конца тайм-слота
чтение чуть иначе.
но похоже, чтение верно сделано или близко к тому. позже посмотрю внимательнее
битва с дураками проиграна, победители торжествуют. слава победителям!
- danger3466
- Встал на лапы
- Сообщения: 135
- Зарегистрирован: Ср дек 21, 2011 12:18:39
Re: 1-wire -> ПК реализация
Попробую, спасибо что помогаетеМастер Ломастер писал(а):показалось (или на самом деле?), что у вас в функции передачи бита перед тем, как установить уровень имеется задержка аж 10 микросекунд?! это зачем такое? передача бита должна делаться так:
1. давим линию в 0
2. ждем 1 мкс
3. устанавливаем в линии НУЖНЫЙ уровень
4. ждем дальше до конца тайм-слота
чтение чуть иначе.
но похоже, чтение верно сделано или близко к тому. позже посмотрю внимательнее
-
Мастер Ломастер
- Поставщик валерьянки для Кота
- Сообщения: 1995
- Зарегистрирован: Ср май 11, 2011 21:37:45
- Откуда: Цветочный город
- Контактная информация:
Re: 1-wire -> ПК реализация
не пробуйте - я сбрехал. не могу сосредоточиться - нервы все... погодите маленькоdanger3466 писал(а):Попробую, спасибо что помогаете
битва с дураками проиграна, победители торжествуют. слава победителям!
- danger3466
- Встал на лапы
- Сообщения: 135
- Зарегистрирован: Ср дек 21, 2011 12:18:39
Re: 1-wire -> ПК реализация
НАШЕЛ!
- danger3466
- Встал на лапы
- Сообщения: 135
- Зарегистрирован: Ср дек 21, 2011 12:18:39
Re: 1-wire -> ПК реализация
Помните я использовал ваш код?
/*void OWI_Send_byte(unsigned char x){
unsigned char mask;
for(mask = 0x80; mask; mask >>= 1) {
if(x & mask) {
OWI_Send_bit(1);
} else {
OWI_Send_bit(0);
}
}
}*/
void OWI_Send_byte(unsigned char command)
{
unsigned char data=command, i;
for(i=0;i<8;i++)
{
data=data<<7; //Сдвиг на i разрядов влево
command=command>>1; //Сдвиг передаваемого байта
if(data==0x80) OWI_Send_bit(1); //Передача лог.1
else OWI_Send_bit(0); //Передача лог.0
data=command; //Новое значение для сдвига
};
}
Вставил функцию из старого файла и заработало!
/*void OWI_Send_byte(unsigned char x){
unsigned char mask;
for(mask = 0x80; mask; mask >>= 1) {
if(x & mask) {
OWI_Send_bit(1);
} else {
OWI_Send_bit(0);
}
}
}*/
void OWI_Send_byte(unsigned char command)
{
unsigned char data=command, i;
for(i=0;i<8;i++)
{
data=data<<7; //Сдвиг на i разрядов влево
command=command>>1; //Сдвиг передаваемого байта
if(data==0x80) OWI_Send_bit(1); //Передача лог.1
else OWI_Send_bit(0); //Передача лог.0
data=command; //Новое значение для сдвига
};
}
Вставил функцию из старого файла и заработало!
- danger3466
- Встал на лапы
- Сообщения: 135
- Зарегистрирован: Ср дек 21, 2011 12:18:39
Re: 1-wire -> ПК реализация
Я кстати эту функцию вообще не понимаю, ох как я не любил дискретную математику...
-
Мастер Ломастер
- Поставщик валерьянки для Кота
- Сообщения: 1995
- Зарегистрирован: Ср май 11, 2011 21:37:45
- Откуда: Цветочный город
- Контактная информация:
Re: 1-wire -> ПК реализация
дело в том, что направление сдвига у меня не такое, как у вас. я посмотрел на ваш код - там два сдвига, вот я взял первый - а он не тот, что надо... передавать-то биты надо от младшего к старшему, а не от старшего к младшему... т.е. правильная передача в "моем" варианте должна быть такой:danger3466 писал(а):Помните я использовал ваш код?
/*void OWI_Send_byte(unsigned char x){
unsigned char mask;
for(mask = 0x80; mask; mask >>= 1) {
if(x & mask) {
OWI_Send_bit(1);
} else {
OWI_Send_bit(0);
}
}
}*/
void OWI_Send_byte(unsigned char command)
{
unsigned char data=command, i;
for(i=0;i<8;i++)
{
data=data<<7; //Сдвиг на i разрядов влево
command=command>>1; //Сдвиг передаваемого байта
if(data==0x80) OWI_Send_bit(1); //Передача лог.1
else OWI_Send_bit(0); //Передача лог.0
data=command; //Новое значение для сдвига
};
}
Вставил функцию из старого файла и заработало!
Код: Выделить всё
void OWI_Send_byte(unsigned char x){
unsigned char mask;
for(mask = 1; mask; mask <<= 1) {
if(x & mask) {
OWI_Send_bit(1);
} else {
OWI_Send_bit(0);
}
}
}P.S. я вот тоже не понимаю, как ваша функция работает...
битва с дураками проиграна, победители торжествуют. слава победителям!


