Опубликован: 24.04.2009 | Уровень: специалист | Доступ: платный
Лекция 8:

Программирование приложений в CE

Аннотация: Данная лекция посвящена программированию приложений в CE. Приводятся практические примеры кодов ввода/вывода данных с использованием API Windows.
Ключевые слова: Windows, embedded, C, консоль, ASCII, GUI, ядро, программа, дизайн, target, C++, файл, операции, API, readfile, функция, sleep, millisecond, вывод, COM, блокирование процесса, поток, кабель, порт, UART, прямой, драйвер устройства, интерфейс, ПО, бит, LSB, MSB, AND, OR, очередь, приложение, build, запись, DLL, путь доступа, внешняя ссылка, двойной щелчок, доступ, переменная, диск, sysgen, переменные окружения, OaK, platform, среда разработки, разделы, выход, ассемблер, цикла, основная программа, время выполнения, while, remote, утилита, kernel, tracker, file viewer, буфер, глобальные переменные, счетчик, аргумент, random, объект, минимум, ссылка, место, значение, энергопотребление, разъем, BSP, отладочное сообщение, прикладная программа, операционная система, активность, меню, тип переменной, удобочитаемость, 16-bit, класс, цикл while, функция обратного вызова, switch, указатель, массив, кодирование, управляемый код, Visual Basic, net, Intermediate, language, интерпретация, compact, CLI, CLR, class, library, FCL, Java, JVM, производительность, динамическая, компиляция, строковый, visual, последовательный порт, USB, модуль, дисплей, LCD, аналоговый сигнал, BIB, драйвер, subproject, диалоговое окно, RFID, индикатор, manager, interface, kit, controller, вызов функции, сайт, LED, invoke, определение, делитель частоты


Эту швейную машину Bernina Artisita можно запрограммировать для шитья сложными стежками. Можно загружать также новые стежки. На ней выполняется Windows Embedded CE. Фотография с разрешения Mike Hall.

Программирование приложений в CE

В качестве введения в разработку прикладных программ рассмотрим несколько коротких программ C/C++ для Windows Embedded CE для демонстрации базовых операций В/В на устройстве eBox, использующем Windows Embedded CE. Предполагается, что читатель уже знаком с базовым синтаксисом C/C++.

Чтобы сохранить эти программы короткими и легкими для рассмотрения, все несколько первых примеров будут простыми консольными приложениями CE (в консольное окно посылается только текст -- никаких окон или графики). Программы C/C++ могут писать текст на консоль, используя функцию printf для строк ASCII или функцию wprintf для строк Unicode. Это сохранит начальные примеры программ короткими и немного легче для рассмотрения. В последующих примерах будут рассмотрены более типичные приложения Windows (на основе GUI) и пример на C#.

Если имеется специальное сгенерированное ядро CE, оно должно включать поддержку консольных приложений для выполнения и вывода из этих простых консольных программ. Консольное окно не появляется, пока программа не посылает первый символ на консоль.

Файлы исходного кода доступны для всех демонстрационных программ. Эти файлы можно скопировать с компакт-диска, приложенного к этому документу, и установлены как подпроекты в дизайн вашей ОС для быстрой демонстрации. Если они будут включены в ОС, примеры C/C++ можно выполнить с помощью Target \Rightarrow Run Programs, или запустить, используя окно команд eBox. Программы C# необходимо будет развернуть, как было описано в последнем уроке в "Создание настройки ядра CE 6.0" .

Пример программы FileIO

Эта программа C++создает файл, записывает файл, и закрывает новый файл. Затем она открывает файл для операции чтения, считывает данные из файла, выводит их, и снова закрывает файл. На консоли выводятся статусные сообщения. После небольшой паузы, чтобы позволить пользователю просмотреть статусные сообщения в консольном окне, программа автоматически завершается. В Windows Embedded CE эти операции с файлами выполняют с помощью вызовов функций API CreateFile, ReadFile, WriteFile, и CloseHandle API.

Функция API CE Sleep(milliseconds) используется для задания паузы в программе. Отметим использование Unicode для строк имен файлов с помощью _T("..") и TCHAR. После выполнения программы можно также проверить содержимое нового файла, \Temp\CE_Demo.txt, используя на устройстве редактор, такой как WordPad. Отметим использование в C строки "\\" для представления одного символа обратной косой черты.

// FileIO.cpp : Определяет точку входа для консольного приложения.
//
// пример программы FileIO 
// Показывает как создать,записать, и прочитать файл, используя API файлов CE
//
// Помните, что CE использует 16-битный Unicode для символьных строк!
//		_T("....") генеририует строку Unicode
//		TCHAR является строковым типом Unicode 
//
#include "stdafx.h"
int _tmain(int argc, TCHAR *argv[], TCHAR *envp[]){
	HANDLE hFile;
	DWORD cBytes;
	char cBuffer[] = "Hello File World\n";
	printf("\nCreating CE_Demo.txt file\n");
// Открытие файла для записи 
hFile = CreateFile(_T("\\Temp\\CE_Demo.TXT"), GENERIC_WRITE, FILE_SHARE_WRITE, 
  NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);

// Проверка ошибок открытия файла 
	if (hFile == INVALID_HANDLE_VALUE){
		printf("file write open errors\n");
		Sleep(1000);
		return 0;
	} // Запись в файл 
	if (!WriteFile(hFile, cBuffer, strlen(cBuffer), &cBytes, NULL)){
		printf("file write errors\n");
		Sleep(1000);
		return 0;
	}
// Закрытие файла 
	CloseHandle(hFile);

// Снова открываем файл для чтения 
	hFile = CreateFile(TEXT(""), GENERIC_READ, FILE_SHARE_READ, NULL,
		OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
// Проверяем ошибки открытия файла 
	if (hFile == INVALID_HANDLE_VALUE){
		printf("file read open errors\n");
		Sleep(1000);
		return 0;
	}
// Считываем только что записанные в новый файл данные
	if (!ReadFile(hFile, cBuffer, 79, &cBytes, NULL)){
		printf("file read errors\n");
		Sleep(1000);
		return 0;
	}
// Выводим считанные данные и делаем задержку на 4 секунды 
// перед выходом из программы 
	printf("%s\n",cBuffer,cBytes);
	printf("the file data was written and read back OK\n");
	Sleep(4000);
// Закрытие файла
	CloseHandle(hFile);
    return 1;
}
8.1.
Бахтиёр Бутаев
Бахтиёр Бутаев
Таджикистан, Душанбе, Таджикский Технический Университет (ТТУ), 2013
Ярославй Грива
Ярославй Грива
Россия, г. Санкт-Петербург