-
- Нужно не else после continue выкинуть, а изменить проверку условия на противоположную и выкинуть continue, иначе до ptr++ дело не дойдёт. Или так for( cnt = 0, ptr = Sys_Timers_Queue; cnt < ST_QUANTITY; cnt++, ptr++ ) Ну и ; после for() убрать, а зануда(16 знак., 24.08.2013 23:52, )
- Да, возможно вас что-то будет раздражать, но! Поймите, это для вас сейчас элементарщина. Для меня же все в си в новинку. Сейчас мне на асме проще реализовать многое. Но раз уж перехожу, поэтому... - mazur(24.08.2013 21:31)
- Ещё раз напоминаю, что переписывать ассемблерный код на Си - пустая трата времени. Убить в себе
драконаассемблер - архиважная задача. - SciFi(24.08.2013 21:55)- Я держу в памяти ваши слова и пытаюсь шагнуть в другое измерение, скажем так. Но! На данный момент чего-то недостает. Какого-то кусочка информации. Вам это может показаться элеметарщиной, потому никто и не говорит. Примеры да, но чего-то еще не mazur(9 знак., 24.08.2013 22:03)
- Давате сюда ващ файл и хидер, а то уже надоело вашими руками поправлять - на одно исправление рождается две новых ощибки. - Ксения(24.08.2013 22:45)
- Вот весь проект. mazur(24.08.2013 22:51)
- Ошибки: Ксения(166 знак., 24.08.2013 23:51 - 23:55)
- Спасибо! Скомпилировалось. Пока буду дальше разбираться. - mazur(25.08.2013 01:30)
- А зачем там переменная cnt? Может так? Скрипач(141 знак., 25.08.2013 00:04)
- Счетчик cnt однобайтный, а указатель двухбайтный. Сравнение указателей обойдется дороже, чем счетчика с константой. - Ксения(25.08.2013 00:10)
- Инкремент+сравнение VS двухбайтное сравнение. - Скрипач(25.08.2013 00:13)
- У Мазура в ассемблере счетчик был отдельно от указателя. Пусть так и будет, чтобы он заценил аналогию. - Ксения(25.08.2013 00:17)
- Я уже думал о том, чтобы сравнивать значение указателя с кол-вом счетчиком, то бишь, TMRS_QUANTITY. В примере Скрипача так сделано? - mazur(25.08.2013 01:51)
- Да, так. Только можно чуть понятнее написать: Ксения(1941 знак., 25.08.2013 02:01 - 02:26)
- Я уже думал о том, чтобы сравнивать значение указателя с кол-вом счетчиком, то бишь, TMRS_QUANTITY. В примере Скрипача так сделано? - mazur(25.08.2013 01:51)
- У Мазура в ассемблере счетчик был отдельно от указателя. Пусть так и будет, чтобы он заценил аналогию. - Ксения(25.08.2013 00:17)
- Инкремент+сравнение VS двухбайтное сравнение. - Скрипач(25.08.2013 00:13)
- Счетчик cnt однобайтный, а указатель двухбайтный. Сравнение указателей обойдется дороже, чем счетчика с константой. - Ксения(25.08.2013 00:10)
- Ошибки: Ксения(166 знак., 24.08.2013 23:51 - 23:55)
- Вот весь проект. mazur(24.08.2013 22:51)
- Давате сюда ващ файл и хидер, а то уже надоело вашими руками поправлять - на одно исправление рождается две новых ощибки. - Ксения(24.08.2013 22:45)
- Я держу в памяти ваши слова и пытаюсь шагнуть в другое измерение, скажем так. Но! На данный момент чего-то недостает. Какого-то кусочка информации. Вам это может показаться элеметарщиной, потому никто и не говорит. Примеры да, но чего-то еще не mazur(9 знак., 24.08.2013 22:03)
- Ещё раз напоминаю, что переписывать ассемблерный код на Си - пустая трата времени. Убить в себе
- Вот результат на данный момент: mazur(24.08.2013 21:27)
- Не очень понимаю зачем typedef Скрипач(114 знак., 24.08.2013 21:47)
- Затем, чтобы не писать каждый раз Bill(24 знак., 25.08.2013 16:53)
- А фиг его знает, этот GCC. "Большие" компиляторы (под x86) слово struct не требуют, относясь к имени структуры, как к самодельному типу данных. По крайней мере, в C++ это всегда так, но так ли это всегда в обычном C, сказать трудно. Многое зависит Ксения(117 знак., 25.08.2013 17:11)
- Дело в том, что структуры/объединения могут и не иметь имен (ярлыков). Тогда как? - Bill(25.08.2013 17:29)
- Тогда выход только один - заводить объекты в том же месте, где объявлена структура. Но тогда описание таких объектов нельзя будет вынести в хидер, т.к. в хидере заводить объекты запрещено (хотя компилятор иногда можно обмануть). Других решений я Ксения(56 знак., 25.08.2013 22:22)
- typedef - механизм объявления новых типов данных вообще. Структуры - всего лишь частный случай. Кстати, Bill(88 знак., 26.08.2013 06:12 - 06:49)
- Это юнионы и структуры механизм объявления новых типов. А typedef для объявления синонимов для существующих типов. - Юра(26.08.2013 08:29, )
- Вовсе необязательно синонимы. Например, можно создать Bill(60 знак., 26.08.2013 09:53)
- Так еще и не разрешит. Разрешит typedef char string[ 255 ]; или на худой конец typedef char* string; Типичные синонимы. - Юра(27.08.2013 00:18, )
- Компилятор не отличает два типа с разным (через typedef) именем, но одинаковой декларацией. Поэтому синоним. А структуры (unions, классы) -- всегда отличает. - fk0(26.08.2013 10:30)
- Вовсе необязательно синонимы. Например, можно создать Bill(60 знак., 26.08.2013 09:53)
- Это юнионы и структуры механизм объявления новых типов. А typedef для объявления синонимов для существующих типов. - Юра(26.08.2013 08:29, )
- typedef - механизм объявления новых типов данных вообще. Структуры - всего лишь частный случай. Кстати, Bill(88 знак., 26.08.2013 06:12 - 06:49)
- Тогда выход только один - заводить объекты в том же месте, где объявлена структура. Но тогда описание таких объектов нельзя будет вынести в хидер, т.к. в хидере заводить объекты запрещено (хотя компилятор иногда можно обмануть). Других решений я Ксения(56 знак., 25.08.2013 22:22)
- Дело в том, что структуры/объединения могут и не иметь имен (ярлыков). Тогда как? - Bill(25.08.2013 17:29)
- А фиг его знает, этот GCC. "Большие" компиляторы (под x86) слово struct не требуют, относясь к имени структуры, как к самодельному типу данных. По крайней мере, в C++ это всегда так, но так ли это всегда в обычном C, сказать трудно. Многое зависит Ксения(117 знак., 25.08.2013 17:11)
- Затем, чтобы не писать каждый раз Bill(24 знак., 25.08.2013 16:53)
- Вам же русским языком сказали, а на примерах показали, что указатель должен быть ТОГО ЖЕ САМОГО ТИПА, что и структура, на которую он указует. Почему же у вас указатель не на структуру, а на массив из u16??? Замените "u16 *ptr" на "struct Ксения(18 знак., 24.08.2013 21:41 - 21:45)
- Я тогда думал, что раз X, Y, Z двухбайтные указатели, значит u16. - mazur(25.08.2013 01:32)
- -> mazur(24.08.2013 22:07)
- ---> - Скрипач(24.08.2013 22:33 - 22:43)
- struct tmrs_queue *p_tmrs_queue = Timers_Queue; - Ксения(24.08.2013 22:34)
- if( sys_tick & (1<<SYS_TICK_FLG)) // уберите == 1, т.к. это может быть только при SYS_TICK_FLG=0 Ксения(123 знак., 24.08.2013 22:39 - 22:42)
- Тоже покритикую: комментарии типа "заводим указатель на структуру blah-blah" бесполезны, так как и без комментария сей факт очевиден. Убейте в себе ещё и Капитана Очевидность SciFi(213 знак., 24.08.2013 22:41)
- Дважды заводите ptr, уберите дубль. Используейте в цикле именно его, а не какую-то ерунду вроде p_tars_queue, которая невесть где определена. Я же вам написала код, какого хрена вы его уродуете? - Ксения(24.08.2013 22:29)
- Хорошо, почему ptr, а не p_tmrs_queue? - mazur(24.08.2013 22:30)
- Можно и p_tmrs_queue имя дать указателю, но тогда определите его, так, как определили ptr. - Ксения(24.08.2013 22:32)
- Я бы и сама написала, но не могу скопировать с ваших картинок. - Ксения(24.08.2013 22:34)
- Можно и p_tmrs_queue имя дать указателю, но тогда определите его, так, как определили ptr. - Ксения(24.08.2013 22:32)
- Хорошо, почему ptr, а не p_tmrs_queue? - mazur(24.08.2013 22:30)
- extern struct tmrs_queue Timers_Queue[]; - Скрипач(24.08.2013 22:24)
- ---> - Скрипач(24.08.2013 22:33 - 22:43)
- Не очень понимаю зачем typedef Скрипач(114 знак., 24.08.2013 21:47)
- В данный момент для меня трудности во всех приведенных примерах и материалах по указателям имена чего-то там. Если на асме я просто указал начальный адрес Timers_Queue и смещение элемента скажем, EL_SIZE, статус+счетчик, 1+2=3, то в материалах и mazur(480 знак., 24.08.2013 21:13)
- Если в C вы новичок, но не советую использовать typedef. Пользуйтесь объявлением структуры. Вот так: Ксения(736 знак., 24.08.2013 21:33 - 21:37)
- Ну и на C тоже самое только, только к указателю добавляет на байтовое смещение, а смещение, выраженное числом элементов. А в байтовое смещение переведет сам компилятор. - Ксения(24.08.2013 21:24)