Aquí hay algunas cosas que se me vienen a la mente de inmediato.
- Usted debe saber todos los detalles de lo que sucede cuando el procesador sale de un power-on reset. Habrá un número de registros de control y estos tienen valores por defecto. Usted debe saber que estos, abajo fría.
- Usted debe saber todo de la arquitectura de CPU de los detalles. Todos los registros, modos especiales de usarlos, etc. Estas cosas se le dan pistas acerca de cómo organizar los registros de la llamada y regresar de funciones, etc. Si usted está utilizando C, o quiere ser compatible con C, usted tendrá que leer acerca de las decisiones hechas por diversos compilador de C de los proveedores (no siempre las mismas opciones.)
- Usted debe saber todos los detalles acerca de las diversas unidades funcionales y biblioteca código que se va a permitir que se vinculen. En particular, si el apoyo de tanteo y retracto. En algunos casos, no se puede permitir el pre-emption ya que no hay forma de guardar el estado de algunas de las operaciones que están en marcha (el MSP430 multiplicador es como este) a pesar del hecho de que el temporizador de intervalos puede interrumpir ese proceso. En algunos casos, respecto a las bibliotecas, que no puede ser interrumpido, ya que han estado estático que sería dañado por un subproceso independiente con acceso al mismo código. Etc.
- El código de inicio tendrán que estar vinculados a la power-on reset de la dirección de la MCU. Su trabajo es hacer lo que la inicialización se prometió. Esta podría ser la tabulación de las áreas de memoria, la inicialización de la memoria, y cualquier otra cosa que se espera que en algún estado conocido antes de la ejecución de la primera rosca/proceso. Si C está implicada, esto significa que la inicialización de todos los inicializan las variables estáticas por sus valores apropiados y la inicialización de todas las demás variables estáticas para su semántica equivalente a 0, lo que puede ser.
- Usted necesita saber todas las maneras en que las excepciones pueden llevarse a cabo y cómo diferenciar entre, por ejemplo, un temporizador de vigilancia de eventos vs un power on reset evento.
- El enlazador de archivo de entrada simplemente establece las áreas donde el código y se inicializan los datos pueden ser colocados y lo grandes que son. También utiliza los nombres de modo que el proceso de vinculación puede asignar nombre código nombre o datos inicializados a los lugares adecuados como se indica en el enlace de archivo de entrada. Esto no es complicado. Pero los detalles no tienen que ser correctos. Si usted está usando un compilador de C, que compilador de C, probablemente hará que todo tipo de suposiciones acerca de los nombres de las secciones (segmentos) y usted tendrá que obedecer o bien escribir una herramienta que modifica el código del objeto antes de la vinculación.
- Usted puede necesitar escribir una herramienta especial para el enlace, de todos modos. Esto puede suceder si usted tiene que admitir varios compiladores de C la generación de nombre diferentes segmentos en sus ficheros objeto; o un ensamblador de salida que también utiliza diferentes nombres; etc. A veces, la rutina de los prólogos y epílogos de no cometer los mismos supuestos, incluso, y usted puede necesitar a la revisión de esas cosas antes de vinculación. Usted también puede necesitar para escribir un instrumento de parches, de todos modos, el parche o "arreglar" las direcciones que se especifican en el objeto de archivos antes de la vinculación. (Yo he tenido que hacer esto con 6502/65816 procesador de código destinado para el archivo de ROM producción con extraños memoria-mappers que son diferentes y también incompatibles el uno con el otro.)
Y eso es sólo una lista muy corta que fluye de mis dedos, sin pensar en ello. Estoy seguro de que si me pasó otros 5 minutos, yo podía volver a esta lista. (Por ejemplo, de que no me he incluso a abordar nada acerca de lo que un depurador pueda desear en términos de información y/o modificar o insertar un código para apoyar sus operaciones. Ni he discutido las diferencias implicadas en la universidad de Harvard vs von Neumann sistemas de memoria. Ni he discutido el estándar de "programa modelo" de organización [código; constantes; init datos; uninit de datos; montón; pila, etc.])
Yo recomendaría tomar este en pasos lentos. Ya que dicen saber ya sobre el metal desnudo de la programación y conocer acerca de los sistemas operativos, así, permítanme simplemente recomendamos que lea la primera XINU libro de Douglas Comer (es circa 1984, tiene una tapa roja y no hay ningún volumen 2, etc.) Y luego ver si puede improvisar un cambio de cooperativa del sistema operativo. Esto significa que NO hay PRE-EMPTION. Sólo los HILOS -- no incluye, aparte de los procesos -, pero los hilos que comparten el mismo espacio de código, y las constantes estáticas de datos, y el montón; con la única diferencia de que se han separado de las pilas. El apoyo de un interruptor() llamada a hacer esta cooperativa cambio de subproceso de trabajo. También debe soporte de hardware controlador de eventos sin accidentalmente desbordante algunos de pila del subproceso en el proceso. Usted necesita para diseñar cuidadosamente cómo manejar los eventos de hardware y su código de controlador. (I dividir esto en hardware de bajo nivel de respuesta código + alto nivel de subproceso accesible código separados por buffers para separar los dos el uno del otro para que puedan operar de forma independiente, mientras que también apoya el hardware totalmente.)
Si quieres ir al siguiente paso, agregar inter-hilo de mensajería. El uso de una simple palabra, sólo una palabra, para cada hilo y dejar que cualquier otro hilo de escribir. Sobrescribir, de hecho. Esta no debe ser complicado. Vea si usted puede conseguir una sola palabra de mensajes entre los procesos de bien.
A continuación, añadir un sueño cola y proporcionar un temporizador que puede mover los hilos del sueño de la cola de nuevo en la cola de ejecución.
A continuación, agregue el semáforo de colas.
Si usted puede llegar a este punto, habrás aprendido mucho.
Y por cierto, me tomó menos de dos días laborables (lunes, hasta principios de los martes por la tarde) para obtener todos los de arriba de trabajo (desde cero y sin una sola línea de código a partir de proyectos anteriores, por lo que acaba de escribir tan rápido como pude pensar -- incluyendo una completa mezcla de asamblea y C a manejar eventos de hardware y así sucesivamente. Yo había corrido/el sueño/el semáforo de colas, temporizadores, y co-operative hilos junto con cada subproceso manejo de excepciones adicionales ... en menos de dos días.
Así que esto NO es una tarea particularmente difícil por delante.
Tener en ella.