|
warning: implicit declaration of function 'memset', почему лишь warning и почему все работает? |
|
|
|
 |
Ответов
|
Sep 23 2010, 10:05
|
Местный
  
Группа: Свой
Сообщений: 279
Регистрация: 2-07-08
Из: Новосибирск
Пользователь №: 38 699

|
Советую ознакомиться с http://ru.wikipedia.org/wiki/%D0%9F%D1%80%...%86%D0%B8%D0%B8А вообще - ИМХО это бадстайл (функции без прототипа) Цитата(777777 @ Sep 23 2010, 13:18)  А она и так не занимает места. Не думаешь ли ты, что включение какого-то h-файла может что-то добавить к твоему коду? В них хранятся лишь декларации, необходимые компилятору, которые не порождают ни код, ни переменных. Некоторые талантливые программисты могут вставлять в заголовочный файл декларации переменных. В таком случае, естественно размер кода будет увеличен
|
|
|
|
|
Sep 23 2010, 11:25
|

Профессионал
    
Группа: Участник
Сообщений: 1 091
Регистрация: 25-07-07
Из: Саратов
Пользователь №: 29 357

|
Цитата(_Pasha @ Sep 23 2010, 15:22)  Пример. Поддержка 7-сегментного индикатора. Кроме знакогенератора и определения собсна цифр как совокупности сегментов там ничего нет. Предлагаете знакогенератор определять где-то в другом месте, а в хедере описывать только как extern?  Я предлагаю определять массив с цифрами в той функции, которая будет ими пользоваться. В памяти программ, естественно. Как-то так: Код func() { static uint16_t Freq[] PROGMEM = { 19, 7, 2, 1 }; ... При чем тут h-файл - хз.
Сообщение отредактировал 777777 - Sep 23 2010, 11:30
|
|
|
|
|
Sep 23 2010, 11:57
|

Местный
  
Группа: Участник
Сообщений: 355
Регистрация: 27-03-07
Из: Україна, Чуднів
Пользователь №: 26 530

|
Цитата(777777 @ Sep 23 2010, 14:25)  Я предлагаю определять массив с цифрами в той функции, которая будет ими пользоваться. В памяти программ, естественно. для даного тривиального случая да для большого массива который используется многими функциями в разных с-файлах не получиться - памяти программ может не хватить, ИМХО
--------------------
нельзя недооценивать предсказуемость глупости
|
|
|
|
|
Sep 24 2010, 05:30
|

Профессионал
    
Группа: Участник
Сообщений: 1 091
Регистрация: 25-07-07
Из: Саратов
Пользователь №: 29 357

|
Цитата(sKWO @ Sep 23 2010, 15:57)  Цитата Я предлагаю определять массив с цифрами в той функции, которая будет ими пользоваться. В памяти программ, естественно. для даного тривиального случая да для большого массива который используется многими функциями в разных с-файлах не получиться - памяти программ может не хватить, ИМХО А для большого массива который используется многими функциями в разных с-файлах определять (define) массив в h-файле тем более нельзя - тогда будут либо проблемы линкера, либо (если его объявить static) в каждом C-файле будет содержаться отдельный экземпляр этого массива, что увеличит размер памяти. И каждая функция будет работать со своим массивом. Если он только для чтения, то ты этого не заметишь, если же это массив данных (в ОЗУ), то программа работать не будет. ЗЫ. только сейчас заметил: "памяти программ может не хватить"  Ты знаешь контроллеры, в которых память программ меньше, чем память данных? И поэтому такие массивы ты хранишь в ОЗУ? А позволь спросить, как ты их при этом инициализируешь? Ведь инициализировать их можно только из памяти программ, а если они там поместились, зачем из переписывать в ОЗУ?
Сообщение отредактировал 777777 - Sep 24 2010, 05:39
|
|
|
|
|
Sep 29 2010, 05:23
|

Местный
  
Группа: Участник
Сообщений: 355
Регистрация: 27-03-07
Из: Україна, Чуднів
Пользователь №: 26 530

|
Цитата(777777 @ Sep 24 2010, 08:30)  Ты знаешь контроллеры, в которых память программ меньше, чем память данных? А Вы знаете? Цитата(777777 @ Sep 23 2010, 14:25)  Я предлагаю определять массив с цифрами в той функции, которая будет ими пользоваться. В памяти программ, естественно. Как-то так: Код func() { static uint16_t Freq[] PROGMEM = { 19, 7, 2, 1 }; ... вы будете иметь доступ к массиву Freq из другой функции рассположеной в этом же файле?
--------------------
нельзя недооценивать предсказуемость глупости
|
|
|
|
|
Sep 29 2010, 17:01
|

Профессионал
    
Группа: Участник
Сообщений: 1 091
Регистрация: 25-07-07
Из: Саратов
Пользователь №: 29 357

|
Цитата(sKWO @ Sep 29 2010, 09:23)  А Вы знаете? Нет, поэтому и помещаю константные массивы в память программ, а не данных Цитата(sKWO @ Sep 29 2010, 09:23)  вы будете иметь доступ к массиву Freq из другой функции рассположеной в этом же файле? Этот массив другим функциям не нужен.
|
|
|
|
|
Sep 30 2010, 05:54
|

Местный
  
Группа: Участник
Сообщений: 355
Регистрация: 27-03-07
Из: Україна, Чуднів
Пользователь №: 26 530

|
Цитата(777777 @ Sep 29 2010, 20:01)  Этот массив другим функциям не нужен. Ну а если будет нужен, то Вы займётесь бездумным тиражированием и места ФЛЭШ может не хватить. Об этом я хотел и сказать. Особенно если массив большой а функций его использующих - много.
--------------------
нельзя недооценивать предсказуемость глупости
|
|
|
|
Сообщений в этой теме
Kris2007 warning: implicit declaration of function 'memset' Sep 22 2010, 12:39 Сергей Борщ Цитата(Kris2007 @ Sep 22 2010, 15:39) Поч... Sep 22 2010, 12:44 Kris2007 Хм т.е. все сделано правильно??
И #include ... Sep 23 2010, 05:50  Сергей Борщ Цитата(Kris2007 @ Sep 23 2010, 08:50) И ... Sep 23 2010, 06:01 vacvvn Цитата(Сергей Борщ @ Sep 22 2010, 16:44) ... Sep 23 2010, 06:05  777777 Цитата(vacvvn @ Sep 23 2010, 10:05) выход... Sep 23 2010, 06:18  Сергей Борщ Цитата(vacvvn @ Sep 23 2010, 09:05) Не вк... Sep 23 2010, 09:42   777777 Цитата(Сергей Борщ @ Sep 23 2010, 13:42) ... Sep 23 2010, 11:08    rezident Цитата(777777 @ Sep 23 2010, 17:08) потом... Sep 23 2010, 11:14    sKWO Цитата(777777 @ Sep 23 2010, 14:08) ЗЫ. s... Sep 23 2010, 11:15     777777 Цитата(sKWO @ Sep 23 2010, 15:15) static ... Sep 23 2010, 11:18      sergeeff Цитата(777777 @ Sep 23 2010, 14:18) Это д... Sep 23 2010, 11:22      MrYuran Цитата(777777 @ Sep 23 2010, 15:18) Это д... Sep 23 2010, 11:25      rezident Цитата(777777 @ Sep 23 2010, 17:18) Это д... Sep 23 2010, 13:33    Dima_G Цитата(777777 @ Sep 23 2010, 18:08) Спаси... Sep 23 2010, 15:32 MrYuran Цитата(Dima_G @ Sep 23 2010, 14:05) Некот... Sep 23 2010, 10:36  Dima_G Цитата(MrYuran @ Sep 23 2010, 17:36) Я вс... Sep 23 2010, 10:49        777777 Цитата(sKWO @ Sep 30 2010, 09:54) Ну а ес... Sep 30 2010, 06:12         sKWO Цитата(777777 @ Sep 30 2010, 09:12) Если ... Sep 30 2010, 07:15         Petka Цитата(777777 @ Sep 30 2010, 10:12) Нет, ... Sep 30 2010, 08:04          777777 Цитата(Petka @ Sep 30 2010, 12:04) Это за... Sep 30 2010, 10:38 Petka Цитата(Kris2007 @ Sep 22 2010, 16:39) ... Sep 29 2010, 10:00 Juray У меня почему-то линкер не ругался на глобальные п... Sep 30 2010, 12:30 IgorKossak Цитата(Juray @ Sep 30 2010, 15:30) А вот ... Sep 30 2010, 12:59 Juray Чистый С. gcc - WinAVR 20050214.
файл global.h:
К... Sep 30 2010, 13:14 IgorKossak Странно, что работает.
Грамотнее было бы U16 d_sta... Sep 30 2010, 13:20 Juray Да вот сам удивляюсь, читая эту ветку.
Что грамот... Sep 30 2010, 13:51 777777 Цитата(Juray @ Sep 30 2010, 17:51) Вам го... Sep 30 2010, 15:24  Juray Цитата(777777 @ Sep 30 2010, 19:24) Ты ду... Oct 1 2010, 11:56   777777 Цитата(Juray @ Oct 1 2010, 15:56) Сейчас ... Oct 1 2010, 16:36   mdmitry Цитата(Juray @ Oct 1 2010, 15:56) Сейчас ... Oct 2 2010, 08:29 rezident Возможно та версия WinAVR не применяла раздельную ... Sep 30 2010, 15:39 777777 Цитата(rezident @ Sep 30 2010, 19:39) Воз... Sep 30 2010, 15:58  rezident Цитата(777777 @ Sep 30 2010, 21:58) То ес... Sep 30 2010, 16:03 Juray Предупреждения - по умолчанию. Этого недостаточно?... Oct 2 2010, 08:44
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|