HEX
Свой-
Постов
54 -
Зарегистрирован
-
Посещение
Репутация
0 ОбычныйИнформация о HEX
-
Звание
Участник
Контакты
-
Сайт
Array
-
ICQ
Array
Информация
-
Город
Array
Посетители профиля
1 625 просмотров профиля
-
у меня собственно так и есть, универсальность эта другая тема. да жульничество, но интервейс вызова Read(void* Buff, int N) достаточно широко используется, есть и другие варианта попадание мусора в bool. Но проверять значение после подозрительных мест надо обязательно. Потом такой момент, если используется swtich, пусть даже с параметром enum, все равно в голове помним о левых значениях, которые обработаем default. При работе с bool переменными думается true/false, а там может и вигная какая то быть, причем "заразная", передается присваиванием ( B2 = B1 ). А явное преобразование B = (bool)( B ) по моему, должно работать четко.
-
я в этом вижу потенциальную проблему, например, при чтении бинарного файла данных.Придется производить доп. операции, что бы избавиться от мусора: //data.bin = {0x0D, 0x00, 0x00, 0x00} f = fopen("data.bin", "r"); fread(&B, sizeof(B), 1, f); //B = 13 fclose(f); //Избавляемся от мусора if (B) B = true; else B = false;
-
Если бы не мешали я бы может и не заметил: //B = 13 if (B == true) printf("true\n"); else printf("false\n"); B = !B; if (B == true) printf("true\n"); else printf("false\n"); выводит только "true"
-
явное преобразование типа тоже не помогает: B2 = (bool)(B); //B2 = 12
-
#include <stdbool.h> int main() { bool B; B = 13; //B = 1 B = !B; //B = 0 unsigned char* Ptr; Ptr = (unsigned char*)(&B); *Ptr = 13; //B = 13 bool B2; B2 = B; //B2 = 12 B2 = !B; //B2 = 13 return 0; } Почему при присваивание непосредственно числа все нормально ( B = 13 ), а при присваивании другово bool ( B2 = B ) мусор остается? Так и должно быть?
-
Симуляция ввода-вывода
HEX ответил DogPawlowa тема в IAR
Все должно работать, см руководство на компилер раздел DLIB runtime environment. Надо только включить соотв. опцию линкера (если текст в окне появился, значит включено, тока почему дата левая?). Что подрузомивается под "досовского turboC"? А так очень нужная и полезная штука. -
Сброс при дебаге и сброс через вкл./откл. питания
HEX ответил coolibin тема в ARM, 32bit
причиной можте быть что нет сигнала rst при включении питания, а при запуске в отладчике сигнал сброса формирует jlink -
организация структуры проекта мне попадалась только тут: Таненбаум "Операционные системы разработка и реализаци" но и по инету полазить можно
-
А как можно подключать си-шный файлы из библиотеки к проекту?
-
unit-тесты
HEX ответил romez777 тема в Программирование
Книжки, все достоваемо в инете. - Сэм Канер, Джек Фолк "Тестирование ПО" - Д.Макгрегор, Д.Сайкс "Тестирование объектно-ориентирования ПО" - Капберстон "Быстрое тестирование" советую посмотреть на форуме rsdn.ru там есть ветка посвященная тестированию -
В опциях проекта необходимо установить: - General Options\Library Configuration = Full - Linker \With I/O emulation modules = true дальше как обычно, например, fopen, fread,...
-
Я разводкой плат к счастью, а может, к сожалению не занимаюсь, и в этих вопросах мало компетентен. Это был просто случай из моего опыта. Фотку бы показал, да сейчас это платы уже нету.
-
Был похожий случай: пластиковый корпус, внутри плата с lpc2134, при воздействии статическим электричеством, например, снятие защитного полиэтилена с корпуса, проц достаточно стабильно зависает (при этом сильно грелся), лечилось только передергиванием питания, сброс не помогал. Если кто знает просветите, возможность возникновения такой ситуации зависит от семейства проца или в любом случае соотношение качество разводки / уровеня помех?
-
реализация логера
HEX опубликовал тема в Программирование
Может кому пригодиться. Сама идея описана здесь, вот еще статья на эту тему, спасибо авторам. Log.h #ifndef LOG_H #define LOG_H #include "Config.h" #include <stdbool.h> #if (LOG_LEVEL > 0) #include <iostream> #endif //Приоритеты (типы сообщений) #define LOG_NONE 0 #define LOG_FATAL 1 #define LOG_ERROR 2 #define LOG_WARNING 3 #define LOG_NOTICE 4 #define LOG_INFO 5 //Уровень фильтрации сообщений лога #ifndef LOG_LEVEL #define LOG_LEVEL (LOG_NONE) #endif class Logger { private: public: Logger(void); static void AddMess(int Level, const char *mess, ...); static void AddStr(const char *mess, ...); }; //Добавить Info сообщение в лог #define LogInfo(...) \ if (LOG_LEVEL >= LOG_INFO) { \ Logger::AddMess(LOG_INFO, __VA_ARGS__); \ } \ //Добавить Notice сообщение в лог #define LogNotice(...) \ if (LOG_LEVEL >= LOG_NOTICE) { \ Logger::AddMess(LOG_NOTICE, __VA_ARGS__); \ } \ //Добавить Warning сообщение в лог #define LogWarning(...) \ if (LOG_LEVEL >= LOG_WARNING) { \ Logger::AddMess(LOG_WARNING, __VA_ARGS__); \ } \ //Добавить Error сообщение в лог #define LogError(...) \ if (LOG_LEVEL >= LOG_ERROR) { \ Logger::AddMess(LOG_ERROR, __VA_ARGS__); \ } \ //Добавить Fatal сообщение в лог #define LogFatal(...) \ if (LOG_LEVEL >= LOG_FATAL) { \ Logger::AddMess(LOG_FATAL, __VA_ARGS__); \ } \ //Добавить строку в лог #define LogStr(...) \ if (LOG_LEVEL >= LOG_FATAL) { \ Logger::AddStr(__VA_ARGS__); \ } \ #endif //LOG_H Log.cpp #include "Log.h" #include <cstdarg> //Имена типов сообщений const char LevelNames[6][8] = { "", "Fatal", "Error", "Warning", "Notice", "Info" }; //----------------------------------------------------------------------------- // Logger //----------------------------------------------------------------------------- //Конструктор Logger::Logger(void) { } //Добавить строку в лог //mess: // Сообщение //...: // Дополнительные аргументы в стиле printf void Logger::AddStr(const char *mess, ...) { #if (LOG_LEVEL > 0) va_list args; va_start(args, mess); vprintf(mess, args); va_end(args); printf("\n"); #endif } //Добавление сообщения в лог //Level: // Тип сообщения //mess: // Сообщение //...: // Дополнительные аргументы в стиле printf void Logger::AddMess(int Level, const char *mess, ...) { #if (LOG_LEVEL > 0) va_list args; //тут можно добавить вывод строки дата/время //... //Тип сообщения if ((Level > LOG_NONE) && (Level <= LOG_INFO)) { printf(" %s: ", LevelNames[Level]); } //Сообщение va_start(args, mess); vprintf(mess, args); va_end(args); printf("\n"); #endif } Config.h #ifndef CONFIG_H #define CONFIG_H //Уровень лога отлади 0..5 #define LOG_LEVEL 4 #endif //CONFIG_H -
Мусор может появляться если выходы драйвера ни куда не подтянуты: "прямой" должен быть подтянут к "+", "инверсный" к земле.