-
- «Та нє»(тм) IAR/STM8 1.30 таки крепко недолизан. Вплоть до такого, что ++var; делает одной асмовой командой инкремента ячейки памяти а --var; — грузит в аккумулятор, декрементирует, выгружает. SFR = const; уже научился делать при помощи MOV =ReAl=(110 знак., 12.02.2012 18:52,
)
- И на чем остановились в итоге? - Andreas(12.02.2012 19:20)
- Вместо проверки 1 бита в 1 байте, он грузит 4 байта и делает И с ним. Вместо простой загрузки 0xFF в старший байт - опять загрузка 4 байт и ИЛИ с ними. Другой компилятор это понял правильно, но уж очень он другой. - Andreas(12.02.2012 15:44)
- попробуй объявить union и работай с байтами, раз компилятор тебя не понимает. lentjaj1(179 знак., 12.02.2012 16:19 - 18:02)
- Ассемблеристы такие ассемблеристы... На endianness кладём болт. - fk0(12.02.2012 17:21)
- Это я уже с горя попробовал, работает нормально, но этож какой маразм, зависящий от реализации компилятора причем. А таких моментов предстоит много... В общем, похоже проще заложиться на более жирный проц, который аж на 5рублей дороже :) - Andreas(12.02.2012 16:34)
- Вот-вот, лучше арм: там компиляторов много хороших и разных. Тоже делал что-то для STM8, и осталось впечатление, что яр там немного схалтурил. - SciFi(12.02.2012 22:29)
- это будет работать в большинстве случаев. lentjaj1(115 знак., 12.02.2012 17:31)
- Это НЕ БУДЕТ работать даже на x51 с компилятором KEIL, например. Потому, что там ендианность чисел для разных типов разная. Не говоря уж о разных CPU. - fk0(12.02.2012 17:36)
- об этом пусть думает тот кто использует не Intel числа, тем более стандартом Си это не предусмотрено. lentjaj1(102 знак., 12.02.2012 17:44 - 17:48)
- Числа не разделяются на "интел" и "не интел". Стандартом не предусмотрено потому, что этот порядок байтов у всех разный. И поэтому незачем пытаться писать говнокод наступая на давно известные грабли. И НЕЗАЧЕМ УЧИТЬ ПИСАТЬ ГОВНОКОД. В стандарте fk0(482 знак., 12.02.2012 18:03)
- это уже из разряда религиозных предпочтений, а говнокод это использование макросов для прокрутки переменных (не констант). lentjaj1(88 знак., 12.02.2012 18:08)
- А можно ещё и так, платформонезависимый код. lentjaj1(233 знак., 12.02.2012 18:01)
- Числа не разделяются на "интел" и "не интел". Стандартом не предусмотрено потому, что этот порядок байтов у всех разный. И поэтому незачем пытаться писать говнокод наступая на давно известные грабли. И НЕЗАЧЕМ УЧИТЬ ПИСАТЬ ГОВНОКОД. В стандарте fk0(482 знак., 12.02.2012 18:03)
- об этом пусть думает тот кто использует не Intel числа, тем более стандартом Си это не предусмотрено. lentjaj1(102 знак., 12.02.2012 17:44 - 17:48)
- Это НЕ БУДЕТ работать даже на x51 с компилятором KEIL, например. Потому, что там ендианность чисел для разных типов разная. Не говоря уж о разных CPU. - fk0(12.02.2012 17:36)
- Не нужно изращений. Нужно бит проверить -- так и пиши if (my_u32_variable_name & 1<<N_BIT) do_something... - fk0(12.02.2012 15:53)
- Это одно и то же и компилятор одинаково воспринимает константу, как ее не запиши. - Andreas(12.02.2012 16:01)
- Ну если флаги расположить в "атомарных" переменных, то и проблем вроде не будет. Какой смысл группирования флагов в переменные больше? - Vladimir Ljaschko(12.02.2012 16:08)
- это больше для программиста, а не для компилятора. fk0 прав, лучше сразу стараться отучиться от говнокодирования. Но на генерируемый код в данном случае это влиять не должно - koyodza(12.02.2012 16:06)
- Практически всегда я так и пишу, здесь редкое исключение, биты лень считать было. - Andreas(12.02.2012 16:08)
- Это одно и то же и компилятор одинаково воспринимает константу, как ее не запиши. - Andreas(12.02.2012 16:01)
- а уровень оптимизации какой? - koyodza(12.02.2012 15:47)
- Максимальный. - Andreas(12.02.2012 15:49)
- ну не знаю. Может, просто не допилили ещё компилятор - koyodza(12.02.2012 15:51)
- Максимальный. - Andreas(12.02.2012 15:49)
- попробуй объявить union и работай с байтами, раз компилятор тебя не понимает. lentjaj1(179 знак., 12.02.2012 16:19 - 18:02)
- «Та нє»(тм) IAR/STM8 1.30 таки крепко недолизан. Вплоть до такого, что ++var; делает одной асмовой командой инкремента ячейки памяти а --var; — грузит в аккумулятор, декрементирует, выгружает. SFR = const; уже научился делать при помощи MOV =ReAl=(110 знак., 12.02.2012 18:52,