I will never be able to sleep before an exam
This commit is contained in:
parent
03a3acd11b
commit
eb86bdacd8
@ -27,15 +27,22 @@ static struct pwm_event {
|
||||
#define LIST_INSERT(new, prev, member) (\
|
||||
list_insert(&(new.member), &(prev.member), offsetof(struct pwm_event, member)))
|
||||
|
||||
//TODO GYAAAAAAAGH!!!
|
||||
#define EVENT_FROM_MEMBER(member_ptr, member_offset) \
|
||||
((struct pwm_event *)(char *)member_ptr - member_offset)
|
||||
|
||||
#define MEMBER_FROM_EVENT(event_ptr, member_offset) \
|
||||
((struct link_pair *)(char *)event_
|
||||
|
||||
static void list_insert(struct link_pair *new_links, struct link_pair *prev_links, size_t parent_offset) {
|
||||
new_links->next = prev_links->next;
|
||||
new_links->prev = (struct pwm_event *)(char *)prev_links - parent_offset;
|
||||
((struct link_pair *)(char *)prev_links->next + parent_offset)->prev = (struct pwm_event *)(char *)new_links - parent_offset; //GYAAAAGH
|
||||
prev_links->next = (struct pwm_event *)(char *)new_links - parent_offset;
|
||||
new_links->prev = EVENT_FROM_MEMBER(prev_links, parent_offset);
|
||||
((struct link_pair *)(char *)prev_links->next + parent_offset)->prev =
|
||||
EVENT_FROM_MEMBER(new_links, parent_offset); //GYAAAAGH
|
||||
prev_links->next = EVENT_FROM_MEMBER(prev_links, parent_offset);
|
||||
}
|
||||
|
||||
static void list_remove(struct link_pair *event) {
|
||||
static void list_remove(struct link_pair *event_link, size_t parent_offset) {
|
||||
event_link->prev
|
||||
}
|
||||
|
||||
void init_softpwm() {
|
||||
@ -51,7 +58,8 @@ void init_softpwm() {
|
||||
for(size_t event_i = 0; event_i < SOFTPWM_PIN_COUNT; event_i++) {
|
||||
events[event_i].time = event_i;
|
||||
events[event_i].pins = (1 << (event_i + 1)) - 1;
|
||||
LIST_INSERT(events[event_i], events[((int)event_i - 1) % (SOFTPWM_PIN_COUNT + 1)], active);
|
||||
LIST_INSERT(events[event_i],
|
||||
events[((int)event_i - 1) % (SOFTPWM_PIN_COUNT + 1)], active);
|
||||
}
|
||||
|
||||
SOFTPWM_DDR = 0xff;
|
||||
@ -84,10 +92,8 @@ ISR(TIMER0_OVF_vect) {
|
||||
**/
|
||||
|
||||
ISR(TIMER0_COMP_vect) {
|
||||
/**
|
||||
static struct pwm_event *on_event = &events[SOFTPWM_PIN_COUNT];
|
||||
SOFTPWM_PORT = on_event->pins;
|
||||
on_event = on_event->next;
|
||||
OCR0A = on_event->time;
|
||||
**/
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user